因此,我讀了一些關於CUDA和GPU編程的內容。我注意到一些事情,例如訪問全局內存很慢(因此應該使用共享內存),並且變形中線程的執行路徑不應該偏離。用CUDA解決涉及更復雜數據結構的問題
我也看了一下(密集)矩陣乘法的例子,在程序員手冊和nbody problem中描述過。實施的竅門似乎是一樣的:將計算排列在一個網格中(它已經在矩陣mul的情況下);然後將網格細分爲更小的圖塊;將磁貼獲取到共享內存中,並讓線程儘可能長的計算,直到它需要將數據從全局內存重新加載到共享內存中。
在N體問題計算每個體體相互作用的情況下,是完全相同的(頁682):
bodyBodyInteraction(float4 bi, float4 bj, float3 ai)
它需要兩個機構和加速度矢量。身體矢量有四個組成部分,它的位置和重量。閱讀紙張時,計算可以很容易理解。
但是,如果我們有一個更復雜的對象,動態數據結構呢?現在假設我們有一個對象(類似於紙上的正文對象),它有一個附加的其他對象的列表,並且每個線程中附加的對象的數量是不同的。我怎麼能夠實現這一點,而不必讓線程的執行路徑發生分歧?
我還在尋找能夠解釋如何在CUDA中有效實現涉及更復雜數據結構的不同算法的文獻。
那麼我想只是去sciencedirect.com和輸入cuda是一個好的開始。至少我在提出這些問題之後閱讀了一些有趣的論文。 Thx爲您的答案。 – Nils 2010-05-20 15:03:49