有人可以给我一个简单的C ++程序,它使用以Nvidia GPU为目标的OpenMP,并给我编译它的代码吗?
我正在双8核Intel Xeon上运行Ubuntu 19.10。
我已安装的相关软件包包括:
g++-9 9.2.1-9ubuntu2
gcc-9-offload-nvptx 9.2.1-9ubuntu2
libgomp-plugin-nvptx1:amd64 9.2.1-9ubuntu2
nvptx-tools 0.20180301-1
我花了数小时寻找和尝试建议,其中一些是相互矛盾的,而且其中许多似乎已经过时。例如,我不想编译该编译器。这是我最小的无效示例:
int main() {
double s;
#pragma omp target teams distribute parallel for reduction(+:s) map(tofrom:s)
for (int idx = 0; idx < 1000; ++idx) s+= idx;
std::cout << s << std::endl;
}
我如何编译它:g++ target2.cc -fopenmp -fno-stack-protector
输出:
cc1plus: warning: could not emit HSAIL for the function [-Whsa]
cc1plus: note: support for HSA does not implement non-gridified OpenMP parallel constructs.
munmap_chunk(): invalid pointer
mkoffload: fatal error: x86_64-linux-gnu-accel-nvptx-none-gcc-9 terminated with signal 6 [Aborted], core dumped
compilation terminated.
lto-wrapper: fatal error: /usr/lib/gcc/x86_64-linux-gnu/9//accel/nvptx-none/mkoffload returned 1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
[1] 29044 exit 1 g++ target2.cc -fopenmp -fno-stack-protector
帮助?谢谢。
我不知道您的gcc-offload包是如何编译的。但是您可以尝试使用(通过添加)编译器标志'-foffload = nvptx-none'。