尝试在llvm中使用openmp目标卸载时,出现以下错误
$ cat offload.cpp
#include <omp.h>
int main() {
#pragma omp target teams distribute parallel for
for(int i=0; i<100; i++);
return 0;
}
$ clang++ -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda --cuda-path=$CUDA_TOOLKIT_ROOT_DIR offload.cpp -o offload
$ ./offload
Libomptarget fatal error 1: default offloading policy must switched to mandatory or disabled
$
。
我在LLVM_PATH的系统中安装了llvm-8.0.0。 我从llvm download页面下载了openmp-8.0.0源代码。要构建openmp,我使用以下命令:
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$LLVM_PATH -DCMAKE_C_COMPILER=$LLVM_PATH/bin/clang -DCMAKE_CXX_COMPILER= $LLVM_PATH/bin/clang++ -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES=35,60,70 ..
$ make && make install
OpenMP的构建没有给出任何错误。但是,当尝试通过OpenMP使用目标卸载时,出现上述致命错误。我在3台不同的计算机上尝试了此方法,结果相同。
我可以使用nvcc在系统上构建和运行CUDA示例。
此致
Alok
答案 0 :(得分:0)
我找到了答案。为了确保我们为卸载而编译,我们需要使用标志:
-Xopenmp-target -march = sm_XX
其中XX是计算能力。所以对我来说
clang++ -Xopenmp-target -march=sm_35 -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda --cuda-path=$CUDA_TOOLKIT_ROOT_DIR offload.cpp -o offload
工作