2015-02-11 159 views
-1

我剛剛開始學習一些cuda編程,我很感興趣的是如何處理超過塊/線程大小的大型矩陣的計算。使用CUDA計算(非常)大型矩陣產品

例如,我有seen code其中顯示瞭如何執行平鋪矩陣乘法,但它失敗,塊大小和網格大小太小。在上述代碼中,如果塊大小和網格大小均設置爲1,則僅計算最終矩陣的第一個元素。

答案很簡單:用較大的塊和網格大小調用內核,但是當我想執行一個有800萬行和600萬列的矩陣乘法時會發生什麼 - 這是一個任意大的網格,不能有適當的網格和任何現代GPU的塊大小?

我在哪裏可以找到示例代碼或算法來處理這類事情?我相信簡單的情況應該是一個矩陣乘法算法,如果用<<<1,1>>>調用,任何可以解釋這個調用的算法都應該能夠解釋任何更大的矩陣。

+1

一個600萬乘800萬個元素的稠密浮動矩陣將需要約。 192 TB的存儲空間(double將是其兩倍)。如果每個元素分配了一個線程,則需要「僅」約。 48兆線程 - 約35位尋址。 CUDA網格在cc3.0 +設備上變暗提供(理論上)〜63位* block *地址空間,更不用說每塊1024個線程的可用性(因此超過70位可尋址線程空間)。這個問題似乎是基於錯誤的前提:「對於任何現代GPU而言,不可能有適當的網格和塊大小的任意大的東西。」 – 2015-02-12 05:13:32

回答

1

非常大的矩陣的主要問題不是塊數或線程數。主要問題是你無法將整個矩陣放入GPU的DRAM內存中。因此,爲了進行乘法運算,您需要手動使用平鋪將輸入矩陣分成可以放入GPU內存的圖塊。然後,您需要在GPU上的該圖塊上運行矩陣乘法,並使用盡可能多的線程,然後將圖塊結果返回給主機(CPU)。

當您在GPU上處理這些大圖塊時,您需要啓動1000個線程才能獲得所需的性能。啓動只有一個線程不以任何方式幫助你。

你可以看看本文的更多信息:

CUDA基於非常大的矩陣計算的快速實現

我只是覺得通過谷歌搜索「大型矩陣乘法CUDA」