OpenMP и STL-стиль для - PullRequest
       35

OpenMP и STL-стиль для

10 голосов
/ 25 января 2011

Я пытаюсь распараллелить мою программу с openMP.Программа активно использует STL-итераторы. сказал , что openMP 3.0 может справиться с этим:

std::vector<int> N(2*N_max+1);

std::vector<int>::const_iterator n,m;
#pragma omp parallel for
for (n=N.begin(); n!=N.end(); ++n){
     //Task to be in parallel
};

Но я получил следующую ошибку:

error: invalid controlling predicate

Я использую gcc 4.5.0, (openMP3 реализован в 4.4.0) и моя строка сборки:

g++  -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP  

Ответы [ 2 ]

7 голосов
/ 25 января 2011

Стандартный OpenMP в целом не подходит для итераторов C ++. Стандарт требует, чтобы итераторы были итераторами с произвольным доступом с постоянным временем для произвольного доступа. Он также допускает только < и <= или > и >= в тестовых выражениях для циклов, но не !=.

Если вы интенсивно используете итераторы и STL, вам лучше использовать Потоки .

7 голосов
/ 25 января 2011

К сожалению, спецификация OpenMP V3.0 не включала "! =" Как часть допустимого синтаксиса для канонического цикла for.Однако, если у вас есть доступ к недавнему компилятору Intel, он разрешил его как расширение.

...