2014-02-12 243 views
0

有沒有簡單的方法來定義和訪問CUDA GPU 2D矩陣?CUDA GPU 2D矩陣訪問

類似M[i][j]

也許有一些圖書館已經?

+1

看看@talonmies'這個問題的答案的第二部分:[我怎麼能加起來兩個2D (pitched)數組使用嵌套循環?](http://stackoverflow.com/questions/6137218/how-can-i-add-up-two-2d-pitched-arrays-using-nested-for-loops)。 – JackOLantern

+1

#define] [* width + ===> M [i] [j]在背景上變成M [i * width + j]也許吧? –

回答

1

一般在CUDA,你將不得不您的陣列轉換成線性存儲器如果堅持使用M(在2D陣列的情況下,它們應該被轉換到線性存儲器使用cudaMallocPitch
[i] [j]符號,您可以將設備上的陣列分配爲「陣列陣列」。在這種情況下,您將使用cudaMalloc分配數組的每一行,然後將指針存儲到指針數組中的每一行。您將不得不在設備上分配這個指針數組!

因此,當你說M [i]時,它會給你第i行的指針,你可以使用該指針的[j]索引。

從過去三週嚴重關注這個東西的傢伙(又名我),認爲這是你能做的最糟糕的事情。分配遍佈全球的內存,很可能它們都不符合CUDA對齊要求。因此訪問沒有完全合併,並且訪問延遲會損害內核的性能。堅持線性和傾斜的內存以獲得最佳性能。索引約定可能有點混亂和尷尬起初,但你會習慣它:-)