3

私のアプリケーションでは、画像の各行を変換し、フィルターを適用して元に戻す必要があります。

GPUを使って同時に複数のFFTを作れるようにしたい。より正確には、NVIDIA の CUDA を使用しています。さて、いくつかの考慮事項:

  1. CUDA の FFT ライブラリである CUFFT は、ホストからのみ呼び出しを行うことができます ( https://devtalk.nvidia.com/default/topic/523177/cufft-device-callable-library/ )。
  2. このトピック ( GPU で FFTW を実行する場合と CUFFT を使用する場合) について、Robert Corvella は次のように述べています。

    「cufft ルーチンは、複数のホスト スレッドから呼び出すことができます」。

このすべての FFT を並行して実行するとパフォーマンスが向上すると信じていましたが、Robert は次のようにコメントしています。

「FFT操作のサイズはかなり大きいため、示されているようにカフトライブラリルーチンを呼び出すだけで、速度が向上し、マシンをほぼ完全に利用できるはずです」

それで、これですか?一度に複数の FFT を実行してもメリットはありませんか?

デバイスからの呼び出しをサポートするライブラリはありますか?

代わりに cufftPlanMany() を使用する必要があります (ハングによる「is-there-a-method-of-fft-that-will-run-inside-cuda-kernel」で参照されているか、Robert による前のトピックで参照されているように) ?

または、複数のホスト スレッドを呼び出すのが最善の方法ですか?

(この 2 リンク制限は私を殺している...)

多くの人が同様の状況に直面しているため、私の目的は、この問題に対する最善の解決策について議論することです。NVIDIA が CUFFT でデバイス呼び出しを実装すると、これは廃止される可能性があります。(彼らが取り組んでいると述べたものですが、リリースの予定日はありません - NVIDIA フォーラムでの議論で述べられたもの (最初のリンク))

4

1 に答える 1

2

それで、これですか?一度に複数の FFT を実行してもメリットはありませんか?

個々の FFT がデバイスを十分に活用するのに十分な大きさである場合、一度に複数の FFT を実行してもメリットはありません。コピーとコンピューティングのオーバーラップなどの標準的な方法を使用して、マシンのパフォーマンスを最大限に引き出すことができます。

FFT が小さい場合、バッチ プランは最大のパフォーマンスを得る良い方法です。このルートに進む場合は、API がいくつか改善されているため、CUDA 5.5 を使用することをお勧めします。

デバイスからの呼び出しをサポートするライブラリはありますか?

cuFFT ライブラリは、デバイス コードから呼び出して使用することはできません。

もちろん、ArrayFire など、他にも CUDA ライブラリがありますが、これには私がよく知らないオプションが含まれている可能性があります。

代わりに cufftPlanMany() を使用する必要があります (ハングによる「is-there-a-method-of-fft-that-will-run-inside-cuda-kernel」で参照されているか、Robert による前のトピックで参照されているように) ? または、複数のホスト スレッドを呼び出すのが最善の方法ですか?

バッチ プランは、複数のホスト スレッドよりも優先されます。API はその方法でリソース管理のより良い仕事を行うことができ、何が可能かについて (CUDA 5.5 のリソース推定関数などを通じて) API レベルの可視性を高めることができます。

于 2013-08-09T11:16:42.330 に答える