nvcc在Linux下使用的默认主机编译器

4
我使用带有GTX 570(计算能力为2.0)的Ubuntu 10.10上的CUDA 4.0和GCC编译器套件。据我了解,在编译期间,CUDA编译器驱动程序nvcc将.cu文件分成主机代码和设备代码,并调用主机编译器编译主机代码并单独编译设备代码。最后,它将生成的主机对象代码和设备PTX代码合并到一个单独的可执行文件中。
对于Linux系统,编译主机代码时调用的默认编译器是什么?是GCC套件的C编译器(gcc)还是C ++编译器(g ++)?

也许可以通过CC环境变量来覆盖它(就像make通常所做的那样)? - Basile Starynkevitch
你可以使用 strace 工具来追踪程序的系统调用(包括像 nvcc 这样的专有程序),以了解它们所使用的外部程序。 - Basile Starynkevitch
4
使用verbose标志(-v),nvcc在编译过程中会输出所有执行的命令。因此,它将显示是否调用了gcc或g ++。 - tbalazs
2个回答

16
您需要使用-ccbin选项来为nvcc指定编译器,例如要使用Intel C++编译器(icpc),请使用nvcc -ccbin=icpc (假设 icpc 在您的$PATH中可用)。请注意,无论是C代码还是C++代码,nvcc都将其视为C++代码,请始终传递一个C++编译器(g++icpc等)。

有用的答案。这似乎解释了编译一些CUDA源代码后出现“cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default]”消息的原因。 - user9869932
有用的回答。是否有现有的文档提到了这一点,即将代码视为C++? - daparic

5
据我所知,它使用 g++(更准确地说,是将语言设置为 c++ 的 gcc),当然还需要 g++ 进行最终链接。如果您想查看更多详细信息,请使用 --verbose 选项运行 nvcc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接