在Matlab中沿GPU上的单体尺寸卷积

时间:2014-01-15 16:42:23

标签: matlab parallel-processing

我试图在Matlab中并行地在大型N-D阵列的一个维度上实现卷积。卷积滤波器足够小,使用FFT来实现它是没有意义的。对于非常长的1D信号,我知道我可以调用conv(gpuArrayA,gpuArrayB),对于许多函数,我可以使用bsxfun在gpuArray的单个维度上并行应用函数,但是当我尝试

bsxfun(@conv,gpuArrayA,gpuArrayB)

我收到错误

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

那么有没有办法在Matlab中实现它而不必编写自定义CUDA代码?

1 个答案:

答案 0 :(得分:1)

你不能用一维卷积内核调用convn(),例如,

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

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

我发现这比同等CPU版本的结果更快,所以必须有一些内置的GPU并行化。