OpenCL卷积比Matlab卷积慢?

时间:2016-08-05 15:44:47

标签: matlab opencl convolution

我认为在计算卷积时Matlab会慢得多。当我在我的OpenCL代码中尝试它时,使用conv函数时,OpenCL程序的速度几乎是Matlab的两倍。

这是预期的还是我的OpenCL上的代码没有优化?

这是我在SO上找到的openCL代码。这是针对内核的

__kernel void lowpass(__global float *Array, __global float *coefficients, __global float *Output, __const int numOfCoefficients) {

    int globalId = get_global_id(0); 
    float sum=0.0f;
    int min_i= max((numOfCoefficients-1),globalId)-(numOfCoefficients-1);
    int max_i= min_i+numOfCoefficients;
    for (int i=min_i; i< max_i; i++)
    {
        sum +=Array[i]*coefficients[globalId-i];    
    }
    Output[globalId]=sum;
}

matlab代码很简单,其中h是低通滤波器的系数,y是输入

y2=conv(h,y);

我正在做的是将具有大约512个抽头的低通滤波器应用于具有80000000个样本的输入。 Matlab使用conv函数需要1.6秒,而opencl需要3.2。

修改 所以这是在具有10个计算核心和1Gb内存的AMD GPU上运行。有一个输入数组由80000000个样本组成,这些样本被传递到内核,以及在MatLab中为低通滤波器的特定截止频率生成的系数数组。 Output变量也是写入值的位置。

Matlab与opencl的结果完全相同,我使用的是wav文件,所以我可以听一听。另外,在检查Matlab和OpenCL生成的wav文件的属性时,它们都带有完全相同的信息。

0 个答案:

没有答案