Я пытаюсь научиться распараллеливанию с 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%, что было бы в случае серийного исполнения.
И если я измеряю время, то выигрыша в скорости по сравнению с последовательным исполнением нет. Я не могу понять, что я делаю не так.
Вы пропустили omp
в pragma
директивы.
Пытаться:
#pragma omp parallel for num_threads( 4 )
Как описано Вот, это одна из самых распространенных ошибок при использовании OpenMP в C ++.
С помощью компилятора GCC можно уловить эту проблему, скомпилировав -Wall
или же -Wunknown pragmas
флаг. Это хорошая привычка -Wall
так как он заглушает многие загадочные проблемы. Другие компиляторы имеют аналогичные параметры.
Других решений пока нет …