【发布时间】:2014-01-22 23:54:52
【问题描述】:
我在 MATLAB 中有一个 3d 矩阵卷积的 for 循环,我想将其替换为
arrayfun 所以它将在 GPU 上并行运行。
我也觉得有一种方法可以完全摆脱循环,但不确定如何:)
这是我的代码,有什么建议吗?谢谢。
for i=1:size(obj.W, 3)
d(:, :, :, i) = convn(prev_delta(:, :, :, i), ...
flipped_W(:, :, i), 'full');
end
【问题讨论】:
-
如果目的是使用GPU来完成这个任务,也许你可以更直接地实现它
parfor:cac.cornell.edu/matlab/TechDocs/Examples/BestPracticesGPU.aspx -
parfor 跨 CPU 内核而不是 GPU 并行化 for 循环...无论如何,我使用 parfor 对其进行了测试,但没有得到任何性能提升(我的 CPU 上有 4 个内核)。
-
arrayfun(和gpuArray/arrayfun)将函数应用于数组的每个元素。您只是迭代一维并将convn应用于整个数组。除非您想自己实现convn,否则我不确定arrayfun是否适用。另外,我不知道,但gpuArray/convn本身可能已经并行化了。 -
@horchler convn 可能是并行化的,但 for 循环不是,看起来很浪费..