行列のゼロ以外の要素をできるだけ早く見つけたいです。CUDA
\を念頭に置いて、出力のサイズが find 関数の前にわからないため、おそらくメモリ割り当ての問題が原因で、 の find のJacket
「通常の」CPU バージョンよりもはるかに遅いことがわかりました。Matlab
ただし、bwlabel
とregionprops
(どちらも でサポートされてJacket
います) を使用すると、ゼロ以外の要素に関する情報が効果的に得Matlab
られ、Image Processing Toolbox の組み込み関数よりもはるかに高速です。これを利用してゼロ以外の要素を取得する方法はありますか? を使用して見つかったラベル付きオブジェクトのそれぞれに対して何らかの処理を行う方法はありますbwlabel
か?
2 に答える
2
私の経験では、Jacket がサポートする FIND の実装は非常に高速で、少なくとも 300x300 を超える行列の場合はそうです。これをラップトップでテストし、結果を以下で共有します. 私のハードウェア仕様は次のとおりです。
>> ginfo
Jacket v2.2 (build 77be88c) by AccelerEyes (64-bit Windows)
License: Standalone (C:\Program Files\AccelerEyes\Jacket\2.2\engine\jlicense.dat)
Addons: MGL16, JMC, SDK, DLA, SLA
CUDA toolkit 4.2, driver 4.2 (296.10)
GPU1 GeForce GT 540M, 2048 MB, Compute 2.1 (single,double)
Display Device: GPU1 GeForce GT 540M
Memory Usage: 1697 MB free (2048 MB total)
CPUはインテル Core i7-2630QM。
Jacket は、CPU を介した FIND 関数で最大 3 倍のスピードアップを達成しています。私が使用したベンチマークコードは次のとおりです。
% time Jacket vs CPU
for n = 5:12;
x(n) = 2^n;
Ac = single(rand(x(n)));
Ag = gsingle(Ac);
t_cpu(n) = timeit(@() find(Ac > 0.5));
t_gpu(n) = timeit(@() find(Ag > 0.5));
end
% plot results
plot(x, t_cpu ./ t_gpu);
xlabel('Matrix Edge Size', 'FontSize', 14);
ylabel('Jacket (GPU) Speedup over CPU', 'FontSize', 14);
このコードを実行した結果は次のとおりです。
JacketがサポートするBWLABELとREGIONPROPS関数も非常に高速だと確信していますが、上記のベンチマークを考えると、FIND自体はうまくいくかもしれません.
于 2012-08-25T21:50:08.390 に答える