由于某些原因,我必须在嵌套循环中的每个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::vector
和push_back()
方法,这在使用OpenMP时非常危险。
答案 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非常有帮助。