2011-03-08 216 views
10

我google了一下,但現在還不清楚一些用CUDA編程的GPU是否可以利用,或者可以使用類似於SSE SIMD擴展的指令;例如我們是否能夠以雙精度總結兩個浮點向量,每個向量具有4個值。如果是這樣的話,我想知道對於vector的前4個值使用更輕的線程還是使用SIMD更好。CUDA可以使用SIMD擴展嗎?

+0

SSE是CPU的特性,而不是GPU的特性。我想你的意思是,如果有CUDA驅動程序在CPU上使用SSE指令而不是顯卡(GPU)? – 2011-03-08 21:51:35

+0

沒有。我不太瞭解GPU硬件。我只是想知道SIMD指令是否可以在GPU上的CUDA線程上使用 – flow 2011-03-08 22:11:22

回答

16

CUDA程序編譯爲PTX instruction set。該指令集不包含SIMD指令。所以,CUDA程序不能明確使用SIMD。

但是,CUDA的整體思路是在大範圍內進行SIMD。單線程是warp組的一部分,每個線程都執行完全相同的指令序列(儘管某些線程可能會抑制某些指令,給出不同執行序列的錯覺)。 NVidia稱之爲單指令多線程(SIMT),但它本質上是SIMD。

+9

PTX 3.0增加了對有限的SIMD-in-a-word指令的支持,該指令可以在寄存器內對8位和16位數據進行操作。這些說明詳見最新PTX規範的第178-182頁:http://docs.nvidia.com/cuda/pdf/ptx_isa_3.1.pdf使用這些SIMD指令需要具有計算能力3.x的GPU。已註冊的CUDA開發人員可以下載帶有封裝功能的頭文件(其中還提供了sm_1x和sm_2x GPU的仿真路徑),如下所示:https://devtalk.nvidia.com/default/topic/535684/announcements/release-1- 1-simd-in-a-word-functions-posted/ – njuffa 2013-06-24 23:47:36

+2

@njuffa:聽起來像是答案,而不是評論!發佈它,我們可以說服流程改變他的接受。 – 2013-06-25 09:14:50

5

正如a comment中提到的其中一個答覆,NVIDIA GPU有一些SIMD指令。它們以每字節和每半字爲基礎在unsigned int上運行。自2015年7月,有下列操作several flavours

  • 絕對值
  • 加法/減法
  • 計算平均值
  • 比較
  • 最大/最小
  • 否定
  • 絕對差額之和