我试图在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代码?
答案 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并行化。