2012-05-07 5 views
11

Я пытаюсьКак использовать sched_getaffinity (2) и sched_setaffinity (2). Пожалуйста, дайте пример кода для использования в программе C

Run 16 копий одновременно с процессором пиннинга (2 экземпляра на ядро)

Выполнить 8 копий одновременно с процессором пиннинга (2 экземпляра на ядро) и перевернув процессорный ядро ​​до самого дальнего ядра после того, как определенная функция скажет, что функция 1 заканчивается.

Проблема, с которой я столкнулся, заключается в том, как выбрать самый дальний процессор.

Некоторые друзья предложили использовать sched_getaffinity (2) и sched_setaffinity, но я не нашел хороших примеров.

Пожалуйста, помогите.

ответ

14

Чтобы использовать sched_setaffinity, чтобы сделать текущий запуск процесса на ядре 7 вы это делаете:

cpu_set_t my_set;  /* Define your cpu_set bit mask. */ 
CPU_ZERO(&my_set);  /* Initialize it all to 0, i.e. no CPUs selected. */ 
CPU_SET(7, &my_set);  /* set the bit that represents core 7. */ 
sched_setaffinity(0, sizeof(cpu_set_t), &my_set); /* Set affinity of tihs process to */ 
                /* the defined mask, i.e. only 7. */ 

См http://linux.die.net/man/2/sched_setaffinity & http://www.gnu.org/software/libc/manual/html_node/CPU-Affinity.html для получения дополнительной информации.

5

Не используйте CPU_SETSIZE как параметр cpusetsize для параметра sched_ [set | get]. Имена вводят в заблуждение, но это неправильно. Макро CPU_SETSIZE (цитирует человека 3 cpu_set) "значение, большее, чем максимальный номер ЦП, который может быть сохранен в cpu_set_t." Вы должны использовать

sched_setaffinity(0, sizeof(cpu_set_t), &my_set); 

вместо этого.