現在、C ++プログラムをCUDAコードに変換しており、プログラムの一部が高速フーリエ変換を実行しています。もともとFFTWを実行していましたが、カーネルで呼び出せないので、cufftを使ってその部分を書き直しましたが、同じことがわかります!
CUDAカーネル内で実行されるFFTはありますか?
__device__fftwライブラリに追加できますか?
ホストでFFTを初期化または呼び出す必要がないようにしたいと思います。gpuタイプの関数が存在する場合は、それを完全に使用したいと思います。
カーネルに組み込むことを検討している場合、一度に複数の FFT を実行しようとしているようです。cuFFT のバッチ処理機能について調べます。あなたのアプリケーションは何ですか?cufftPlanMany() は、さまざまなメモリ構成のバッチ FFT で機能します。
ホストからの起動を避ける必要がありますか? 最近の Nvidia のcufft ライブラリは非常に優れています。FFTW の移植はかなり難しい作業のようです。Kissfftの移植は簡単かもしれませんが、それでも簡単ではありません。
GPU カーネルから API を呼び出す方法はありません。ホストから呼び出す必要があります。DEVICE -> HOST -> DEVICE から渡さずに FFT を実行して詳細を続行する場合、唯一の解決策は、デバイス関数で FFT を実行するカーネルを作成することだと思います。実際にこれを行っているのは、データを HOST に再度渡すことなく、より多くの FFT を並行して実行する必要があるためです。別の解決策を見つけた/持っている場合は、お知らせください。