如何在c ++程序中使用openmp

时间:2014-11-19 06:42:11

标签: c++ multithreading ubuntu openmp

我想使用OpenMP在c ++程序中并行化我的一些函数。

我正在使用ubuntu 12.04,在intel i5上使用4核。 但在遵循某些步骤后,我认为性能没有任何改善。我可以看到只使用了一个CPU核心。 (ubuntu中的系统监视器)

我做了什么..

添加#include <omp.h>

在for循环之前添加了这两行

omp_set_num_threads(4);

#pragma omp parallel for

在CMakeLists.txt中,

我添加了target_link_libraries (executable -fopenmp -lgomp ${PCL_LIBRARIES} )

你能帮助我获得并行性吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

正如@Mikael Persson所提到的,我从目标链接库中删除了-fopenmp并添加了 find_package(OpenMP) if (OPENMP_FOUND) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif()

这是有效的。

出现错误r *** double free or corruption (!prev): 0x00007ff424006b20 ***,因为在for循环中,我试图使用push_back()函数来加载堆栈,索引依赖于for循环索引。我认为这就是问题的原因。

我还学到了另外一个可以嵌套for循环的东西,如果OMP变量是独立的并且产生有效结果,OMP可以正常工作