2012-02-11 68 views
0

我知道,對於Intel來說,矢量寄存器是優化的,例如, SandyBridge微架構(SSE + AVX),但NVIDIA的GPU如何?我在某處讀過的一些資源(我忘記了在哪裏)說使用矢量寄存器對NVIDIA的GPU沒有任何用處。但是我有一個testrun在GPU上運行一個帶有向量寄存器的程序,並且與其中的一個進行比較,他們確實給了我apx。 1.7倍加速。OpenCL:NVIDIA的矢量寄存器(float4,float8,..)VS英特爾的矢量寄存器

僅供參考對於相同的程序,英特爾的CPU只提供1.25倍的加速比。

因此,如果NVIDIA確實優化了這些向量寄存器,有人可以給我一個解釋或來源閱讀嗎?我需要它來獲取文檔。謝謝。

+2

NVIDIA GPU上性能提升的可能來源將是內存吞吐量。硬件可以在每個多處理器的單個事務中爲64位和128位類型進行存儲和加載,從而減少總體延遲並提高有效吞吐量。 – talonmies 2012-02-11 16:14:04

+0

感謝您的回覆。你的意思是16個加載/存儲單元?每個單元可以加載/存儲每個warp 128位類型? (因此使它成爲16x128)。如果沒有,我認爲情況並非如此。因爲隱式向量寄存器的使用(convert_floatn,vloadn等)確實有所作爲。它提供了更好的加速。 – ardiyu07 2012-02-12 01:29:15

+0

是的。硬件可以處理每個warp 256和512字節的事務大小。這可以導致在任何給定的佔用水平下更高的帶寬利用率。請參閱[這些幻燈片]的幻燈片35(http://www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf)(note pdf),以瞭解CUDA中的memcpy內核示例,其中說明了該效果。 – talonmies 2012-02-12 07:45:34

回答

2

NVIDIA GPU上性能提升的可能來源將是內存吞吐量。硬件可以在每個多處理器的單個事務中爲64位和128位類型進行存儲和加載,從而減少總體延遲並提高有效吞吐量。硬件可以處理每個warp 256和512字節的事務大小,因此可以在單個事務中處理適合於對齊的float4加載/存儲請求,並且可以在兩個事務中處理float8加載/存儲請求。這可能導致在任何給定的佔用水平下更高的全局內存帶寬利用率。來自加利福尼亞大學伯克利分校的Vasily Volkov在幻燈片35的this presentation中查看了CUDA中的memcpy內核示例,該示例說明了類型大小(以及所產生的事務大小)對內存吞吐量的影響。

+0

你是否建議GPU實際上不使用float4/...上的SIMD指令進行計算? – eudoxos 2012-02-12 10:11:50

+2

@eudoxos:NVIDIA的DX10/DX11硬件(可以運行CUDA和OpenCL的硬件)上的ALU沒有SIMD算術指令來處理像float4這樣的矢量類型。它們純粹是標量設備。可以直接對矢量類型執行的唯一操作是加載/存儲和通過紋理硬件進行過濾。 – talonmies 2012-02-12 12:30:12