我刚开始学习 OpenCL。我试图了解将函数/算法移动到 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 时,您期望显着加速的最简单的例子是什么?