【问题标题】:Default host compiler used by nvcc for linuxnvcc for linux 使用的默认主机编译器
【发布时间】:2012-01-09 04:35:09
【问题描述】:

我在带有 GTX 570(计算能力 2.0)的 Ubuntu 10.10 上使用 CUDA 4.0,并带有 GCC 编译器套件。据我了解,在编译过程中,CUDA编译器驱动程序nvcc将.cu文件拆分为主机代码和设备代码,并调用主机编译器编译主机代码和分别编译设备代码。最后,它将生成的主机目标代码和设备 PTX 代码合并为一个可执行文件。

对于 Linux 系统,用于编译主机代码的默认编译器是什么?是吗 GCC 套件的 C 编译器 (gcc) 还是 C++ 编译器 (g++)?

【问题讨论】:

  • 也许它可以被CC 环境变量覆盖(就像make 通常那样)?
  • 您可以通过strace 程序(甚至像nvcc 这样的专有程序)来了解他们正在使用的系统调用(和外部程序)。
  • 使用详细标志 (-v),nvcc 将在编译期间转储所有已执行的命令。所以它会告诉你是否调用了 gcc 或 g++。

标签: gcc compiler-construction cuda nvcc


【解决方案1】:

您想要 nvcc-ccbin 选项,例如要使用 icpc(英特尔 C++ 编译器),请使用 nvcc -ccbin=icpc(假设 icpc 在您的 $PATH 中可用)。

请注意,您应该始终传递 C++ 编译器(g++icpc 等),因为 nvcc 将代码视为 C++,即使它是 C 代码。

【讨论】:

  • 有用的答案。这似乎解释了一些 CUDA 源编译后的cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default] 消息。
【解决方案2】:

AFAIK 它使用g++(更准确地说,它使用gcc,语言设置为c++),当然还有g++ 用于最终链接。如果需要,请使用 --verbose 选项运行 nvcc 以查看更多详细信息。

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 2012-08-20
    • 2013-10-05
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2010-10-05
    相关资源
    最近更新 更多