我刚刚开始学习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