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

Я пытаюсь распараллелить мою программу с помощью 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  

Ответ 1

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

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

Ответ 2

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