2011-11-29 141 views
4

我在Ubuntu 10.10上使用CUDA 4.0和GTX 570(計算capcability 2.0)以及GCC編譯器套件。據我所知,在編譯期間,CUDA編譯器驅動程序nvcc將.cu文件拆分爲主機代碼和設備代碼,並調用主機編譯器來編譯主機代碼並分別編譯設備代碼。最後,它將生成的主機對象代碼和設備PTX代碼合併爲一個可執行文件。nvcc for linux使用的默認主機編譯器

對於Linux系統,編譯主機代碼時調用的默認編譯器是什麼? GCC套件的C編譯器(gcc)還是C++編譯器(g++)是 ?

+0

也許它可以被'CC'環境變量覆蓋(就像'make'通常那樣)? –

+0

你也可以'strace'程序(甚至專有的程序,比如'nvcc')來理解他們正在使用的系統調用(和外部程序)。 –

+4

使用詳細標誌(-v),nvcc將在編譯期間轉儲所有已執行的命令。所以它會告訴你gcc或g ++是否被調用。 – tbalazs

回答

5

AFAIK它使用g++(更確切地說,它使用gcc,語言設置爲C++),當然還有g++用於最終鏈接。如果需要,請運行nvcc--verbose選項以查看更多詳細信息。

9

您需要nvcc-ccbin選項,例如,要使用icpc(英特爾C++編譯器),請使用nvcc -ccbin=icpc(假設您的$PATH中有icpc可用)。

請注意,你應該總是通過一個C++編譯器(g++icpc等),因爲nvcc對待代碼爲C++,即使它的C代碼。

+0

有用的答案。這似乎解釋了'cc1:warning:命令行選項'-std = C++ 11'對C++/ObjC++有效,但對編譯某些CUDA源代碼後的C [默認啓用]消息不適用。 – r3x