Сопоставление потоков OpenMP с физическими ядрами - PullRequest
0 голосов
/ 17 января 2011

Так что я некоторое время смотрел онлайн, но безрезультатно. Я новичок в использовании OpenMP и поэтому не уверен в терминологии здесь, но есть ли способ выяснить отображение конкретной машины из OMPThread (заданного omp_get_thread_num ();) и физических ядер, на которых будут работать потоки?

Также меня интересовало, как именно потоки, назначенные OMP, например, поток 0 всегда будет работать в одном и том же месте, когда один и тот же код выполняется на одной и той же машине? Спасибо.

Ответы [ 2 ]

1 голос
/ 17 января 2011

Как правило, ОС заботится о назначении потоков ядрам, в том числе с OpenMP. Это сделано специально, и это хорошая вещь - обычно вы хотите, чтобы ОС могла перемещать потоки между ядрами (прозрачно для вашего приложения) по мере необходимости, поскольку это иногда прерывает ваше приложение.

Некоторые API-интерфейсы операционной системы позволяют устанавливать сходство потоков. Например, в Windows вы можете использовать SetThreadAffinityMask для принудительной установки потока на конкретное ядро.

0 голосов
/ 18 января 2011

В большинстве случаев Reed верен, OpenMP не заботится о назначении потоков ядрам (или процессорам). Однако из-за таких вещей, как повторное использование кэша и локальность данных, мы обнаружили, что во многих случаях назначение потоков ядру повышает производительность OpenMP. Поэтому, если вы посмотрите на большинство реализаций OpenMP, вы обнаружите, что обычно есть некоторая переменная окружения, которую можно установить для «привязки» потоков к ядрам. OpenMP ARB еще не указал какой-либо «стандартный» способ сделать это, поэтому в настоящее время он остается на усмотрение реализации OpenMP, чтобы решить, следует ли и как это делать. Было много дискуссий о том, должно ли это быть включено в спецификацию OpenMP или нет, и если да, то как это лучше всего сделать.

...