截至目前,在内核执行时,我的GPU比我的CPU慢.我想也许是因为我正在测试一个小样本,因为较小的启动开销,CPU最终完成得更快.但是,当我使用几乎是样本大小10倍的数据测试内核时,CPU仍然完成得更快,GPU几乎落后400毫秒.
运行时2.39MB文件CPU:43.511ms GPU:65.219ms
运行时32.9MB文件CPU:289.541ms GPU:605.400ms
我尝试使用本地内存,虽然我100%肯定我使用它错了,并遇到了两个问题.内核在1000-3000ms之间完成(取决于我为localWorkSize设置的大小),或者我遇到状态代码-5,即CL_OUT_OF_RESOURCES.
这是SO成员帮助我的内核.
__kernel void lowpass(__global float *Array, __global float *coefficients, __global float *Output) {
int globalId = get_global_id(0);
float sum=0.0f;
for (int i=0; i< 65; i++)
{
float tmp=0;
if (globalId+i > 63)
{
tmp=Array[i+globalId-64]*coefficients[64-i];
}
sum += tmp;
}
Output[globalId]=sum;
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试使用本地内存.第一位将是主机代码的片段,以下部分是内核.
//Set the size of localMem
status |= clSetKernelArg(
kernel,
2,
1024, //I had num_items*(float) but it gave me a -5. Num items is the amount of elements in my array (around 1.2 …Run Code Online (Sandbox Code Playgroud)