我剛剛開始學習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的期望時,顯著加速?
鏈接已損壞。 – user 2013-06-26 04:25:12