我刚刚在新的GPU服务器上安装了Debian Stretch(9)和Cuda 8。Stretch不提供旧版本的gcc,所以我需要使用clang作为主机编译器(nvcc不支持gcc-6)。我可以这样调用nvcc来实现:
nvcc -ccbin clang-3.8
有没有一种方法可以在整个系统范围内实现这个功能 - 例如在CUDA配置或环境变量中?
nvcc的文档中没有列出任何可以更改ccbin环境变量的选项,只有这个选项:
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环境变量的前面,如下所示:
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
在每个新的 shell 中重复上一行,并加入 export
后再使用 nvcc
,或将其添加到您的 .bashrc
或其他 shell 初始化脚本中。
PS:而且 nvcc
也是 bash 脚本,您可以直接复制并编辑它:
cat `which nvcc`
更新: 人们建议将正确的gcc版本链接到cuda的内部目录/usr/local/cuda/bin/
:
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
NVCC_PREPEND_FLAGS
和NVCC_APPEND_FLAGS
来注入-ccbin
到所有nvcc的调用中。~/.bash_profile
中有以下内容:export NVCC_PREPEND_FLAGS='-ccbin /home/linuxbrew/.linuxbrew/bin/g++-11'