2013-10-07 30 views
0

我有一個GTX Titan,共享內存爲49152字節/塊。我試圖解決〜9000耦合ODE的問題,並希望將這些濃度爲〜9000倍的雙倍濃度存儲在共享內存中,以便計算每個濃度的變化率。使用GPU共享內存:檢查我的理解

所以我只想確認這是不可能的,因爲double是8個字節而49152/8 = 6144.對嗎?

+0

你可以有多個塊。 – kangshiyin

+0

每個9000線程都需要訪問這9000個雙打來計算其各自的變化率,所以在一個MP上的一個塊上有一些濃度,而另一個塊上的其他塊上的濃度是不好的。 (假設我理解這是如何正確工作的。) –

回答

1

你的理解是正確的。您不能同時將9000 double數量存儲在可由單個線程塊訪問的共享內存中(即在單個SM中)。

-1

您也可以使用註冊文件!該部分可以擁有每個SM共享內存的重要部分。核心/流媒體單元的寄存器空間上的專用變量可用於「本地內存交換」方式與同一塊中的其他內核進行通信。註冊交換可以彌補泰坦每sm的48kB共享內存。

+0

你認爲你可以詳細說明嗎?自從我開始研究這個CUDA的東西已經有一段時間了。我仍然試圖弄清楚寄存器是什麼(看起來像專門爲每個線程分配的低延遲內存)以及我如何使用它。 –

+0

它類似於cpu寄存器(AX,BX,CX),但具有可尋址的訪問屬性,所以每個smx(或192個內核)可能有數千個。 –

+0

根據定義,寄存器和本地內存是線程範圍。無論是作爲在線程之間傳遞數據的機制,都是不可能的。任何建議否則是明顯錯誤的。 – talonmies