Можно ли напечатать процессор и ядро, используя pthreads в Linux - PullRequest
3 голосов
/ 01 июля 2011

Я пытаюсь заставить многопоточное приложение работать на нескольких ядрах. Я посмотрел на сходство, планирование и т. Д. Есть ли способ узнать идентификатор процессора, на котором работает какой-либо поток? Сейчас я использую sched_getaffinity - но я думаю, что это связано с идентификатором процесса, а не с потоком внутри процесса. Многопоточное приложение прекрасно работает в Windows, но, похоже, связано с процессором (используя только один процессор) в Linux

Обновление

Если мое приложение linux запускает 64 потока - у меня все еще есть только один pid, верно? Я все еще понимаю, что каждый запущенный поток может работать на разных процессорах / ядрах на целевом оборудовании, верно?

Пример приложения здесь: Как мне заставить многопоточное приложение использовать все ядра Ubuntu под VMWare?

1 Ответ

2 голосов
/ 01 июля 2011

Ваш первый вопрос

Есть ли способ узнать идентификатор процессора, на котором работает какой-либо поток?Я использую sched_getaffinity сейчас

sched_getaffinity не возвращает процессор, он возвращает маску подходящих процессоров.В нем говорится:

Маска сродства на самом деле является атрибутом для каждого потока, который можно независимо настраивать для каждого из потоков в группе потоков.

И затем

Если вы используете API потоков POSIX, тогда используйте pthread_setaffinity_np (3) вместо sched_setaffinity ().

Чтобы просто узнать используемый процессор, /proc/[pid]/stat имеетПоле «процессор»:

processor% d (начиная с Linux 2.2.8) Номер ЦП, который был последний раз запущен.

Ваш второй вопрос:

Многопоточное приложение отлично работает в Windows, но, похоже, связано с процессором (используя только один процессор) в Linux

Покажите наименьший пример, который демонстрирует эту проблему.

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