linux 外部OpenMP内部版本未将线程设置为等于OMP_NUM_THREADS

8iwquhpp  于 2022-11-02  发布在  Linux
关注(0)|答案(1)|浏览(161)

我希望使用OpenMP的外部构建版本(而不是编译器自带的版本)。
对于外部构建,am克隆https://github.com/llvm-mirror/openmp.git,然后使用以下选项进行cmake:

cmake                                                                     \
  -DCMAKE_BUILD_TYPE=Debug                                                \
  -DCMAKE_EXPORT_COMPILE_COMMANDS=ON                                      \
  -DCMAKE_CXX_FLAGS="-std=c++17"                                          \
  -DCMAKE_CXX_COMPILER=clang++                                            \
  -DCMAKE_C_COMPILER=clang                                                \
  -S ${OMP_DIR} -B ${OMP_DIR}/cmake-build/Debug

在那之后我又是一个一个的。
对于我的应用程序构建和应用程序到OpenMP的链接,我使用以下CMakeLists.txt

cmake_minimum_required(VERSION 3.18)

project(foo C CXX)

find_package(OpenMP)
add_executable(hello_world hello.cpp)
target_link_libraries(hello_world <path_to_external_openmp>/cmake-install/Debug/lib/libomp.so)

源文件只是一个虚拟文件:


# pragma omp parallel

  {
    std::cout << "Hello World, from thread: " << omp_get_thread_num()
              << std::endl;
  }

最后,当我执行OMP_NUM_THREADS=4 ./hello_world时,我得到了以下结果,这显然不是预期的结果:
Hello World,来自线程:0
另外,请注意ldd ./hello_world给出:

linux-vdso.so.1 (0x00007fffd311b000)                                                                                    
libomp.so => <path_to_external_openmp>/cmake-install/Debug/lib/libomp.so (0x00007fcbcbca0000)                                
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fcbcba70000)   
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcbcb840000)                
/lib64/ld-linux-x86-64.so.2 (0x00007fcbcbde4000)                                                                        
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcbcb750000)                                                       
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fcbcb730000)

你知道这种意外行为的原因是什么吗?

bxgwgixi

bxgwgixi1#

您需要-fopenmp标志;将set(CMAKE_CXX_FLAGS "-fopenmp")添加到CMakeLists.txt文件或将-DCMAKE_CXX_FLAGS="-fopenmp"添加到cmake命令。
顺便说一句,您还可以删除find_package(OpenMP),因为您使用绝对路径显式链接库。

相关问题