OpenMP嵌套循环,每个`for`循环之间有代码

时间:2016-06-17 08:30:59

标签: c++ openmp nested-loops

由于某些原因,我必须在嵌套循环中的每个for语句之间放置一些代码,如下所示:

for (int i = 0; i < n; ++i) {
    //i have to put some code here
    do something_1

    for (int j = 0; j < n; ++j) {
        //i have to put some code here
        do something_2

         for (int k = 0; k < n; ++k) {
             do something_3
         }

    }
}

------更新20:11 6.17 2016 ----------------------

我发现不是嵌套循环导致我的OpenMP程序崩溃,我在循环中使用std::vectorpush_back()方法,这在使用OpenMP时非常危险。

1 个答案:

答案 0 :(得分:1)

您原则上可以使用openmp并行化此代码。以下是使用Visual Studio进行操作的方法。 (对于其他开发环境,您可以找到类似的设置):

在属性页面中,启用openmp:

Configuration Protperties->C/C++->Language->Open Mp support

包含ompenmp头文件:

#include "omp.h"

将以下行放在第一个for循环前面:

#pragma omp parallel for

这将并行化你的外部循环,这在大多数情况下是你想要的,如果n明显大于核心数。

请注意,如果并行运行循环,则不同的迭代需要彼此独立。如果您还不熟悉并行处理,可能需要查看一些openmp教程以避免典型的陷阱。我发现these slides非常有帮助。