3

2D 畳み込み用の CUDA プログラムを作成しましたが、それを CUDA 以外の実装と比較して、スピードアップを測定したいと考えています。

古典的な複数ループ アプローチまたは matlab の conv2 を使用してプレーンな C での自分の実装と比較することはできますが、それらは最速の実装ではないため、正当/公正な比較のようには感じられません。

また、OpenCV を試してみることを考えていましたが、SIMD に最適化されたバージョンを探していましたが、うまくいきませんでした。OpenCVを使用する必要がありますか?

注:これを含む他の質問を読みましが、答えは基本的に私のプレーンなCコードまたは利用可能なさまざまな方法の議論と同じです。

4

1 に答える 1

5

最速の一般的な 2D 畳み込みアルゴリズムは、最初にソースに対して FFT を実行し、次に相関させ、次に FFT を戻して結果を取得するため (これは conv2 が matlab で行うことです)、複数ループのアプローチはおそらく最適ではありません。

GSLは、FFT を使用したい場合に、FFT の標準的で高速な実装を提供します。

また、カーネルが分離可能な場合、畳み込みを 2 つの 1D 畳み込みとして実行できる場合があります。

OpenCV は、それが機能する場合に優れています。高速な実装として広く受け入れられるはずです。

于 2011-06-03T03:48:57.180 に答える