小编Ved*_*haR的帖子

在opencl中为GPU优化内核代码

截至目前,在内核执行时,我的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)

c opencl

6
推荐指数
1
解决办法
730
查看次数

标签 统计

c ×1

opencl ×1