在进行简单openmp并行计算时出现和诡异的现象,折腾了很久终于解决,但还没理解透。
使用qt进行开发,在pro文件添加配置
``
QMAKE_CXXFLAGS += -fopenmp
LIBS += -fopenmp
新建控制台工程,添加如下代码,运行正常
#include
int main()
{
#pragma omp parallel for num_threads(4)
for (int i =0 ; i <=100; i++)
cout << i << endl;
return 0;
}
在已有工程中,添加上述代码,运算结果异常,i值并没有按照规则累加。
最终原因是已有工程中包含了一个静态链接库,只要连接这个库,结果就异常,去除后就正常。
最终将这个静态库重新编译,同时添加了-fopenmp选项设置,问题解决。但是根源还没理解透。
添加该选项后,还要加入openmp的库,否则提示找不到某些函数的定义。
set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -fopenmp”)
target_link_libraries(reg3d -fopenmp)