1

我用gpuArray尝试了matlab的卷积函数conv2 convn。例如 convn(gpuArray.rand(100,100,10,'single'),gpuArray.rand(5,'single') 并将其与 cpu 版本 convn(rand(100,100,10),rand(5)) 进行比较。不幸的是gpu 版本比 cpu 版本慢得多, 特别是当我将函数放入循环时(这对我来说很重要). 有谁知道使用 matlab 和 gpu 进行相对较小的过滤内核的快速卷积的替代方法从 5x5 到 14x14?

4

1 回答 1

2

GPU 性能受测试用例中数据数组大小 [100x100x10] 和 [5x5] 的限制。

实际性能还取决于 GPU 和 CPU 模块类型。对于您的数据大小(以下代码的测试用例 2),我可以在 GPU Tesla M2090 和 CPU Xeon E5-2609 上获得性能提升(2.75 倍)。

对于以下matlab测试代码

m=1000;
n=100;
k=5;

gc=convn(gpuArray.rand(m,m,10,'single'),gpuArray.rand(k,'single'));

tic;
for i=1:n
    gc=convn(gpuArray.rand(m,m,10,'single'),gpuArray.rand(k,'single'));
end
toc

c=convn(rand(m,m,10,'single'),rand(k,'single'));
tic;
for i=1:n
    c=convn(rand(m,m,10,'single'),rand(k,'single'));
end
toc

m=1000; n=100; k=5;我在 GPU 上获得非常好的性能提升(11.6 倍)时。

Elapsed time is 2.367453 seconds.
Elapsed time is 27.502952 seconds.

但是当m=100; n=1000; k=5;我只有 2.75x

Elapsed time is 1.206053 seconds.
Elapsed time is 3.330559 seconds.

当 时m=100; n=1000; k=14;,它变得更好(4.84x)。

Elapsed time is 2.804957 seconds.
Elapsed time is 13.585698 seconds.
于 2013-10-20T12:55:06.470 回答