我剛剛開始學習一些cuda
編程,我很感興趣的是如何處理超過塊/線程大小的大型矩陣的計算。使用CUDA計算(非常)大型矩陣產品
例如,我有seen code其中顯示瞭如何執行平鋪矩陣乘法,但它失敗,塊大小和網格大小太小。在上述代碼中,如果塊大小和網格大小均設置爲1
,則僅計算最終矩陣的第一個元素。
答案很簡單:用較大的塊和網格大小調用內核,但是當我想執行一個有800萬行和600萬列的矩陣乘法時會發生什麼 - 這是一個任意大的網格,不能有適當的網格和任何現代GPU的塊大小?
我在哪裏可以找到示例代碼或算法來處理這類事情?我相信簡單的情況應該是一個矩陣乘法算法,如果用<<<1,1>>>
調用,任何可以解釋這個調用的算法都應該能夠解釋任何更大的矩陣。
一個600萬乘800萬個元素的稠密浮動矩陣將需要約。 192 TB的存儲空間(double將是其兩倍)。如果每個元素分配了一個線程,則需要「僅」約。 48兆線程 - 約35位尋址。 CUDA網格在cc3.0 +設備上變暗提供(理論上)〜63位* block *地址空間,更不用說每塊1024個線程的可用性(因此超過70位可尋址線程空間)。這個問題似乎是基於錯誤的前提:「對於任何現代GPU而言,不可能有適當的網格和塊大小的任意大的東西。」 – 2015-02-12 05:13:32