2017-01-09 24 views
0

Я хотел изучить основы, на которых OpenMP API выделяет потоки на ядра. Какие факторы он принимает во внимание при этом? Может ли это распределение быть изменено в соответствии с потребностями программиста?Как OpenMP выполняет распределение потоков?

+1

Возможно, это слишком широкий вопрос. подумайте о других сообществах, таких как https://www.reddit.com/r/programming/ – pedrorijo91

ответ

0

Я считаю, что вы ищете близость между резьбами с открытым верхом и резьбами/сердечниками. Ответ: да, кстати.

Если вы используете компиляторы Intel, вы можете взглянуть на этот сайт для переменной среды KMP_AAFFINITY. https://software.intel.com/en-us/node/522691

Если вы используете компиляторы GNU, вам могут быть интересны эти официальные переменные среды OpenMP. https://gcc.gnu.org/onlinedocs/libgomp/OMP_005fPLACES.html https://gcc.gnu.org/onlinedocs/libgomp/OMP_005fPROC_005fBIND.html

+0

Я не думаю, что в документации gnu ясно, что поддержка привязки зарезервирована для полностью поддерживаемых целей (не включая Windows). Как Intel, так и gnu OpenMP по умолчанию - 1 поток на каждый логический процессор, которого обычно слишком много (если вы не отключите HyperThreading) – tim18

0

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

См: OpenMp set number of threads for parallel loop depending on variable

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