Я использую OpenMP для распараллеливания следующего кода:
int fx(){
int x, sum;
for(int i=0; i<10000; ++i){
x = fx2(sum);
if(......) break;
sum += x;
}
return sum;
}
Поскольку это sum
должно быть добавлено в порядке из-за вызова fx2()
. Я решил использовать ordered
предложение OpenMP при применении schedule(dynamic)
(поскольку l oop может не работать целых 10000 раз):
int fx(){
int x, sum;
bool flag = true;
#pragma omp parallel for ordered schedule(dynamic) private(x)
{
for(int i=0; i<10000; ++i){
if(flag == false) continue;
x = fx2(sum);
if(......) flag = false;
#pragma omp ordered
sum += x;
}
return sum;
}
}
Однако, похоже, что результат не правильно, программа работает так долго. Что-нибудь не так с распараллеленным кодом OpenMP?