我尝试将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 world
中的新人,我明白如果我有一些建构,例如:if {...}
,我需要找到另一种变体来并行化我的循环,并考虑到我的{{ 1}}。
您能否帮助我找到使用if constructions
并行化我的功能的正确方法?谢谢。
OpenMP
正如我的结果使用上面的代码。我有一个错误,我的代码甚至编译:
C1001编译器中发生内部错误。
但是如果我使用没有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;
}
构造的代码,我有一个编译代码。
答案 0 :(得分:1)
您的代码有多个问题:
return
不允许在#pragma omp for
。中
只有在您打开新的并行区域时才允许#pragma omp for
result, ch, ascii, red, green, blue
是共享变量,您必须考虑到这个与您声明的内容相反:if
内允许#pragma omp for
个语句。问题仅出在return, break
。