鉴于此代码示例,练习是使用任务将代码与 OpenMP并行。这是一组项目,我们想计算那些好的。
int count_good (item_t* item)
{
int n = 0;
while (item) {
if (is_good(item))
n++;
item = item->next;
}
return n;
}
这不完全是家庭作业。这是为了准备考试。我的想法如下:
int count_good (item_t* item)
{
int n = 0;
while (item) {
#pragma omp task
{
if (is_good(item))
n++;
}
item = item->next;
}
#pragma omp taskwait
return n;
}
...
int main ()
{
...
#pragma omp parallel
{
#pragma omp single
count_good(some_times);
}
}
一个问题是,n
它是单个线程的私有变量,但它可以被不同的任务同时增加。这会产生竞争条件吗?可以避免#pragma omp critical
吗?