我想使用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} )
你能帮助我获得并行性吗?
谢谢!
答案 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可以正常工作