2011-03-28 52 views
4

我需要使用CUDA對矩陣的每個元素進行平方根(這基本上是一次在內存中的浮點值向量)。CUDA:更多維度的塊或只有一個?

矩陣尺寸未知「先驗」,可能會有所不同[2-20.000]。

我在想:我可能會使用(如喬納森建議在這裏)一個塊尺寸是這樣的:

int thread_id = blockDim.x * block_id + threadIdx.x; 

併爲您的thread_id比低行*列......這是相當簡單和直接。

但是,是否有任何特定的性能原因,爲什麼我應該使用兩個(甚至三個)塊柵格維度來執行這樣的計算(記住我有一個矩陣後退)而不是一個?

我想在聚結的問題,比如讓所有的線程讀取值依次

回答

6

尺寸只存在爲了方便,在內部一切都是線性的,因此會有效率無論哪種方式方面沒有優勢。如上所示,避免計算(設計)的線性索引似乎要快一些,但線程如何合併不會有任何區別。

+0

謝謝,考慮到矩陣可能是非32倍大小(例如1033x2977),平鋪方法(2維)在我看來似乎只是複雜如上,但我可能是錯的 – 2011-03-28 19:55:08

+0

謝謝ashwin,一個問題:如果我選擇半變形的線程數倍數,那麼頁面的第二種方法會最大化聚合,對嗎? – 2011-03-29 09:37:00

+0

@Paul:選擇一個可以被warp-size(每個線程的線程)整除的塊大小(每個線程的線程)總是個好主意,因爲無論如何都不會有空的warp。 – LumpN 2011-03-30 16:20:49