параллельный цикл openMP в cpp

Я пытаюсь научиться распараллеливанию с openMP в cpp. Я использую следующий тестовый пример

 #pragma parallel for num_threads( 4 )
for ( int i = 0 ; i < N ; i++ ){
for ( int j = 0 ; j < 100000 ; j++ ){
data[ i ]  =  data[ i ] + ( double ) i ;
}
}

Я использую 4 темы; с верхней (в Unix) я должен увидеть в ЦП% ЦП
400% или что-то подобное. Но я получаю 100%, что было бы в случае серийного исполнения.
И если я измеряю время, то выигрыша в скорости по сравнению с последовательным исполнением нет. Я не могу понять, что я делаю не так.

0

Решение

Вы пропустили omp в pragma директивы.

Пытаться:

#pragma omp parallel for num_threads( 4 )

Как описано Вот, это одна из самых распространенных ошибок при использовании OpenMP в C ++.

С помощью компилятора GCC можно уловить эту проблему, скомпилировав -Wall или же -Wunknown pragmas флаг. Это хорошая привычка -Wall так как он заглушает многие загадочные проблемы. Другие компиляторы имеют аналогичные параметры.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]