2011-09-08 113 views
13

我在問這個,因爲我知道有一種方法可以使用二進制文件而不是源文件。CUDA是否有彙編語言?

另外,我猜測用匯編語言來模擬函數指針會更容易。除非GPU上的程序集與CPU上的程序集完全不同。

+0

C for CUDA出了什麼問題? http://developer.download.nvidia.com/compute/cuda/2_1/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.1.pdf – 2011-09-08 19:05:51

+4

幾周前回復[在「是否可以將指令放入CUDA代碼中?」 ](http://stackoverflow.com/questions/3677220/is-it-possible-to-put-instructions-into-cuda-code/7072079#7072079)。 *注意:*不是接受的答案,而是後來的答案。 – dmckee

+0

@dmckee +1。另外,由於CUDA 3.2(和2.0設備)函數指針在不干擾ptx的情況下得到支持。而較舊的設備根本沒有設備函數這樣的東西 - 所有對來自內核的'__device__'函數的調用都被內聯了。 – aland

回答

29

您可能想看看PTX。 NVIDIA提供了一個文檔在CUDA 4.0文檔中描述它。

http://developer.nvidia.com/nvidia-gpu-computing-documentation

NVIDIA描述PTX爲「鉭低電平並行線程執行的虛擬機和指令集架構(ISA)。PTX暴露GPU作爲數據並行計算設備」。不完全像x86彙編,但你可能會發現它有趣的閱讀。

+10

值得指出的是,PTX是一個虛擬指令集。每個不同的NVIDIA架構都有自己的PTX物理ISA。可以將PTX指令內聯到CUDA代碼中,類似於內聯x86 asm。 –

12

是的,GPU上的程序集與CPU完全不同。 其中一個差異在於GPU的指令集沒有標準化。 NVidia(以及AMD和其他GPU供應商)可以並且確實將其指令集從一種GPU模型更改爲下一種。

所以CUDA不公開彙編語言。沒有意義。 (由於GPU硬件的限制,CUDA的C語言及其支持的任何其他語言都存在侷限性,這不僅僅是因爲Nvidia恨你並想惹惱你,所以即使你可以直接訪問底層指令集和彙編語言,你將無法神奇地做你現在無法做到的事情。

(注意,NVidia確實定義了一個「虛擬」指令集,你可以在代碼中使用和嵌入它,但它是不是指令集,它不直接映射到硬件指令,它只是一個簡單的編程語言,它看起來像一個彙編語言

+1

哦!很高興知道......如果我甚至不能指望代碼在不同的GPU上工作......這絕對是錯誤的方法!謝謝 – widgg

+0

您的CUDA代碼可以在不同的GPU上正常工作。 CUDA只是將它編譯爲每個GPU的合適目標。 – jalf

15

實際上有兩種不同的CUDA彙編語言。

PTX是一種獨立於機器的彙編語言,彙編到SASS,這是在特定GPU系列上執行的實際操作碼。如果你建立.cubins,你正在處理SASS。大多數CUDA運行時應用程序使用PTX,因爲這使它們能夠在原始應用程序之後發佈的GPU上運行。如果你的目標是sm_20(費米/ GTX 400系列),函數指針在CUDA中已經有一段時間了。