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