[論文レビュー] OCCA: A unified approach to multi-threading languages
OCCAは、ランタイムコンパイルとマクロ拡張を用いてOpenMP、OpenCL、CUDAを1つのカーネル言語に統合することで、ポータブルで高性能な並列計算を可能にするC++ライブラリである。開発者は、CPU、GPU、Intel Xeon Phiのような多様なアーキテクチャで高いパフォーマンスを発揮する、ポータブルなカーネルを記述できる。
The inability to predict lasting languages and architectures led us to develop OCCA, a C++ library focused on host-device interaction. Using run-time compilation and macro expansions, the result is a novel single kernel language that expands to multiple threading languages. Currently, OCCA supports device kernel expansions for the OpenMP, OpenCL, and CUDA platforms. Computational results using finite difference, spectral element and discontinuous Galerkin methods show OCCA delivers portable high performance in different architectures and platforms.
研究の動機と目的
- 異種並列コンピューティングにおけるアーキテクチャ的・言語的分断の課題に対処すること。
- NVIDIA GPU、AMD GPU、Intel Xeon Phiなどの複数のアクセラレータに跨るポータブルコードを可能にすることで、ベンダーロックインを回避すること。
- 低レベルのスレービングの違いを抽象化しながらもパフォーマンスを維持する統一プログラミングモデルを提供すること。
- 有限差分法、スペクトル要素法、不連続ガレルキン法のような高性能な数値法を、ポータブルなカーネル生成によってサポートすること。
提案手法
- OCCAは、ランタイムコンパイルとC++マクロ拡張を用いて、1つのソースカーネルからプラットフォーム固有のカーネルを生成する。
- OpenMP、OpenCL、CUDAの同等構造にマッピングされるキーワードを備えた統一カーネル言語を導入する。
- スレッドおよびブロックインデックス、メモリ属性、同期プリミティブのための、プラットフォームに依存しない抽象化を提供する。
- プラットフォーム固有のマクロ拡張を通じて、CPU、GPU、Xeon Phiでのカーネルコンパイルおよび実行をサポートする。
- 共有メモリ、グローバルメモリ、定数メモリ、プライベートメモリ、バリア、メモリフェンスのキーワードを含む。
- 一貫したインターフェースを通じて、異なるスレービングモデル向けの自動コード生成を可能にし、移植作業を軽減する。
実験結果
リサーチクエスチョン
- RQ1OpenMP、OpenCL、CUDAのような複数の並列プログラミングモデルにまたがる、1つのカーネル言語をどのように統合できるか?
- RQ2CPU、GPU、Xeon Phiを含む多様なハードウェアアーキテクチャに跨る、高性能でポータブルなコード生成を可能にするメカニズムは何か?
- RQ3マクロベースのランタイムコンパイルは、複数の並列バックエンドをサポートする際の保守負荷をどの程度軽減できるか?
- RQ4OCCAの抽象化レイヤーは、CUDAやOpenCLの手で最適化されたカーネルと比較して、パフォーマンスをどの程度維持できるか?
- RQ5OCCAは、異種プラットフォームに跨る、不連続ガレルキン法やスペクトル要素法のような複雑な数値法を効果的にサポートできるか?
主な発見
- OCCAは、OpenMP、OpenCL、CUDAにコンパイル可能なポータブルカーネルを効果的に生成し、異種アーキテクチャへのデプロイを可能にした。
- 複数のプラットフォームで、有限差分法、スペクトル要素法、不連続ガレルキン法において高いパフォーマンスを達成した。
- ランタイムコンパイルとマクロ拡張により、コードの重複を伴わずに、1つのカーネルソースから複数のスレービングバックエンドをターゲットにできる。
- OpenMP、OpenCL、CUDAのネイティブ構造にマッピングされるOCCAキーワードを通じて、プラットフォーム固有の最適化をサポートする。
- スレッドインデックス、メモリ属性、同期のための統一キーワードの使用により、移植の複雑さが低減した。
- OCCAは、低レベルのスレービングの違いを抽象化しながらも、メモリと実行の低レベル制御を維持することで、パフォーマンスポータブルな科学的コンピューティングを実現した。
より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。