【问题标题】:Convolution along singleton dimensions on GPU in MatlabMatlab中GPU上沿单例维度的卷积
【发布时间】:2014-01-16 03:43:42
【问题描述】:

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

bsxfun(@conv,gpuArrayA,gpuArrayB)

我得到了错误

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

那么有没有办法在 Matlab 中实现这一点而无需编写自定义 CUDA 代码?

【问题讨论】:

    标签: matlab parallel-processing


    【解决方案1】:

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

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

    我发现与同等 CPU 版本相比,我获得了更快的结果,因此其中必须内置一些 GPU 并行化。

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 2013-10-28
      • 2021-06-14
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 2014-03-08
      相关资源
      最近更新 更多