在 Matlab 中 GPU 上沿单例维度的卷积



我正在尝试在 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 代码?

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

 A=gpuArray(rand(100,100,100));
 kernel=gpuArray([1;1;1]);
 result = convn(A,kernel,'same');  % convolution along dim=1

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

最新更新