2013-04-18 18 views
1

在主機代碼中,似乎__CUDA_ARCH__宏不會生成不同的代碼路徑,相反,它將生成代碼以確切獲得當前設備的代碼路徑。__CUDA_ARCH__宏的行爲

但是,如果__CUDA_ARCH__在設備代碼內,它將爲編譯選項(/ arch)中指定的不同設備生成不同的代碼路徑。

任何人都可以確認這是正確的嗎?

回答

6

__CUDA_ARCH__當在設備代碼中使用時將攜帶一個定義的數字,它反映了當前正在編譯的代碼體系結構。

它不打算在主機代碼中使用。從nvcc manual

該宏可用於實現GPU函數,以確定當前正在編譯的虛擬體系結構。主機代碼(非GPU代碼)不能依賴於它。

因此,在主機代碼中使用__CUDA_ARCH__未定義(至少通過CUDA)。

+3

實際上,'__CUDA_ARCH__'甚至沒有在主機代碼中定義(它可以用來區分主機和設備編譯)。這就是爲什麼看起來主機代碼中的測試似乎總是以相同的方式進行評估的原因。 – tera