Будет ли sched_setaffinity
или pthread_attr_setaffinity_np
работать, чтобы установить сходство потоков под OpenMP?Приоритет OpenMP и CPU
Похожие: CPU Affinity
Будет ли sched_setaffinity
или pthread_attr_setaffinity_np
работать, чтобы установить сходство потоков под OpenMP?Приоритет OpenMP и CPU
Похожие: CPU Affinity
Да, названные вызовы будут работать, чтобы установить к потоку. Единственная проблема - исправить номер потока и установить правильное сродство в правом потоке (вы можете попробовать использовать статическое планирование цикла for
для известного количества потоков).
Как я знаю, почти каждый openmp позволяет устанавливать аффинность через среду. Имя переменной среды изменяется (оно не было стандартизировано некоторое время назад). Я использую страницу http://www.spec.org/omp2001/results/omp2001.html, чтобы найти реализацию openMP, и поиск будет искать конкретное имя переменной среды. Аффинити задается в ~ половине результатов specOMP. В результатах также есть некоторые дополнительные параметры настройки производительности OpenMP.
E.g. For intel compiler переменная
export KMP_AFFINITY=compact,0
export SUNW_MP_PROCBIND=TRUE
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
спасибо! ничего на уровне языка, например 'pthread_attr_setaffinity_np'? –
нет, стандарт openmp не имеет нигде связывания прагмы или функций. Единственный способ (и рекомендуется) - связывать потоки через переменную среды, компилятор или openmp3.1. Эта настройка должна быть сделана до начала основной работы. – osgx
так, строго говоря, ваш ответ должен начинаться с «Нет» :) –