У меня Ubuntu 10.04
, версия gcc 4.4.3
. Я компилирую код С++ с omp.h
и параметром g++ -fopenmp
. Большую часть времени все работает так, как ожидалось. У меня четырехъядерный с гиперпоточностью, так что практически 8 ядер.
Случайным образом, когда я запускаю свое программное обеспечение (и смотрю системный монитор), все 8 ядер работают на 100%, включаются вентиляторы, и все такое хорошее дело. В течение полсекунды все ядра, кроме одного, отключаются и становятся неактивными, а одно продолжает работать.
В это время, если я отменяю свою программу (просто 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 }