2011-11-30 5 views

ответ

13

Да, названные вызовы будут работать, чтобы установить к потоку. Единственная проблема - исправить номер потока и установить правильное сродство в правом потоке (вы можете попробовать использовать статическое планирование цикла for для известного количества потоков).

Как я знаю, почти каждый openmp позволяет устанавливать аффинность через среду. Имя переменной среды изменяется (оно не было стандартизировано некоторое время назад). Я использую страницу http://www.spec.org/omp2001/results/omp2001.html, чтобы найти реализацию openMP, и поиск будет искать конкретное имя переменной среды. Аффинити задается в ~ половине результатов specOMP. В результатах также есть некоторые дополнительные параметры настройки производительности OpenMP.

E.g. For intel compiler переменная

export KMP_AFFINITY=compact,0 

For sun compiler:

export SUNW_MP_PROCBIND=TRUE 

For gcc (pre-openmp 3.1)

export GOMP_CPU_AFFINITY=0-63 

, где 63 максимальное количество CPU (когда подсчитанное от 0)

И newer OpenMP Standard, version 3.1 определяет переменную окружения OMP_PROC_BIND (см. раздел на 4.4), который является стандартизированным способом установки сродства в OpenMP. Используется:

export OMP_PROC_BIND=true 
+0

спасибо! ничего на уровне языка, например 'pthread_attr_setaffinity_np'? –

+0

нет, стандарт openmp не имеет нигде связывания прагмы или функций. Единственный способ (и рекомендуется) - связывать потоки через переменную среды, компилятор или openmp3.1. Эта настройка должна быть сделана до начала основной работы. – osgx

+0

так, строго говоря, ваш ответ должен начинаться с «Нет» :) –