2016-11-07 141 views
-1

我要求對以下問題的一個提醒:GPU蠻力實現

對於一個研究項目,我基於與(PY)的OpenCL GPU的寫蠻力算法。

(我知道JTR就在那裏)

現在我有蠻力發電機在Python被填滿每一輪與字(量= 1024 * 64).I通緩衝GPU內核的緩衝區。 GPU正在計算緩衝區中的每個值a MD5哈希值並將其與給定值進行比較。太棒了!

但是:

我不認爲這是真正的充分表現,我可以從GPU獲得 - 或者是什麼呢?當我不得不通過CPU填充緩衝區並將其傳遞給GPU'僅僅'用於Hash計算比較 - 或者我錯了,這已經是緊固件或幾乎是我可以固定的性能得到?

在我考慮在這裏問這個問題之前,我已經做了大量的研究。到目前爲止,我在GPU內核上找不到強力執行 - 爲什麼?

THX

編輯1:

我試圖解釋它以不同的方式,我想知道是什麼。可以說我有一臺普通的電腦。在GPU上執行蠻力算法比在CPU上執行速度快(如果你做得對)。我已經瀏覽了一些GPU蠻力工具,並且在GPU內核上找不到完整的蠻力實現。

現在我正在向GPU傳遞「文件包」並讓他們完成工作(散列&比較) - 看起來像這是常見的方式。 「拆分」蠻力算法的速度不是很快,因此GPU上的每個單元都會自行生成自己的「單詞包」。

我所做的只是想知道爲什麼常用的方法是將包中的值從CPU傳遞到GPU,而不是在GPU上工作,也不需要CPU。是否因爲不可能在GPU上拆分強力算法,或者不值得將其移植到GPU上?

回答

1

關於「蠻力」方法的性能。

我所做的只是想知道爲什麼常用的方法是將包中的值從CPU傳遞到GPU,而不是在GPU上工作也能完成CPU工作!是否因爲不可能在GPU上拆分強力算法,或者不值得將其移植到GPU上?

我不知道你算法的細節,但是,一般來說,在創建混合CPU-GPU算法之前需要考慮一些要點。僅舉幾例:

  • 不同的體系結構(最好的CPU算法可能不是最好的 GPU算法)。
  • 額外的同步點。
  • 不同的內存空間(意味着PCIe /網絡傳輸)。
  • 更復雜的算法

  • 更復雜的微調。

  • 供應商政策。

儘管如此,還是有不少同時結合了GPU和CPU功能的例子。通常,算法的順序或高度不同部分將在CPU上運行,而同構的計算密集型部分在GPU上運行。其他應用程序使用CPU將輸入數據預處理爲更適合GPU處理的格式(例如,更改數據佈局)。最後,有一些針對純粹性能的應用程序確實在CPU上做了大量工作,如MAGMA項目。

總之,如果真的有可能,或者它是否值得設計一種能最大限度利用CPU-GPU系統的混合算法,那麼答案就是它確實取決於算法的細節。

關於你目前的表現手法

我想你應該打破你的問題分爲兩個部分:

  • 這是我的GPU內核效率?
  • 我在GPU上工作多少時間?

關於第一個,你沒有提供有關您的GPU內核的任何信息,所以我們不能真正幫助你用它,但一般的優化方法適用於:

  1. 它是你的計算內存/計算邊界?
  2. 您距離GPU峯值內存帶寬有多遠?

您需要從這些問題開始,以瞭解您應該應用哪種優化/算法。看看roofline performance model

至於第二個問題,即使你沒有詳細說明,看起來你的應用程序花費了很多時間在小內存傳輸上(看看article關於如何優化內存傳輸)。啓動PCIe只是發送幾個字的開銷會導致您使用GPU設備所帶來的任何性能優勢。因此,一般來說,發送一堆小緩衝區而不是大容量的大容量內存塊通常是不行的。

如果您正在尋找性能,您可能希望重疊計算和內存傳輸。請閱讀this article瞭解更多信息。

作爲一般性建議,在實施任何優化之前,請花一些時間來分析您的應用程序。它會爲你節省很多時間。

+0

Thx爲您的時間!我更新了我的問題,也許你可以再看一遍,讓我知道你對此有何看法。我的問題並不清楚我的程序和我的表現 - 它更多的是關於暴力GPU算法的常見實現。 – tobnic

+0

不客氣。我不知道你的算法的具體情況。儘管我提供了一些想法,但值得爲您的問題添加一些特定的標籤。 – srodrb