gpt4 book ai didi

c++ - OpenMP - 在两个 for 循环中使用临界区

转载 作者:行者123 更新时间:2023-11-28 04:41:09 28 4
gpt4 key购买 nike

我正在尝试将 OpenMP 2.0 用于 parallel for 2 个 for 循环。我找到了一些示例,我如何使用 parallel for 并选择一些变体。

这就是为什么我试图遵循这种方式:

#pragma omp parallel
for(int i=1; i<n; i++) {
#pragma omp for nowait
for(int j=0; j<n; j++) {
//some code here..
}
}

好的。但我是 OpenMP 世界 的新手,我明白如果我有一些构造,比如:if {...},我需要找到另一个变体来并行化我的循环,并考虑我的 if 结构

您能帮我找到使用 OpenMP 并行化我的函数的正确方法吗?谢谢。

string readTextFromImage(Mat image) {
string result = "";
int red;
int green;
int blue;
int ascii;
char ch;


#pragma omp parallel for
for (int i = 0; i < 100; i++)
{
#pragma omp for nowait
for (int j = 0; j < 100; j++)
{
if (i == 0 && j < 3)
{
continue;
}


red = (image.at<Vec3b>(i, j)[2] + 1 - 1) % 10;
green = (image.at<Vec3b>(i, j)[1] + 1 - 1) % 10;
blue = (image.at<Vec3b>(i, j)[0] + 1 - 1) % 10;

if (red == 0 && green == 0 && blue == 0)
{
return result;
}


ascii = red * 100 + green * 10 + blue;
ch = ascii;
result += ch;
}

}

return result;
}

作为我使用上面代码的结果。我有一个错误,我的代码甚至没有编译:

C1001 An internal error has occurred in the compiler.

但是如果我使用没有if构造的代码,我有一个编译代码。

最佳答案

您的代码有多个问题:

  1. return 不允许在 #pragma omp for 内。
  2. 嵌套 #pragma omp for 仅当您打开一个新的并行区域时才允许
  3. result, ch, ascii, red, green, blue 是共享变量,你必须考虑到这一点

与您所说的相反:if 语句在 #pragma omp for 中是允许的。问题仅在于 return, break

关于c++ - OpenMP - 在两个 for 循环中使用临界区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50176437/

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