gpt4 book ai didi

c - 使用并行任务减少 OpenMP

转载 作者:行者123 更新时间:2023-12-05 01:37:08 26 4
gpt4 key购买 nike

我尝试使用并行任务执行归约,但总是得到 0。这是我的代码:

int sum = 0;
#pragma omp parallel reduction(+:sum)
#pragma omp single
for(int i=0; i<10; i++)
{
#pragma omp task
{
printf("Thread: %d\n", omp_get_thread_num());
int y = 5;
sum += y;
}
}
printf("%d\n", sum);

但是当我用parallel for的时候,结果是对的,是50。谁能告诉我怎么修改parallel task的代码?这是我的并行代码,效果很好:

int sum = 0;
#pragma omp parallel for reduction(+:sum)
for(int i=0; i<10; i++)
{
printf("Thread: %d\n", omp_get_thread_num());
int y = 5;
sum += y;
}
printf("%d\n", sum);

最佳答案

根据OpenMP standard 4.5 ,您不能 reduce task 构造函数中使用的变量。

A list item that appears in a reduction clause of the innermost enclosing worksharing or parallel construct may not be accessed in an explicit task.

不过,看起来该功能将包含在 OpenMP 5.0 中。查看您的代码,更好的方法实际上是将并行 for 与 reduction 子句一起使用。

关于c - 使用并行任务减少 OpenMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53471539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com