matlab convn函数GPU比CPU慢吗?

时间:2014-08-15 03:48:02

标签: matlab gpu

我在两个GPU上测试了convn:Quadro 6000和Titan都需要比cpu更长的时间。

可以在matlab中进行快速测试:

maxloop=1000;
for i=1:maxloop
   output2= convn(rand(320,1), rand([6,1,300]),'full');
end

for i=1:maxloop    
    goutput2= convn(gpuArray.rand(320,1),gpuArray.rand([6,1,300]), 'full');
end

在CPU上需要0.52秒,而在Quadan 6000上需要7秒,在Titan上需要15秒+。

我测试的内容:

1)如果将rand输入更改为fixed,则预定义值不会有任何改进。

2)预定义GPU输出(goutput2)并没有多大帮助。

的Quadro

Quadro 6000

泰坦

Titan

我的测试与第一个答案相同:

Matlab Convolution using gpu

当m = 1000时获得相同的结果; N = 100; K = 5;

经过的时间是2.367453秒。 %%%% GPU

经过的时间是27.502952秒。 %%%% CPU

我的问题是我自己的测试代码在GPU上运行得更慢的原因和原因是什么?

1 个答案:

答案 0 :(得分:0)

乍一看似乎是问题Matlab Convolution using gpu。但是在将数据大小从[6,1,300]增加到[1000,1,1000]之后,GPU循环没有任何改进。所以它并不是关于"尺寸"数据。

当我将数据从[1000,1,1000]重新整形为[1000,1000]时,GPU运行速度更快,CPU运行速度比之前的测试慢。代码和时间如下:

clear all;

maxloop=1000;

r5=rand(5,1);
r1000=rand([1000,1,1000]); %3d array

for i=1:maxloop   
   cpu_output1= convn(r5, r1000,'full');  %3d cpu array
end

r1000=reshape(r1000,[1000,1000]);
for i=1:maxloop
   cpu_output2= convn(r5, r1000,'full'); %2d cpu array
end

gr5=gpuArray.rand(5,1);
gr1000=gpuArray.rand([1000,1,1000]);

for i=1:maxloop    
    gpu_output1= convn(gr5,gr1000, 'full'); %3d gpu array
end

gr3_1000=reshape(gr1000,[1000,1000]);
for i=1:maxloop    
    gpu_output2= convn(gr5,gr3_1000, 'full'); %2d gpu array
end

enter image description here