gpt4 book ai didi

c - 循环崩溃中的 OpenMP 错误

转载 作者:行者123 更新时间:2023-11-30 17:02:00 27 4
gpt4 key购买 nike

在下面的代码中,我尝试并行化打印二维数组的嵌套循环。我浏览了教程,发现我必须使用折叠子句:

#include<stdio.h>
#include<omp.h>

int main(){

//int i = 10;

int grid[3][3];

for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
grid[i][j] = i+j;
}
}

int i, j;
#pragma omp parallel for collapse(2)
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
printf("%d\t", grid[i][j]);
}
printf("\n");
}

return 0;
}

问题是我收到一条错误,内容为 C3005: 'collapse' : OpenMP 'parallel for' 指令遇到意外标记

注意:在使用塌陷之前,我只使用了#pragma omp parallel for,它给出了错误的结果:

0       1       2       4
1
1

折叠是产生正确结果的正确解决方案吗?如果是这样,为什么我会收到上述错误?

最佳答案

如果折叠循环,结果不一定按照您想要的方式排序。例如,如果我替换

printf("%d\t", grid[i][j]);

printf("%d %d\n", i, j);

您将明白为什么您不会打印出有序的网格。一般来说,我会说并行终端输出是一个坏主意,因为赛车条件。您可以并行的是网格的设置。

除此之外,您的代码给出了错误

fancyFileName.c:23:9: error: collapsed loops not perfectly nested before ‘printf’

这是非常不言自明的。您不会在第一个循环之后立即关闭第二个循环,因此这两个循环不能合并为一个。没有这一行,它可以正常编译(gcc 4.8.5)。

此外,我不确定 c99 标准和 omp,但为了确保你应该将循环索引设为私有(private)。

关于c - 循环崩溃中的 OpenMP 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36747117/

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