GPGPU プログラミング専用の高レベル ライブラリが多数あります。それらは CUDA や OpenCL に依存しているため、賢明に選択する必要があります (CUDA ベースのプログラムは、gpuocelotなどのプロジェクトで前処理ステップを経ない限り、AMD の GPU では実行されません)。
CUDA
NVIDIA のWeb サイトで、CUDA ライブラリの例をいくつか見つけることができます。
Thrust は、C++ 標準テンプレート ライブラリ (STL) に似た並列アルゴリズム ライブラリです。Thrust の高レベル インターフェイスは、GPU とマルチコア CPU 間のパフォーマンスの移植性を可能にしながら、プログラマーの生産性を大幅に向上させます。確立されたテクノロジ (CUDA、TBB、OpenMP など) との相互運用性により、既存のソフトウェアとの統合が容易になります。
@Ashwinが指摘したように、Thrust の STL に似た構文により、CUDA プログラムを開発する際に広く選択されたライブラリになります。例をざっと見てみると、このライブラリを使用することに決めた場合に作成するコードの種類がわかります。NVIDIA の Web サイトでは、このライブラリの主な機能が紹介されています。ビデオ プレゼンテーション(GTC 2012 から)も利用できます。
CUB は、CUDA プログラミング モードのすべてのレイヤーに最先端の再利用可能なソフトウェア コンポーネントを提供します。これは、CUDA カーネル プログラミング用の協調スレッドブロック プリミティブおよびその他のユーティリティの柔軟なライブラリです。
並列ソート、プレフィックススキャン、リダクション、ヒストグラムなど、デバイス全体、ブロック全体、およびワープ全体の並列プリミティブを提供します。
これはオープンソースであり、GitHubで入手できます。実装の観点からは高レベルではありません (CUDA カーネルで開発します) が、高レベルのアルゴリズムとルーチンを提供します。
- mshadow : C++/CUDA の軽量 CPU/GPU マトリックス/テンソル テンプレート ライブラリ。
このライブラリは主に機械学習に使用され、式テンプレートに依存しています。
Eigen 3.3 から、CUDA カーネル内で Eigen のオブジェクトとアルゴリズムを使用できるようになりました。ただし、CUDA カーネル内で動的割り当てがトリガーされないようにするために、機能のサブセットのみがサポートされています。
OpenCL
OpenCLは異種プラットフォーム (マルチコア CPU、GPU など) をサポートするため、GPGPU コンピューティング以上のことを行うことに注意してください。
- OpenACC : このプロジェクトは、GPGPU に OpenMP のようなサポートを提供します。プログラミングの大部分は、コンパイラとランタイム API によって暗黙的に行われます。サンプルコードは Web サイトで見つけることができます
OpenACC アプリケーション プログラム インターフェイスは、ホスト CPU から接続されたアクセラレータにオフロードされる標準 C、C++、および Fortran のコードのループと領域を指定するコンパイラ ディレクティブのコレクションを記述し、オペレーティング システム、ホスト CPU、およびアクセラレータ間の移植性を提供します。
- Bolt : STL に似たインターフェースを備えたオープンソース ライブラリ。
Bolt は、異種コンピューティング用に最適化された C++ テンプレート ライブラリです。Bolt は、scan、reduce、transform、sort などの一般的なアルゴリズムの高性能ライブラリ実装を提供するように設計されています。Bolt インターフェイスは、C++ 標準テンプレート ライブラリ (STL) をモデルにしています。STL に精通している開発者は、Bolt API とカスタマイズ手法の多くを認識するでしょう。
CUDA + OpenCL
- ArrayFireは、オープンソースの (以前はプロプライエタリであった) GPGPU プログラミング ライブラリです。最初は CUDA をターゲットにしていましたが、現在は OpenCL もサポートしています。オンラインで入手可能な例を確認NVIDIA の Web サイトには、主要な機能の概要がよくまとめられています。
補足情報
これは実際にはこの質問の範囲内ではありませんが、他のプログラミング言語にも同様のサポートがあります。
線形代数 (たとえば) やその他の特定の操作を行う必要がある場合は、CUDA および OpenCL 用の専用数学ライブラリも利用できます (例: ViennaCL、CUBLAS、MAGMAなど)。
また、これらのライブラリを使用しても、非常に特殊な計算を行う必要がある場合、低レベルの操作を実行できなくなるわけではないことに注意してください。
最後に、C++ 標準ライブラリの将来について言及できます。並列処理のサポートを追加するための広範な作業が行われました。これはまだ技術仕様であり、GPU について明確に言及されているわけではありません (Thrust の開発者である NVIDIA の Jared Hoberock が直接関与していますが) が、これを実現する意志は間違いなくそこにあります。