现在我想在满足条件的情况下在所有线程中递增count变量,除了将count变量封装在关键块中还是使用count []作为数组之外,还有更好的方法吗?
#pragma omp parallel for num_threads(number_of_threads)
{
int id = omp_get_thread_num();
for(i=1; i < ht; i++) {
for(j=1; j < wd; j++) {
// Some random code
double mag = sqrt(a[i] * a[i] + b[j] * b[j]);
if(mag > 100) {
#pragma omp critical
{
count++;
}
} else {
// do nothing
}
}
}
}
答案 0 :(得分:1)
根据Mark的评论,摆脱critical
块并用
omp parallel
块
#pragma omp parallel for num_threads(number_of_threads) reduction(+:count)
这为每个线程提供了一个私有count
,它们独立递增,然后在退出omp parallel
块时求和