设置nvcc的默认主机编译器

Chr*_*ris 5 cuda clang

我刚刚在新的GPU服务器上安装了Debian Stretch(9)和Cuda 8。Stretch不随旧版gcc一起提供,因此我需要使用clang作为主机编译器(nvcc不支持gcc-6)。我可以这样调用nvcc:

nvcc -ccbin clang-3.8
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在整个系统范围内实现-例如在cuda config或环境变量中?

osg*_*sgx 6

nvcc的文档没有列出任何要更改ccbin的env变量,仅列出了以下选项:

http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html

--compiler-bindir directory-ccbin 指定编译器可执行文件所在的目录。还可以指定主机编译器可执行文件名称,以确保选择了正确的主机编译器。

Linux指南也没有这样的信息:http : //docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

您可以尝试创建一些nvcc包装器脚本,并将其更早地放入PATH env var中,例如:

mkdir ~/supernvcc
echo '#!/bin/sh' > ~/supernvcc/nvcc
echo `which nvcc` -ccbin clang-3.8 '$@' >> ~/supernvcc/nvcc
chmod +x ~/supernvcc/nvcc
export PATH=/home/`id -un`/supernvcc:$PATH
Run Code Online (Sandbox Code Playgroud)

export在使用nvcc或将其添加到您的.bashrc或其他shell初始化脚本之前,请在每个新shell中重复最后一行)

PS:nvcc也是bash脚本,您可以复制并编辑:

cat `which nvcc`
Run Code Online (Sandbox Code Playgroud)

更新:人们建议将正确的gcc版本链接/usr/local/cuda/bin/cuda 的内部目录:

  sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
Run Code Online (Sandbox Code Playgroud)


xda*_*liu 5

您可以使用NVCC_PREPEND_FLAGS按照官方文档中的NVCC_APPEND_FLAGS描述注入到 nvcc 的所有调用中。-ccbin

例如,我的 中有以下内容~/.bash_profile

export NVCC_PREPEND_FLAGS='-ccbin /home/linuxbrew/.linuxbrew/bin/g++-11'
Run Code Online (Sandbox Code Playgroud)