scan()
通常の並列プリミティブ (例: 、 、reduce()
、map()
および)を必要とする信号処理コードを、FFT の効率的なルーチンと、主成分分析sort()
などをサポートするための密なベクトル/行列操作を作成することを検討しています。固有値。逆行列と乗算もたくさんあります。ホスト コードは C++11 になります。
OpenCL を使用してプラットフォームにとらわれないようにしたいのですが、数日間の実験では、ツールの成熟度に自信が持てません。プログラミング モデルとプリミティブに関してはBoost.Computeが好きですが、 clMAGMAのような LAPACK ライブラリや FFT ライブラリFFTclが、データ型、共有コンテキスト、および非同期操作に関してうまく機能するかどうかはわかりません。また、clMAGMA の最後の更新が 2 年前であることも確認しています。
ViennaCLは FFT といくつかの行列演算をカバーしていますが、LAPACK には役立ちません。VEXclはスパース ベクトル/マトリックス専用です。
CUDA を使えば、これは難しいことではないように思えます。Nvidia の開発ツールをインストールして実行してください。最新のライブラリはすべてそこにあり、さらに、必要になる可能性のある他のものをカバーするNPPのようなものがあります。ライブラリ間の非互換性のリスクはあまり見られません。
他の誰かが OpenCL でこのルートに行ったことがあるかどうか、私は興味があります。そうしたいのですが、CUDA を使用するよりもリスクが高いと感じています。CUDA を使用すると、予期しない障害に遭遇する可能性がはるかに低くなります。