2010-11-24 129 views
4

與通用單處理器內核相比,CUDA或OpenCL代碼運行算法能夠提供多快? (考慮爲CPU和GPU目標編寫和優化算法)。我知道它取決於顯卡和CPU,但是說,NVIDIA最快的GPU之一和(單核心)Intel i7處理器之一?我們可以測試CUDA或OpenCL與CPU性能的對比速度嗎?

而且我知道它也取決於算法的類型。

我不需要一個嚴格的答案,但有經驗的例子,如:使用雙精度浮點的圖像處理算法,每像素使用10個操作前5分鐘,現在使用該硬件在x秒內運行。

+2

太多未知數:快速,非常快...... – 2010-11-24 15:04:30

+0

我已經改變了這個問題,所以它打開了可能性說:「不,這是不可能的」或「是的,有一個基準測試套件,這樣做比較「等 – Roalt 2010-11-25 06:45:14

回答

9

你的問題過於寬泛,而且很難回答。此外,只有一小部分算法(沒有太多共享狀態的算法)適用於GPU。

但我確實希望敦促你對索賠進行批評。我正在進行圖像處理,並且閱讀了許多關於這個主題的文章,但是在GPU情況下經常需要將輸入數據上傳到GPU並將結果下載回主存儲器的時間爲而不是包含在計算中因素。

雖然有些情況下這並不重要(兩者都很小或者有第二階段計算可進一步縮小結果大小),但通常不得不傳輸結果和初始數據。

我已經看到這會將一個聲稱加上一個否定,因爲單獨的上傳/下載時間比主CPU需要做計算。

幾乎相同的事情適用於結合不同GPU卡的結果。

更新較新的GPU似乎能夠使用乒乓緩衝區同時上傳/下載和計算。但徹底檢查邊界條件的建議仍然存在。那裏有很多旋轉。

0

我見過數字從2倍到400倍不等。我還知道,中等範圍的GPU無法在雙精度計算中與高範圍CPU競爭--8核Xeon上的MKL將比300美元GPU上的CULA或CUBLAS更快。

OpenCL比CUDA慢得多。

+3

我看過數字從0.1x到400x。重要的是要認識到,GPU不適合每一項任務,即使是一個優化好的算法實際上可能會更慢*(低計算密度,大數據集,低參考位置,大相互依賴性,不同控制流) 。 – 2010-11-24 15:22:18

1

我認爲這個OpenCL的video introduction在第一集或第二集(我不記得)給出了一個很好的答案。我認爲這是在第一集的結尾......

一般來說,這取決於你可以「平行」的問題。問題的大小本身也是一個因素,因爲將數據複製到顯卡需要花費時間。

1

你的問題總的來說很難回答;只有許多不同的變量使得難以給出準確或公平的答案。

值得注意的是,您正在比較兩者1)算法的選擇2)硬件的相對性能3)編譯器優化能力4)實現語言的選擇和5)算法實現的效率,所有在同一時間...

請注意,例如,不同的算法可能更適合GPU與CPU;而且GPU中的數據傳輸也需要在計時中進行考慮。

對於在CPU和GPU上執行的OpenCL代碼,AMD有OpenCL性能的案例研究(實際上有幾個)。 Here是具有稀疏矩陣向量乘法的性能結果之一。

0

來自橡樹嶺國家實驗室和喬治亞理工學院的新基準測試套件SHOC(Scalable Heterogeneous Computing)具有許多重要內核的OpenCL和CUDA實現。您可以從http://bit.ly/shocmarx下載該套件。請享用。

1

它非常依賴於算法以及實現的效率。總體而言,公平地說,GPU在計算上比CPU好。因此,上限是將頂端GPU的理論GFlops評級除以頂級CPU。您可以對理論存儲器帶寬進行類似的計算。

例如,GTX580的1581.1 GFlops與i7 980XE的107.55 GFLOPS。請注意,GTX580的評分是針對單精度的。我相信你需要將費米級別的非特斯拉減少4倍,才能達到雙倍精度。所以在這個例子中,你可能期望大約4倍。

注意事項,爲什麼你會做的更好(或看到哪些要求大得多的加速效果):

  1. 圖形處理器具有更好的內存帶寬比CPU一旦數據卡上。有時,內存綁定算法可以在GPU上表現良好。

  2. 聰明地使用緩存(紋理內存等),它可以讓你做的比公佈的帶寬更好。

  3. 像Marco說的,轉移時間沒有包括在內。我個人總是把這樣的時間放在我的工作中,因此發現我看到的所有數據都適合在GPU上的迭代算法中的最大加速(我已經在中端CPU上獲得了超過300倍的GPU, )。

  4. 蘋果進行橙色比較。比較頂級GPU和低端CPU本質上是不公平的。反駁是高端CPU比高端GPU成本高得多。一旦進入GFlops/$或GFlops/Watt比較,它可能看起來更有利於GPU。

0
__kernel void vecAdd(__global float* results) 
{ 
    int id = get_global_id(0); 
} 

此內核代碼可在10毫秒上一個新的60 $ R7-240 GPU產卵16M線程。

這相當於10個納秒中的16個線程創建或上下文切換。什麼是140美元FX-8150 8核CPU時序?它是每個核心50納秒1線程。

在這個內核中添加的每條指令都是一個gpu的勝利,直到分支爲止。

相關問題