【问题标题】:Set default host compiler for nvcc为 nvcc 设置默认主机编译器
【发布时间】:2017-12-01 05:10:31
【问题描述】:

我刚刚在新的 GPU 服务器上安装了 Debian Stretch (9) 和 Cuda 8。 Stretch 不附带旧版本的 gcc,所以我需要使用 clang 作为宿主编译器(nvcc 不支持 gcc-6)。我可以通过以下方式调用 nvcc:

nvcc -ccbin clang-3.8

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

【问题讨论】:

    标签: cuda clang


    【解决方案1】:

    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
    

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

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

    cat `which nvcc`
    

    更新:People recommend to link correct gcc version 到 cuda 的内部目录 /usr/local/cuda/bin/

      sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
    

    【讨论】:

    • 谢谢,虽然要努力,但可能只是修改 makefile 就可以了——我只是希望有一种“干净”的方法来做到这一点
    • @RobertCrovella,别名不适用于从 makefile 启动的脚本 shell。在来自 ubuntu 包的 Ubuntu nvcc (/usr/bin/nvcc) 中是脚本,没有检查 debian 和/或 nvidia 的包变体(并且 ubuntu 中有 gcc-5 / g++-5 也受 nvcc 支持)。 supernvcc/nvcc在makefile比较多的时候可能会更方便。
    • 我的解决方案不完整:我有调用 nvcc 的 makefile (cmakefile) 使用不正确的 -ccbin /usr/bin/cc 指向 gcc-6,而不是 nvcc 所需的 gcc-5。当-ccbin 有两个选项时,nvcc 会失败。因此,需要一些更好的 supernvcc/nvcc 来过滤 $@-ccbin 和下一个参数并将其他参数传递给真正的 nvcc,但我不知道这种 bash 魔术。
    猜你喜欢
    • 2012-01-09
    • 1970-01-01
    • 2012-08-20
    • 2012-12-09
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多