2010-03-14 37 views
8

我剛剛開始學習OpenCL。我試圖感受當將函數/算法移動到GPU時性能提升的預期。什麼是最適合在GPU上計算的微不足道的功能?

在大多數教程中給出的最基本的內核是內核,它需要兩個數字陣列,並在對應的索引求和值,並將它們添加到第三陣列,像這樣:我假設

__kernel void 
add(__global float *a, 
    __global float *b, 
    __global float *answer) 
{ 
    int gid = get_global_id(0); 
    answer[gid] = a[gid] + b[gid]; 
} 

__kernel void 
sub(__global float* n, 
    __global float* answer) 
{ 
    int gid = get_global_id(0); 
    answer[gid] = n[gid] - 2; 
} 

__kernel void 
ranksort(__global const float *a, 
     __global float *answer) 
{ 
    int gid = get_global_id(0); 
    int gSize = get_global_size(0); 
    int x = 0; 
    for(int i = 0; i < gSize; i++){ 
    if(a[gid] > a[i]) x++; 
    } 
    answer[x] = a[gid]; 
} 

你永遠無法證明在GPU上計算這個值時,內存傳輸將會超出計算這個CPU的時間的幅度(我可能是錯誤的,因此這個問題)。

什麼我不知道是什麼將是最簡單的例子,在那裏你會使用的OpenCL內核,而不是CPU的期望時,顯著加速?

回答

6

如果有足夠大的矩陣組打算上執行線性代數運算,或者你基本上每個元素執行相同的操作,我會認爲這是一個簡單的例子。矩陣乘法,加法,fft,卷積等,你會看到一些加速而不做太多工作。現在如果你想看到100倍的加速,那麼你需要深入研究內存管理,並瞭解幕後發生的一些事情。

入門,我建議用pycuda開始,因爲它是非常簡單上手,因爲它提供了一個抽象非常高的水平,將讓你非常迅速躥英寸當你準備好進一步潛水時,可以使用伊利諾伊大學的cuda http://courses.ece.illinois.edu/ece498/al/查看關於並行計算的課程。

+0

鏈接已損壞。 – user 2013-06-26 04:25:12

3

取決於瑣碎的定義。在我看來,它將是矩陣矩陣產品,因爲它具有計算與內存的比例。顯示相似比率的算法可能受益於在GPU上競爭。

+0

矩陣乘法是遠離普通的應用,而不是一個最好的例子可以從GPU計算中受益的應用程序。 – Eric 2010-03-19 08:12:52

2

雖然內核顯然是很瑣碎也可以是一個有用的例子,它是完全綁定的內存,因爲每個元素有兩個讀和一個寫,只有一個算術運算。有一些指令可以計算地址等,但與存取內存的成本相比,所有這些都幾乎沒有任何影響。

假設數據已經在GPU上,可以從GPU的非常高的帶寬中受益的內存,即使這個簡單的內核。當然,GPU依靠你有足夠的線程來隱藏內存延遲,所以你的本地工作組大小應該相當大(比如256或512),你的全局工作組大小應該非常大(例如數百成千上萬),這是有效的,但這就是關鍵所在!

0

什麼是「最微不足道的」,是見仁見智,但我要說的是計算Mandelbrot集的圖像是使用GPU一個非常簡單的應用程序。每個點都完全獨立於每個點,因此您可以爲每個點啓動一個線程並獲得巨大的加速。迭代的公式本身是一個簡單的二次函數。我用它作爲示例,可以在我的博客here上找到一個教程,只需計算這些數字,甚至不需要使圖像變得更簡單。幾乎任何令人尷尬的並行(見維基百科條目)問題是一個很好的開始。

1

我知道這個問題是相當古老的,但是......我發現Mandelbrot集的計算對於GPU來說是非常理想的。你有一個複雜的輸入向量(float2)和一個標量輸出(int),每個輸入向量平均有幾百個操作。

它可以作爲一個很好的示例應用程序,因爲它...

  • 有一個2維輸入數據集(計算的圖像)
  • 你能解釋的波陣面,爲什麼二維處理在某些情況下有利
  • 演示矢量數據類型
  • 產生圖象,即通過人眼(調試)迅速覈查
  • 可以很容易地擴展:顏色映射(__const螞蟻),float4處理而不是float2(優化),產生int4(R,G,B,A)輸出向量(優化)。還原步驟(RGBA)=>(RGB)
  • 需要數學知識是可接受的(簡單的公式)

問候, 斯蒂芬

相關問題