我正在尝试在 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 并行化。