gpt4 book ai didi

c++ - 针对错误的 OpenMP 并行

转载 作者:行者123 更新时间:2023-12-02 10:19:10 25 4
gpt4 key购买 nike

我目前正在编写有关 OpenMP 的教程,其中给出了以下示例,并且作者声称它包含一个错误(结果不正确)。但是,我无法发现它:

#pragma omp parallel for private(temp)
for(i=0;i<N;i++)
{
for (j=0;j<M;j++)
{
temp = b[i]*c[j];
a[i][j] = temp * temp + d[i];
}
}

对我来说,没有像 temp 这样的错误。 , ij是私有(private)的,循环超过 j按顺序执行...我错过了什么吗?

最佳答案

正如前面的评论中提到的,变量 ij没有在循环语句中声明。由于编译器会处理循环变量 i通过将其设置为私有(private)而不是 j ,内部循环变量是共享的,从而伪造了结果。纠正它的一种方法是:

#pragma omp parallel for default (none) private(temp, i, j) shared(a, b, c, d)
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
temp = b[i] * c[j];
a[i][j] = temp * temp + d[i];
}
}

关于c++ - 针对错误的 OpenMP 并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60949548/

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