2014-01-15 46 views
1

我想在Matlab中并行实现一个大N-D数组的一维卷积。卷积滤波器足够小,以至于使用FFT来完成是没有意义的。对于很长的一维信号,我知道我可以打电话conv(gpuArrayA,gpuArrayB),并为许多功能,我可以使用bsxfun并行跨gpuArray的单一维度应用功能,但是当我尝试在Matlab中沿GPU上的单独尺寸卷积

bsxfun(@conv,gpuArrayA,gpuArrayB)

我得到错误

Error using gpuArray/bsxfun 
Use of 'conv' is not supported. 

那么是否有一种方法可以在Matlab中实现而不必编写自定义CUDA代码?

回答

1

你不能只是调用CONVN()与一维卷积核,例如,

A=gpuArray(rand(100,100,100)); 
kernel=gpuArray([1;1;1]); 

result = convn(A,kernel,'same'); % convolution along dim=1 

,我觉得我得到这个更快的结果比同等的CPU版本,所以必须有一些内置GPU并行进入这个。