openmp случайным образом использует только одно ядро - PullRequest
0 голосов
/ 10 марта 2011

Я в Ubuntu 10.04, версия gcc 4.4.3. Я компилирую код C ++ с omp.h и параметром g ++ -fopenmp. В большинстве случаев все работает как положено. У меня четырехъядерный процессор с гиперпоточностью, так что практически 8 ядер.

Случайно, когда я запускаю свое программное обеспечение (и наблюдаю за системным монитором), все 8 ядер работают на 100%, фанаты бьются, все это хорошо. В течение полсекунды все ядра, кроме 1, отключаются, а одно продолжает работать.

В настоящее время, если я отменяю свою программу (просто Ctrl + C) и перезапускаю ее - она ​​работает как положено, все ядра продолжают работать на 100%.

Вот фрагменты кода на случай, если он будет полезен:

28 #include <time.h>
29 #include <omp.h>
30 #include <string>
...
713 #ifdef _OPENMP
714         if(omp_get_dynamic())
715                 omp_set_dynamic(1);
716 #endif
717 
718 #pragma omp parallel
719         {
720 #pragma omp for schedule(dynamic) private(node)
721                 for (int c = 0; c < buffer->GetCount(); c++) {
... initialize objects pointers etc
724 #pragma omp critical(BUFFER_LOOKUP)
725                         {
... perform chunk of code that is a choke
734                         }

1 Ответ

1 голос
/ 11 марта 2011

Со страницы omp_set_dynamic (n) maual: n ... Значение, которое указывает, может ли количество потоков, доступных в последующей параллельной области, быть отрегулировано средой выполнения. Если не ноль, среда выполнения может регулировать количество потоков, если ноль, среда выполнения не будет динамически регулировать количество потоков

Попробуйте установить желаемое количество потоков с помощью #pragma omp параллельного поворота num_threads (n) omp_set_dynamyc.

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