9

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

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

私が見つけることができる唯一のNvidia実装は、CUFFTのものです。OpenCLからCUFFTライブラリを実際に使用する方法を知っている人はいますか?私が考えることができる唯一の方法は、OpenCLコードと一緒にいくつかのCUDAコードを用意することです。OpenCLバッファーをCUDAポインターとして使用することはできないことを読みました(NVIDIAのSDKテンプレートでOpenCLとCUDAを混在させようとしています)。代わりに、OpenCLカーネルを実行した後、バッファーをホストにコピーして戻し、CUDAメモリ転送ルーチンを使用してGPUにコピーして戻す必要がありますか?このアプローチは無意味なメモリ転送を伴うように思われるので、私は本当に好きではありません。OpenCLのCUFFTを使用できれば、このアプローチの方がはるかに好きです。

4

3 に答える 3

6

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

AMDのFFTライブラリは最善の策であり、NVIDIAのGPUを含む他のOpenCL準拠のデバイスで実行されます。 ArrayFire OpenCLはAMDのFFTライブラリを活用しており、私はラボのIntel、NVIDIA、およびAMDデバイスでそれを実行しました。

于 2012-07-03T14:50:59.770 に答える
1

ベンのAMD提案に加えて、AppleFFTサンプルコードを調査することもできます。ただし、提供されたコマンドキューが作成されたデバイスタイプをチェックするため、コードはGPUデバイスでのみ実行されます。

于 2012-07-05T11:41:59.753 に答える
0

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

出力の正確性は確認しませんでしたが、コンパイルして実行したことだけを確認しました。

于 2014-03-15T21:04:01.987 に答える