[論文レビュー] Strategy Preserving Compilation for Parallel Functional Code
本論文は、新しいダイアレクトであるデータ並列型理想化アルゴール(DPIA)を用いて、高水準な関数型コードから低水準なデータレースフリーな並列命令型コードへの形式的で戦略を保全するコンパイルパイプラインを提示する。このアプローチは、データレースフリーを保証する部分構造型システムを活用することで正しさとパフォーマンスのポータビリティを確保し、手で最適化されたOpenCLコードと同等のパフォーマンスを達成しながら、関数型リライトシステムから得られる意図された並列化戦略を保持する。
Graphics Processing Units (GPUs) and other parallel devices are widely available and have the potential for accelerating a wide class of algorithms. However, expert programming skills are required to achieving maximum performance. hese devices expose low-level hardware details through imperative programming interfaces where programmers explicity encode device-specific optimisation strategies. This inevitably results in non-performance-portable programs delivering suboptimal performance on other devices. Functional programming models have recently seen a renaissance in the systems community as they offer possible solutions for tackling the performance portability challenge. Recent work has shown how to automatically choose high-performance parallelisation strategies for a wide range of hardware architectures encoded in a functional representation. However, the translation of such functional representations to the imperative program expected by the hardware interface is typically performed ad hoc with no correctness guarantees and no guarantees to preserve the intended parallelisation strategy. In this paper, we present a formalised strategy-preserving translation from high-level functional code to low-level data race free parallel imperative code. This translation is formulated and proved correct within a language we call Data Parallel Idealised Algol (DPIA), a dialect of Reynolds' Idealised Algol. Performance results on GPUs and a multicore CPU show that the formalised translation process generates low-level code with performance on a par with code generated from ad hoc approaches.
研究の動機と目的
- 並列関数型プログラミングにおけるパフォーマンスのポータビリティ問題に対処すること。これは、高性能を達成するためには手で最適化された命令型コードが必要であるが、そのコードは異なるデバイス間でポータブルではないためである。
- 高水準な関数型抽象化と低水準な命令型コード生成の間のギャップを埋めること。現在のところ、このギャップには正しさの保証と戦略の保全が欠けている。
- 関数型コードからデータレースフリーな命令型コードへの翻訳を形式的に定式化し、意図された並列化戦略を保全することで、正しさとパフォーマンスのポータビリティを確保すること。
- 形式的に検証されたコンパイルパイプラインが、特殊に最適化されたアドホックなOpenCL実装と同等のパフォーマンスを達成できることを示すこと。
提案手法
- レーモイズの理想化アルゴールの亜種として、干渉を制御する部分構造型の、DPIA(データ並列型理想化アルゴール)を導入し、関数型と命令型プログラミングを強力な安全保証とともに統合する。
- レーモイズの研究にインspiredされた、干渉を制御する型システムを用いて、生成された命令型コードにおけるデータレースフリー性を保証する。
- DPIA内での関数型コードから命令型コードへの、意味論的および戦略的保全の翻訳を形式化し、OpenCLへの体系的コンパイルを可能にする。
- 既存の関数型リライトシステム(例:Steuwerら 2015)を活用して、コンパイルの前段階で高性能な並列化戦略を自動的に探索・選択する。
- 得られた命令型DPIAコードを直接Cに類似したOpenCLコードにマッピングし、明確で予測可能なコンパイルパスを保証する。
- 関係的パラメトリシティおよびオートマトン理論的モデルを用いて、コンパイルプロセスの正しさと非干渉性の性質を形式的に検証する。
実験結果
リサーチクエスチョン
- RQ1高水準な関数型コードから低水準な命令型コードに翻訳する形式的コンパイルパイプラインは、意図された並列化戦略を保全できるか?
- RQ2関数型抽象化から出発して、多様なアーキテクチャにわたって高いパフォーマンスを維持しつつ、データレースフリーな命令型コードを生成することは可能か?
- RQ3形式的に検証されたコンパイルプロセスは、手で最適化されたアドホックなOpenCL実装と同等のパフォーマンスを達成できるか?
- RQ4関数型と非純粋な言語であるDPIAのような言語において、部分構造型型システムが並列コード生成におけるデータレースフリー性を効果的に強制できるか?
主な発見
- 関数型から命令型コードへの形式化されたコンパイルパイプラインは、意図された並列化戦略を保全しており、関数型レベルでの最適化選択が生成された低水準コードに忠実に反映されることを保証する。
- DPIAにおける部分構造型型システムのおかげで、生成された命令型コードは形式的にデータレースフリーであるため、強力な正しさの保証が得られる。
- GPUおよびマルチコアCPUにおけるパフォーマンス評価では、生成されたコードが手で最適化されたOpenCLコードと同等のパフォーマンスを達成しており、形式的検証に起因する顕著なオーバーヘッドがないことが示された。
- 本アプローチにより、自動戦略探索技術(例:Steuwerら 2015)を形式的に正しいコンパイルパイプラインで再利用でき、ポータビリティと信頼性の両方を向上させることができる。
- 形式的なフレームワークは、予測可能で合成可能なコンパイルを可能とし、GPUにとどまらずFPGAやマルチコアシステムを含む異種アーキテクチャに対しても適している。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。