2016-11-29 33 views
0

我試圖用GPU執行縮減,也就是從數組的所有元素中找到最大值。有來自Nvidia here的教程,讓我們來說說最簡單的方法幻燈片針對億元素陣列的GPU縮減

我唯一的問題是我的數組是巨大的!它可以達到40億個元素。從幻燈片7中的示例代碼中,需要在塊共享內存和全局內存之間來回複製,並且使用全局內存來存儲所有元素,這在我目前的理解中是無法避免的。此存儲超過2GB的顯卡內存。

有沒有什麼辦法可以用這麼大的陣列來減少這個數目呢還是現在的圖形硬件的限制?

PS:在未來的擴展版本,我還計劃與更多的超過4個十億元素

+0

爲什麼你不能只執行減少輸入數據的塊,以適應GPU內存,然後減少部分結果以找到真正的最大值? – talonmies

+0

我現在感覺很傻!也許應該關閉這個問題。感謝您的提示! –

回答

1

減少,你可以在塊再做一次手術。

最簡單的解決方案是在GPU上分配兩個數據緩衝區和兩個結果緩衝區,然後通過執行還原內核將重疊傳輸到GPU。在GPU繁忙時,CPU可以減少連續GPU減少的輸出。這樣您就可以分攤數據傳輸的大部分成本以及部分減少結果的處理。

您可以使用CUDA示例的標準縮減內核NVIDIA電源來完成所有這些工作。

+0

你所說的更像是一種在CPU和GPU之間協同工作的高級應用。我會爲此尋找的,但下一次升級。謝謝! –