2011-10-17 52 views
1

我正在研究nVidia CUDA中的數據預取。我讀了一些關於設備本身預取的文檔,即從共享內存預取到緩存。在Nvidia CUDA中預取

但我有興趣在CPU和GPU之間進行數據預取。任何人都可以與我聯繫一些文件或有關此事的東西。任何幫助,將不勝感激。

+3

你的問題在目前的形式中過於寬泛 - 試着問一個更具體的問題。您可能還想查看http://developer.nvidia.com上的nVidia開發人員論壇。 –

+0

好的。如何在給定的CUDA程序中添加預取指令? –

+0

這仍然非常模糊 - 預取什麼到什麼?出於什麼目的 ?在哪一代GPU上? –

回答

0

也許您會對CUDA 4.0的異步主機/設備內存傳輸功能感興趣?您可以通過使用頁面鎖定主機內存來重疊主機/設備內存傳輸和內核。你可以用它來...

  1. 複製工作集#1 &#2從主機到設備。
  2. 進程#i,同時提升#i + 1和加載#i + 2。

因此,您可以將數據流入和流出GPU並一次計算(!)。有關更多詳細信息,請參閱CUDA 4.0編程指南和CUDA 4.0最佳實踐指南。祝你好運!

+0

你不需要CUDA 4.0來做到這一點。異步主機/設備內存傳輸是一個古老的故事。 CUDA 4.0所做的是跨多個GPU實現統一的內存尋址。 GPU現在可以在不干擾主機的情況下進行通信。 – CygnusX1

+0

很酷。我仍然認爲香草頁鎖主機內存可以用來做他想做的事,但是......對嗎? – Patrick87

+0

我想在GPU中應用乒乓技術,技巧如下: –

1

答案基於您的評論:

,當我們想對大數據進行計算的理想,我們將最大數據傳送到GPU,執行計算,將其發送回CPU即SEND,計算,SEND(回到CPU),現在它發回CPU GPU已經停滯,現在我的計劃被給予CU程序,說它運行在整個全局內存中,我將迫使它在全局內存的一半運行它,以便剩下的一半我可以用於數據預取,所以雖然計算正在執行一半同時我預先在其他半數據庫中的數據,所以沒有攤位將存在..現在告訴我是否可行?性能會降低或升級?應該加強..

CUDA 被引入以實現這種方法。

如果你的compoutation是相當密集的,那麼是的 - 它可以大大加快你的表現。另一方面,如果數據傳輸佔用了90%的時間,那麼只會節省計算時間 - 也就是 - 10%的上限...

有關如何使用流的詳細信息(包括示例)在CUDA編程指南中提供。 對於4.0版,這將是「3.2.5.5流」部分,特別是「3.2.5.5.5重疊行爲」---在那裏,他們啓動另一個異步存儲器副本,而內核仍在運行。

+0

我認爲你沒有得到我的觀點... CUDA流不是基於幾年前在DSP中使用的乒乓...我試圖在CUDA中實現這一點正如我所解釋的那樣,攤位不會在那裏,流也可能阻止攤位,但無論我是支柱這是一個新的東西,我只是想要一些關於如何實現它的輸入...因爲我必須掃描程序... ... –

0

Cuda 6將消除複製的需要,即複製將自動進行。但是,您仍然可以從預取中受益。

簡而言之,您需要在完成當前計算時傳輸「下一個」計算的數據。要達到這個目的,你需要在CPU上至少有兩個線程,以及某種信令方案(知道何時發送下一個數據)。分塊當然會起到很大的作用並影響性能。

上述對於APU(同一芯片上的CPU + GPU)可能會更容易,因爲兩個處理器都可以訪問相同的內存,所以不需要複製。

如果你想找到一些關於GPU預取的論文,只需使用google學者。