if条件语句中的Openmp关键部分

计算科学 并行计算
2021-12-17 23:56:27

我有这样的功能

void foo(x, *y) {
    some calculations

    if (x > *y) {
        *y = x/2;
    }

    more calculations
}

我的平行部分是

int x[] = some array;
double y=0;
#pragma omp parallel for
for ( int i  = 0; i<=n; i++) {
    do something 
    for ( int j = 0; j<=n; j++) {
           foo(x[i], &y);
}

如果我将 if 语句重写为

*y = x > *y ? x/2 : *y;

我可以

#pragma omp critical
*y = x > *y ? x/2 : *y;

但我不想更改代码。如何为条件 y-update 块创建临界区?

0个回答
没有发现任何回复~