Cuda 使用带有nvptx目标的Clang 6(主干)编译OpenMP`target`指令时出现链接器错误

Cuda 使用带有nvptx目标的Clang 6(主干)编译OpenMP`target`指令时出现链接器错误,cuda,openmp,llvm-clang,Cuda,Openmp,Llvm Clang,我想使用LLVM/Clang在我的Nvidia GPU上运行OpenMP4+代码。我从trunk下载并编译了llvm/clang/omp库,如下所示:和:。我没有构建编译器RT和libcxx,但我认为这不会有任何区别 我的CMake命令是这样的:CMake-G“Unix Makefiles”。/llvm-DCMAKE\u BUILD\u TYPE=Release-DOPENMP\u ENABLE\u LIBOMPTARGET=ON 我用一个OpenMPtarget指令编写了一个非常基本的程序:

我想使用LLVM/Clang在我的Nvidia GPU上运行OpenMP4+代码。我从trunk下载并编译了llvm/clang/omp库,如下所示:和:。我没有构建编译器RT和libcxx,但我认为这不会有任何区别

我的CMake命令是这样的:
CMake-G“Unix Makefiles”。/llvm-DCMAKE\u BUILD\u TYPE=Release-DOPENMP\u ENABLE\u LIBOMPTARGET=ON

我用一个OpenMP
target
指令编写了一个非常基本的程序:

int main(void)
{
    #pragma omp target
    {
    }
    return 0;
}
我用这个来编译它:
/home/user/opt/llvm/bin/clang++-v main.cpp-fopenmp-lomptarget-fopenmp targets=nvptx64 nvidia cuda--cuda path=/home/user/opt/pgi/linux86-64/2017/cuda/8.0

如果您问:是的,我没有为编译器设置路径,但我确保我的
LD_LIBRARY_路径
指向
libomptarget
所在的位置

这是执行上述命令后得到的输出/错误(最后10行显示错误):


叮当6.0.0版(中继312875)
目标:x86_64-unknown-linux-gnu
线程模型:posix
InstalledDir:/home/user/opt/llvm/bin
找到候选GCC安装:/usr/lib/GCC/i686 linux gnu/6
找到候选GCC安装:/usr/lib/GCC/i686 linux gnu/6.4.0
找到候选GCC安装:/usr/lib/GCC/i686 linux gnu/7
找到候选GCC安装:/usr/lib/GCC/i686 linux gnu/7.2.0
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/4.8
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/4.8.4
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/4.9
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/4.9.3
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/5
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/5.4.1
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/6
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/6.4.0
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/7
找到候选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/7.2.0
所选GCC安装:/usr/lib/GCC/x86_64-linux-gnu/7.2.0
候选多重库:@m64
所选多库:@m64
找到CUDA安装:/home/user/opt/pgi/linux86-64/2017/CUDA/8.0,版本7.0
“/home/user/opt/llvm/bin/clang-6.0”-cc1-三重x86_64-unknown-linux-gnu-emit llvm bc-emit llvm uselists-disable free-disable llvm verifier-discard value names-main.cpp-mrelocation model static-mthread model posix-mdisable fp elim-fmath errno-masm verbose-mconstructor alias-munwind tables-fuse init array-target cpu x86-64-dwarum-column info-调试器tuning=gdb-v-resource dir/home/user/opt/llvm/lib/clang/6.0.0-internal isystem/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../include/c++/7.2.0-internal isystem/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../include/x86-linux-gnu/7.2.0-internal isystem/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../include/x86_64-linux-gnu/c++/7.2.0-内部isystem/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../include/c++/7.2.0/backward internal isystem/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../include/c++/7.2.0-内部isystem/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../include/x86_64-linux-gnu/c++/7.2.0-内部isystem/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0-内部isystem/usr/lib/gcc/x86-linux-gnu/7.2.0/../../../../../../include/c.0-内部isystem/../../../../../c.0-内部isystem//home/user/opt/llvm/lib/clang/6.0.0/include-内部外部isystem/usr/include/x86_64-linux-gnu-内部外部isystem/include-内部外部isystem/usr/include-内部isystem/usr/local/include-内部isystem/home/user/opt/llvm/lib/clang/6.0.0/include-内部外部isystem/usr/include/x86_64-linux-gnu-内部EXTC++ NISTRONC系统/URS/包含FDECORM宏DFR/TMP- FRORL限制19 - fOMLT长度-fOpenMc- FOBC运行时=GCC-FCXX例外- FExcuts- FFutuxOutlook - O/TMP/MIN BE2D35.BC-XC+MUN .CPP -FOpenMP目标= NVPTX64 NVIDIA CUDA
clang-cc1版本6.0.0基于LLVM 6.0.0svn默认目标x86_64-unknown-linux-gnu
忽略不存在的目录“/包括”
忽略不存在的目录“/包括”
忽略重复目录“/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../../include/x86_64-linux-gnu/c++/7.2.0”
忽略重复目录“/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../../include/c++/7.2.0”
忽略重复目录“/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../../include/x86_64-linux-gnu/c++/7.2.0”
忽略重复目录“/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../../include/x86_64-linux-gnu/c++/7.2.0”
忽略重复目录“/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../../include/c++/7.2.0/backward”
忽略重复目录“/usr/local/include”
忽略重复目录“/home/user/opt/llvm/lib/clang/6.0.0/include”
忽略重复目录“/usr/include/x86_64-linux-gnu”
忽略重复目录“/usr/include”
#包括“…”搜索从这里开始:
#包括搜索从这里开始:
/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../../../include/c++/7.2.0
/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../../../include/x86_64-linux-gnu/c++/7.2.0
/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../../../../include/c++/7.2.0/backward
/usr/本地/包括
/home/user/opt/llvm/lib/clang/6.0.0/include
/usr/include/x86_64-linux-gnu
/usr/包括
搜索列表结束。
“/home/user/opt/llvm/bin/clang-6.0”-cc1-triple nvptx64 nvidia cuda-aux triple x86_64-unknown-linux-gnu-S-disable free-disable llvm verifier-discard value names-main.cpp-mrelocation model pic-pic level 2-mthread model posix-mdisable fp elim-fmath errno-no integrated as-fuse init array-mlin
<If this is too much information, just go to the last 10 lines to see the error>
clang version 6.0.0 (trunk 312875)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/user/opt/llvm/bin
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6.4.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/7.2.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.3
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.2.0
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.2.0
Candidate multilib: .;@m64
Selected multilib: .;@m64
Found CUDA installation: /home/user/opt/pgi/linux86-64/2017/cuda/8.0, version 7.0
 "/home/user/opt/llvm/bin/clang-6.0" -cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -emit-llvm-uselists -disable-free -disable-llvm-verifier -discard-value-names -main-file-name main.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -v -resource-dir /home/user/opt/llvm/lib/clang/6.0.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward -internal-isystem /usr/local/include -internal-isystem /home/user/opt/llvm/lib/clang/6.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -internal-isystem /usr/local/include -internal-isystem /home/user/opt/llvm/lib/clang/6.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /tmp -ferror-limit 19 -fmessage-length 190 -fopenmp -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/main-be2d35.bc -x c++ main.cpp -fopenmp-targets=nvptx64-nvidia-cuda
clang -cc1 version 6.0.0 based upon LLVM 6.0.0svn default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/include"
ignoring nonexistent directory "/include"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward"
ignoring duplicate directory "/usr/local/include"
ignoring duplicate directory "/home/user/opt/llvm/lib/clang/6.0.0/include"
ignoring duplicate directory "/usr/include/x86_64-linux-gnu"
ignoring duplicate directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0
 /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0
 /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward
 /usr/local/include
 /home/user/opt/llvm/lib/clang/6.0.0/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
 "/home/user/opt/llvm/bin/clang-6.0" -cc1 -triple nvptx64-nvidia-cuda -aux-triple x86_64-unknown-linux-gnu -S -disable-free -disable-llvm-verifier -discard-value-names -main-file-name main.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fmath-errno -no-integrated-as -fuse-init-array -mlink-cuda-bitcode /home/user/opt/pgi/linux86-64/2017/cuda/8.0/nvvm/libdevice/libdevice.compute_20.10.bc -target-feature +ptx42 -target-cpu sm_20 -dwarf-column-info -debugger-tuning=gdb -v -resource-dir /home/user/opt/llvm/lib/clang/6.0.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward -internal-isystem /usr/local/include -internal-isystem /home/user/opt/llvm/lib/clang/6.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -internal-isystem /usr/local/include -internal-isystem /home/user/opt/llvm/lib/clang/6.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir /tmp -ferror-limit 19 -fmessage-length 190 -fopenmp -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/main-7ffbd7.s -x c++ main.cpp -fopenmp-is-device -fopenmp-host-ir-file-path /tmp/main-be2d35.bc
clang -cc1 version 6.0.0 based upon LLVM 6.0.0svn default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/include"
ignoring nonexistent directory "/include"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0"
ignoring duplicate directory "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward"
ignoring duplicate directory "/usr/local/include"
ignoring duplicate directory "/home/user/opt/llvm/lib/clang/6.0.0/include"
ignoring duplicate directory "/usr/include/x86_64-linux-gnu"
ignoring duplicate directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0
 /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0
 /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward
 /usr/local/include
 /home/user/opt/llvm/lib/clang/6.0.0/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
"/home/user/opt/pgi/linux86-64/2017/cuda/8.0/bin/ptxas" -m64 -O0 -v --gpu-name sm_20 --output-file /tmp/main-64fc86.cubin /tmp/main-ca9e59.s -c
ptxas info    : 1 bytes gmem, 8 bytes cmem[14]
ptxas info    : Compiling entry function '__omp_offloading_803_18004c0_main_l3' for 'sm_20'
ptxas info    : Function properties for __omp_offloading_803_18004c0_main_l3
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 5 registers, 32 bytes cmem[0]
ptxas info    : Function properties for __omp_offloading_803_18004c0_main_l3_worker
24 bytes stack frame, 8 bytes spill stores, 8 bytes spill loads
"/home/user/opt/pgi/linux86-64/2017/cuda/8.0/bin/nvlink" -o /tmp/main-f247e3.out -v -arch sm_20 -L/home/user/opt/llvm/lib -lomptarget-nvptx main-64fc86.cubin
nvlink error   : Undefined reference to '__kmpc_kernel_init' in 'main-64fc86.cubin'
nvlink error   : Undefined reference to '__kmpc_kernel_deinit' in 'main-64fc86.cubin'
nvlink error   : Undefined reference to '__kmpc_kernel_parallel' in 'main-64fc86.cubin'
nvlink error   : Undefined reference to '__kmpc_kernel_end_parallel' in 'main-64fc86.cubin'
nvlink info    : 1 bytes gmem, 8 bytes cmem[14]
nvlink info    : Function properties for '__omp_offloading_803_18004c0_main_l3':
nvlink info    : used 18 registers, 24 stack, 0 bytes smem, 32 bytes cmem[0], 0 bytes lmem
clang-6.0: error: fatbinary command failed with exit code 255 (use -v to see invocation)