[論文レビュー] Architecture and performance of Devito, a system for automated stencil computation
Devito は、科学計算分野のステンシル計算をターゲットに、Python における高レベルの記号的 PDE 表現から、高度に最適化された C++ コードを自動生成するドメイン固有のコンパイラフレームワークである。共通部分式の削減、タイリング、並列化といった高度な最適化を実施することで、Intel Xeon や KNL プロセッサを含む現代のアーキテクチャ上で、手作業で最適化されたコードと同等の性能を達成している。
Stencil computations are a key part of many high-performance computing applications, such as image processing, convolutional neural networks, and finite-difference solvers for partial differential equations. Devito is a framework capable of generating highly-optimized code given symbolic equations expressed in Python, specialized in, but not limited to, affine (stencil) codes. The lowering process---from mathematical equations down to C++ code---is performed by the Devito compiler through a series of intermediate representations. Several performance optimizations are introduced, including advanced common sub-expressions elimination, tiling and parallelization. Some of these are obtained through well-established stencil optimizers, integrated in the back-end of the Devito compiler. The architecture of the Devito compiler, as well as the performance optimizations that are applied when generating code, are presented. The effectiveness of such performance optimizations is demonstrated using operators drawn from seismic imaging applications.
研究の動機と目的
- 科学計算におけるステンシルコードの手作業最適化の複雑さと保守負荷を軽減し、有限差分法を高レベルで指定できるようにすること。
- タイリング、ループレベルの並列化、共通部分式の削減といったパフォーマンスに重要な最適化を、複数の中間表現を持つコンパイラスタックによって自動化すること。
- モジュラーなコード生成とバックエンド統合により、CPU、GPU、多数コアシステムを含む多様な HPC プラットフォーム間でのパフォーマンスのポータビリティを実現すること。
- 標準的なステンシルパターンを超えた、複雑で不規則なループネストや高度な PDE モデル(例:異方性波動方程式)を扱えるようにすること。
- 科学計算エコシステムと統合された生産的で Python ベースのインターフェースを提供し、生産環境で使用可能な高パフォーマンスコードを生成すること。
提案手法
- Devito コンパイラは、記号的数学的表現を最適化された C++ コードに下げるために、多層構造の中間表現(IR)スタックを用いる。
- 高度な共通部分式の削減を用いて、浮動小数点演算を削減し、重複計算を排除する記号的変換を実施する。
- YASK ステントシルコンパイラやネイティブ C++ コード生成といった複数のバックエンドをサポートしており、CPU やアクセcelレータ間でのポータビリティを実現する。
- ジャストインタイム(JIT)コンパイルと動的コード生成を採用し、実行時に最適化を適用してカーネルを即時実行可能にする。
- ネストされた不規則なループを含む複雑なループ構造をサポートし、多様な PDE ベースのシミュレーションをモデル化可能にする。
- 既存の科学計算ソフトウェアスタックと統合されており、記号処理には SymPy、配列演算には NumPy を使用する。
実験結果
リサーチクエスチョン
- RQ1Python で記述された高レベルのドメイン固有言語が、手作業で最適化された実装と同等またはそれを上回るパフォーマンスを発揮するステンシル計算用の C++ コードを生成できるか?
- RQ2タイリング、ループ並列化、共通部分式の削減といった自動最適化は、多様な HPC アーキテクチャ上でどれほどパフォーマンス向上に効果的か?
- RQ3手動チューニングなしで、CPU、GPU、多数コアシステム間でのパフォーマンスのポータビリティをどれほど達成できるか?
- RQ4実際の科学的ワークロードにおいて、オンザフライでのコード生成と自動チューニングの実行時およびコンパイルオーバーヘッドはどの程度か?
- RQ5高次ステンシルや異方性媒質を含む、複雑な実世界の地震画像化演算子において、Devito はどの程度スケーリングし、パフォーマンスを発揮できるか?
主な発見
- Devito が生成するコードは、Intel Xeon や KNL プロセッサを含む最新アーキテクチャ上で、地震画像化演算子の実装を対象に、手作業最適化された実装と同等のパフォーマンスを達成している。
- skl8180 プラットフォームでは、複雑な高次 TTI 演算子のコード生成およびコンパイルに 7 秒未満で完了し、共有オブジェクトの読み込みと引数検証によるオーバーヘッドは無視できるほど小さい。
- パフォーマンス設定の自動チューニングは、skl8180 で 3 分、knl7250 で 15 分を要したが、これらコストは実行時の生産的利用にわたって均等に分散され、実際には許容可能な範囲である。
- yask バックエンドにおけるコンパイル時間はコアバックエンドと同等であり、性能特性も類似しているが、配列一時変数のような一部の機能はまだ未対応である。
- フレームワークは、複雑で不規則なループネストや、フルウェーブフォームインversionワークフローからのものも含む、異種の式に対しても最適化されたコードを正常に生成した。
- システムは強力なパフォーマンスポータビリティを示しており、異なるバックエンドやターゲットプラットフォーム間で、最適化の有効性が一貫している。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。