我用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?
问问题
3660 次
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 回答