Параллельный заказ OpenMP для l oop с оператором break - PullRequest
1 голос
/ 11 апреля 2020

Я использую 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?

...