как заставить программу ac работать на определенном ядре - PullRequest
5 голосов
/ 30 ноября 2011

Скажем, у меня есть следующая программа c:

#include <stdio.h>

int main()
{
    printf("Hello world \n");
    getchar();

    return 0;
}

gcc 1.c -o helloworld

и, скажем, у меня двухъядерный компьютер:

cat /proc/cpuinfo | grep processor | wc -l

Теперь мой вопрос: когда мы запускаем программукак заставить эту программу работать в core-0 (или любом другом конкретном ядре)?

Как это сделать программно?примеры, API, ссылки на код будет полезно.

Если нет доступных API, то есть ли время компиляции, время ссылки, время загрузки способ сделать это?

OTOH, как проверитьработает ли программа в core-0 или core-1 (или любом другом ядре)?

Ответы [ 2 ]

5 голосов
/ 30 ноября 2011

Поскольку вы говорите о / proc / cpu, я предполагаю, что вы используете linux.В Linux вы бы использовали функцию sched_setaffinity.В вашем примере вы бы позвонили

cpu_set_t set;
CPU_ZERO(&set);        // clear cpu mask
CPU_SET(0, &set);      // set cpu 0
sched_setaffinity(0, sizeof(cpu_set_t), &set);  // 0 is the calling process

Найдите man sched_setaffinity для более подробной информации.

3 голосов
/ 30 ноября 2011

Это зависит от ОС. Как указывает Феличе, вы можете сделать это в Linux, вызвав sched_setaffinity в вашей программе. Если вы в конечном итоге работаете на нескольких платформах, вам придется кодировать что-то свое для каждой из них.

В качестве альтернативы, вы можете указать сходство, когда вы запускаете свой исполняемый файл, из командной строки или из сценария запуска или чего-либо еще. См. taskset для инструмента командной строки Linux, чтобы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...