私は、NvidiaとAMDの両方のグラフィックカードでFFTを利用する必要があるプロジェクトに取り組んでいます。私は最初、両方で動作するライブラリを探しました(これは、OpenCLの方法だと思います)が、運がありませんでした。
誰かが私に、各ベンダーのFFT実装を使用して、プラットフォームに基づいて何をするかを選択するラッパーを作成する必要があると提案しました。AMDの実装は非常に簡単でしたが、その間は実際にNvidiaカードを使用しています(これは私の特定のアプリケーションにとってより重要なものです)。
私が見つけることができる唯一のNvidia実装は、CUFFTのものです。OpenCLからCUFFTライブラリを実際に使用する方法を知っている人はいますか?私が考えることができる唯一の方法は、OpenCLコードと一緒にいくつかのCUDAコードを用意することです。OpenCLバッファーをCUDAポインターとして使用することはできないことを読みました(NVIDIAのSDKテンプレートでOpenCLとCUDAを混在させようとしています)。代わりに、OpenCLカーネルを実行した後、バッファーをホストにコピーして戻し、CUDAメモリ転送ルーチンを使用してGPUにコピーして戻す必要がありますか?このアプローチは無意味なメモリ転送を伴うように思われるので、私は本当に好きではありません。OpenCLのCUFFTを使用できれば、このアプローチの方がはるかに好きです。