質問

私は多くの画像の各行の畳み込みフィルタを適用しなければなりません。古典的には、1024×1024画素の画像360です。私のユースケースでは、720枚の画像560x600ピクセルです。

問題は、私のコードは、記事で宣伝されているものよりはるかに遅いということです。

私はナイーブ畳み込みを実施している、そしてそれは2メートル30代がかかります。私は、FFTWを使用してFFTに切り替えます。私は、各変換に2つの行をフィルタリングし、複雑な2複合体を使用していました。私は20代を中心に、今です。

事は、記事が10Sの周りに宣伝し、古典的条件のためにも少ないということです。 だから私は、畳み込みを計算するより高速な方法があるかもしれない場合は、ここに専門家にお願いしたいと思います。

数値のレシピは、DFTで行わソートを回避し、それに応じて周波数ドメインフィルタ機能を適応させることをお勧めします。しかし、これを行うことができるか何のコード例はありません。

たぶん私はデータをコピー中に時間を失います。実際の2は、実際の変換で、私はCOMPLEXE値にデータをコピーする必要はありません。しかし、私はとにかく0でパッドに持っています。

EDIT:この問題を解決する上で進捗状況のフィードバックや詳細情報については、以下の私自身の答えを参照してください。

質問(正確な改質)

私は離散非周期関数(512〜2048の値)に非常に高速畳み込みを適用するためのアルゴリズムやコードの一部を探しています。どうやらフーリエ変換、離散時間は、移動するための方法です。けれども、私は、データをコピーして、コンバージョン複雑に、そして蝶の並べ替えを避ける避けたいと思います。

役に立ちましたか?

解決

FFTは、信号を畳み込むために知られている最速の技術であり、FFTWは、FFTを計算するために利用可能な最速のフリーライブラリーである。

あなたが最大のパフォーマンスを得るためのキー(ハードウェアの外... GPUは良い提案がある)パッドに2の累乗にあなたの信号になります。 FFTW使用する場合は、最高のパフォーマンスを得るためにあなたの計画を作成する際に設定する「患者」を使用します。それはあなたの手でロールバックされますことをFFTWは(N.R.忘れる)を提供するものよりも高速な実装を非常に低いです。また、実前方1D FFTのバージョンではなく複雑なバージョンを使用するようにしてください。あなたができる場合にのみ、単一の(浮動小数点)の精度を使用します。

FFTWはあなたのためにそれをカットされていない場合、私はインテルの(非常に手頃な価格の)IPPライブラリーを見てしまいます。手には、さまざまなビット深度を持つ画像用に最適化されているインテル・プロセッサー向けにFFT年代にチューニングされています。

ポール・
CenterSpace のソフトウェア

他のヒント

あなたは、タグなどの画像処理を追加することもできます。

しかし、この記事では、ESP仮定した画像は、彼らがFFTを最適化し、どこにも見ることができ、電源または2である、興味深いかもしれません。私はあなたがして作られたいくつかの仮定を見ている記事は、それらのための方程式を最適化することを期待しています。

http://www.gamasutra.com/view/feature/3993 /sponsored_feature_implementation_.phpする

あなたがより速く移動したい場合は、実際に仕事をするためにGPUを使用したい場合があります。

あなたはGPUで行く場合は、

この本は、あなたのために役立つことがあります。 http://www.springerlink.com/content/kd6qm361pq8mmlx2/する

この答えは、この問題に関する進捗報告のフィードバックを収集することです。

編集10月11日:

私は測定の実行時間は、FFTの有効時間を反映するものではありません。私は私のプログラムが終了したとき、CPUは最大10秒のために42%までのシステム時刻にまだビジー状態であることに気づきました。 CPUは、私のプログラムを再起動する前に、バック0%になるまで私は待つとき、私は、GPUの処理から来15.35s実行時間を取得します。私はFFTのフィルタリングをコメントアウト場合、私は同じ時間を取得します。

FFTは、実際にはGPUその後、現在高速で、単純に競合するシステムタスクによって妨げられたので。私はこのシステムタスクが何であるかはまだわかりません。私はそれが私がそれをディスクに書き込む前に処理結果をコピーして、巨大なヒープブロックの割り当てから得られると思います。入力データのために私は、メモリ・マップを使用しています。

私は今、FFT処理時間の正確な測定値を得るために、私のコードを変更します。プロセスへのデータ転送をパイプラインによって、例えばのようなGPU処理を最適化する余地があるので、それはより速く作ることはまだ現実です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top