2012-07-03 19 views
8

私は、NvidiaとAMDグラフィックカードの両方でFFTを使用する必要のあるプロジェクトに取り組んでいます。私は最初に両方で動作するライブラリを探しましたが(これはOpenCLの方法だと思っていますが)私は運がなかったのです。NvidiaとAMDハードウェアのOpenCL FFT?

誰かが、各ベンダーのFFT実装を使用し、プラットフォームに基づいて何をすべきかを選択したラッパーを作成する必要があると私に示唆してくれました。私はかなり簡単にAMDの実装を見つけましたが、その間にNvidiaカードで実際に作業しています(これは私の特定のアプリケーションではより重要なものです)。

私が見つけることができる唯一のNvidiaの実装はCUFFTです。 OpenCLのCUFFTライブラリを実際にどのように使用できるかは誰にも分かりますか?私が考えることができる唯一の方法は、私のOpenCLコードと一緒にいくつかのCUDAコードを持つことです。私はCUDAポインタ(Trying to mix in OpenCL with CUDA in NVIDIA's SDK template)としてOpenCLバッファを使うことはできないということを読んだ。代わりに、OpenCLカーネルを実行した後でバッファをホストにコピーしてから、CUDAメモリ転送ルーチンを使用してGPUにコピーし直す必要がありますか?無意味なメモリ転送を含むように見えるので、私はこのアプローチが本当に好きではありません。私はOpenCLからCUFFTを使うだけでいいです。

+0

現在、ViennaCLには「実験的な」FFT実装が含まれています。少なくともパワー2の変換では、それは合理的に実行する必要があります。 – talonmies

答えて

6

NVIDIAは、FFTなどのOpenCLライブラリをサポートするための作業を行っていません。また、CUDAライブラリにソースも提供していないため、OpenCLを使用してソースを実行する方法はありません。

AMDのFFTライブラリは、NVIDIAのGPUを含む他のOpenCL対応デバイス上で実行することをお勧めします。 ArrayFire OpenCLはAMDのFFTライブラリを活用しており、私たちのラボでは、Intel、NVIDIA、およびAMDデバイスで実行しています。

1

ベンのAMDの提案に加えて、Apple FFTサンプルコードを調べることもできます。ただし、それらのコードは、提供されたコマンドキューが作成されたデバイスタイプを確認するときにGPUデバイスでのみ実行されます。

0

SHOC benchmark on githubには、nvidia GPU 650M、intel gpu、およびIntel CPU for FFTでテストしたコードも含まれています。ウィンドウを開くとプロジェクトを作成してインクルードとリンクのパスを設定するのに数分かかりますが、それは簡単でした。 Intel gpu上で実行するには、コマンドラインオプションを設定するか、または小さなコード変更を設定する必要があります。これは、Intel gpuがデバイス1ではなくデバイス1であり、これはshocベンチマークスイートのデフォルトです。

私は出力の正確さを検証せず、コンパイルして完了するまで実行しました。