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, он разрешил его как расширение.