2013-09-20 2 views
0

Я использую cpuset из командной строки (то есть http://man7.org/linux/man-pages/man7/cpuset.7.html) для запуска программы C/C++.Получить текущий CPUSet

Удивительно, может ли C/C++ извлечь cpuset, который он работает поверх.

Я читал http://man7.org/linux/man-pages/man3/CPU_SET.3.html, но я не вижу никаких макросов, чтобы добиться того, чего хочу.

Основная причина, по которой я хочу получить cpuset внутри программы, - заполнить cpu_set_t *, чтобы передать ее pthread_attr_setaffinity_np().

Заранее спасибо.

ответ

0

U может работать на процессоре установлен как

#define _GNU_SOURCE 
    #include <sched.h> 


    cpu_set_t my_set; 
    CPU_ZERO(&my_set); 
    CPU_SET(1, &my_set); // here 1 is the cpu 1 similarly u can set more 
    CPU_SET(2, &my_set); // here 2 is the cpu 2 similarly u can set more 
    pthread_setaffinity_np(pthread_self(), sizeof (cpu_set_t), &my_set); 
+0

Благодаря ПСР. Я просто вычислил себя: (То, как вы предложили, не извлекает существующий cpuset, а создает cpuset ... – Hei

0
cpu_set_t cpuset; 
CPU_ZERO(&cpuset); 
if (0 == sched_getaffinity(getpid(), sizeof(cpu_set_t), &cpuset)) { 
    const long nCores = sysconf(_SC_NPROCESSORS_ONLN); 
    for (long i = 0; i < nCores; i++) { 
     if (CPU_ISSET(i, &cpuset)) { 
      std::cout << "core # " << i << " is in cpuset" << std::endl; 
     } 
    } 
} 
else { 
    std::cerr << "sched_getaffinity() failed: " << strerror(errno) << std::endl; 
} 
Смежные вопросы