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.6x) を得たとき。

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 に答える