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

时间:2018-05-04 13:45:38

标签: c++ openmp

我尝试将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; } 构造的代码,我有一个编译代码。

1 个答案:

答案 0 :(得分:1)

您的代码有多个问题:

    {li> return不允许在#pragma omp for。中 只有在您打开新的并行区域时才允许
  1. 嵌套#pragma omp for
  2. result, ch, ascii, red, green, blue是共享变量,您必须考虑到这个
  3. 与您声明的内容相反:if内允许#pragma omp for个语句。问题仅出在return, break