в OpenMP, как я могу сделать так, чтобы каждое ядро ​​работало с одним потоком? - PullRequest
5 голосов
/ 14 июля 2011

Я начинаю использовать OpenMP 3 дня назад. Я хочу знать, как использовать #pragma, чтобы каждое ядро ​​работало с одним потоком. Более подробно: -

int ncores = omp_get_num_procs();

for(i = 0; i < ncores;i++){

....

}

Я хочу, чтобы цикл for был распределен в ядрах, которые у меня есть, так что #pragma я должен использовать?

другое дело, что это за #pragmas значит?

#pragma omp parallel

#pragma omp for

#pragma omp parallel for

Я немного запутался с этими #pragmas

спасибо большое ..:)

Ответы [ 3 ]

8 голосов
/ 14 июля 2011

Закрепление резьбы

Я хочу знать, как использовать #pragma, чтобы каждое ядро ​​работало одна нить.

Какую реализацию openmp вы используете? Ответ зависит от этого.

Закрепление не определяется прагмами. Вам придется использовать переменные среды. При использовании gcc для привязки потоков к ядрам можно использовать переменную окружения:

GOMP_CPU_AFFINITY="0-3" ./main

привязывает первый поток к первому ядру, второй поток ко второму и т. Д. Для получения дополнительной информации см. Документацию gomp (раздел 3, Переменные среды). Я забыл, как сделать то же самое с PGI и другими компиляторами, но вы сможете найти ответ для этих компиляторов, используя популярную поисковую систему.

OpenMP Pragmas

Нет способа избежать чтения документации. См. эту ссылку на веб-сайт IBM , например. Я нашел урок Блейза Барни весьма полезным.

2 голосов
/ 19 августа 2011

Чтобы добавить к предыдущему ответу, эквивалентная переменная среды в библиотеке Intel OpenMP - KMP_AFFINITY. Аналогичное использование для

GOMP_CPU_AFFINITY="0-3"

будет

KMP_AFFINITY="proclist=[0-3]"

Полная информация о синтаксисе и параметрах KMP_AFFINITY здесь: http://software.intel.com/sites/products/documentation/studio/composer/en-us/2009/compiler_c/optaps/common/optaps_openmp_thread_affinity.htm

1 голос
/ 28 августа 2014

Новая реализация OpenMP (3.0+) делает вашу жизнь намного проще. Вы можете просто добавить следующую строку в ваш .bashrc или .bash_profile.

export OMP_PROC_BIND = true

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