Количество созданных потоков - 12, но все еще работает только на одном ядре из 12-ядерных процессоров. - PullRequest
2 голосов
/ 17 января 2012

У меня странная проблема. У меня есть мексфункция Matlab, в которой я использовал директивы / функции OpenMP. Перед началом параллельного раздела (параллельный для ...) я использую команды для установки и печати количества созданных потоков:


nP = omp_get_num_procs();
omp_set_num_threads(nP);
mexPrintf("\n Num of threads= %d\n",nP);
.
.
.
#pragma omp parallel for shared(...)

Проблема в том, что на выходе выводится «Num of threads = 12», но следующий параллельный раздел не работает на всех 12 ядрах моей машины (но только на 1 ядре). Моя программа была написана давно, и у меня не было такой проблемы ранее (она работала на всех 12 ядрах). Недавно система была повреждена и ОС (Win 7 Pro) была переустановлена ​​с обновленной версией Matlab 2011b (ранее 2010b). Я также установил Visual Studio 2010 Pro.

Есть что-то, что я пропускаю или пропускаю?

1 Ответ

0 голосов
/ 17 января 2012

Вы вызываете мекс-функции внутри блока omp parallel for?

Мне больше всего повезло: сначала последовательно извлекать указатели, затем параллельно обрабатывать, а затем в конце последовательно загружать результаты в переменные matlab. Таким образом, параллельный код является чистым C ++, не вызывается mex-функций (которые могут ожидать разделяемой блокировки).

Конечно, убедитесь, что вы на самом деле компилируете с включенным OpenMP ... в противном случае директивы будут проигнорированы, и вы получите последовательный код.

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