世界のスーパーコンピュータとそれを動かす人々


8月 4, 2021

エクサスケール・コンピューティングの鍵を握るLLVM

HPCwire Japan

Rob Farber

最近の新しいハードウェア技術の普及は、ハイパフォーマンス・コンピューティング(HPC)のコミュニティを活気づけ、国が近々導入を予定しているエクサスケール対応のスーパーコンピュータやデータセンターを提供する能力を生み出した。また、LLVMベースのコンパイラ技術は、これらの新しいシステムのデフォルトゲートキーパーとなっている。

 
   

LLVMは、オープンソースのコンパイラおよびツールチェーン技術の集合体であり、提案された並列化拡張機能(例:OpenMP 5.1の相互運用性指令)のテストベッドとして、また量産型の並列コンパイラの実装を提供する手段としての役割を果たしている。アルゴンヌ国立研究所の研究者であるJohannes Doerfertは、「LLVMは、すべてのプラットフォームで性能の高いOpenMPの実装を提供するための手段です[1]。OpenMP以外にも、LLVMは、OpenACCCUDASYCLHIPなど、他のプラグマベースの規格や並列プログラミングモデルにも恩恵を与えることができます。」

事実上、すべての主要なコンピューティング企業がLLVMに協力している。これは、LLVMコンパイラーインフラストラクチャを使用することで得られる多くのメリットの1つである。「HPCベンダーのコンパイラのほとんどがLLVMベースであることは、あまり知られていません。」とDoerfertは言う。「LLVMの改良と同様に、コラボレーションの改善は、ベンダー製品とHPCコミュニティ全体の両方に利益をもたらします。」と述べている。

HPCへの直接的なメリット

LLVM上に製品版コンパイラを構築することで、HPCコミュニティは拡張機能やバグフィックスを提供できるようになる。これにより、HPCコミュニティは、プログラム解析ツール、デバッガ、プロファイラなどのカスタムツールを構築する手段としてLLVMを利用することで、コンパイラに対するHPCのニーズに集中することができるのだ。LLVMは、米国エネルギー省(DOE)のエクサスケール・コンピューティング・プロジェクト(ECP)において、図1に示すように、関連するすべてのプロジェクトで重要な役割を果たしている。

図1.LLVMはエクサスケール・ソフトウェア・エコシステムにおいて重要な役割を果たしている。

LLVMにより、HPCはコンパイラをHPCのニーズに合わせることが可能になる

LLVMのライセンス条件は寛容であるため、HPCコミュニティは、LLVMコンパイラインフラストラクチャを使用したオープンソースソフトウェアの構築とリリースに多大なリソースを安全に投入することができる。これには、プロファイラ、並列コンパイラ、デバッガ、ドメイン固有言語(DSL)、新しいプログラミングモデルなどが含まれている。また、HPCコミュニティは、ベンダーにバグを提出してバグフィックスを待つというプロセスを踏む必要がないということでもある。代わりに、HPC開発者は修正プログラムを見つけて、オープンソースのコードベースに提出することができる。

HPCのためのFortran

ECPのFlangプロジェクトは、HPCコミュニティが重要なニーズ、すなわち並列化とGPU対応のFortranコンパイラの開発に焦点を当てることができる一つの例である。

FlangはFortranのフロントエンドで、並列化とバイナリ生成の仕事をLLVMインフラに移し、さまざまなHPCアーキテクチャ用のバイナリを生成することができる。このようなコンパイラは、現代のHPCシステムやデータセンターの基盤となる、電力効率に優れた新しいメニーコアの超並列ハードウェアプラットフォーム上でFortranアプリケーションを実行するために必要だ。Flangが重要なのは、商業的にはFortranはあまり重視されていないが、HPCでは効果的な並列化とGPU対応のFortranコンパイラが非常に求められているからである。複数のベンダーが提供するGPUは、来るべきエクサスケール・システムの重要なアーキテクチャ・コンポーネントだ。図2は、FlangのデザインがLLVMに依存していることを示している。

図2. FlangのデザインはLLVMに依存している。

多くの並列化とクロスプラットフォームの利点

並列化は難しく、クロスプラットフォームでの並列化はさらに困難だ。LLVMは、C/C++やFortranの並列化コンパイラを超える並列化コンパイラを作成するためのコンパイラ基盤を提供する。LLVMの並列化機能は、DSLがLLVMをサポートするプラットフォーム間で汎用性と性能を提供できることを意味している。

正しく決定論的なバイナリを生成するためのプログラムの支援

LLVMでは、量産可能なバイナリの生成を支援するために、コンパイラライタがサニタイザを使用することができる。「C++の世界では、サニタイザは、メモリ使用量やその他の異常な動作をチェックします。サニタイザは、ランタイム中にそのようなエラーを検出することができます。その結果、より堅牢なコードと徹底したクイックチェックが可能になり、正しい結果を保証するだけでなく、スーパーコンピュータセンターへの侵入の可能性を検知するのにも利用できるのです。」

もう一つの利点は、レースコンディションの検出だ。レースコンディションとは、並列処理の結果がイベントのタイミングに依存することである。その結果、アプリケーションはランタイム中に予測不可能な(非決定論的な)動作をすることになる。レースコンディションに起因するバグを発見し、修正することは非常に困難だ。LLVMベースのレース検出は非常に便利だ。

情報満載のプロファイラー

プロファイリングは、性能の高い並列コードを作成するためにも重要であり、特にコードが様々なハードウェア・プラットフォームで動作する場合には重要だ。オレゴン大学ニューロインフォマティクス・センターのパフォーマンス・リサーチ・ラボのディレクターであるSameer Shendeは次のように述べている。「TAUプロファイラは、すべてのCPUとGPUをサポートしており、MPIやKokkosなどの高レベルのパフォーマンス・ポータブル・ライブラリによるマルチノード・プロファイリングにも対応しています。また、すべてのベンダーのGPUをサポートしている数少ないツールの一つでもあります。TAU(Tuning and Analysis Utilizes)プロファイラは、Spackで簡単にインストールでき、E4S(Extreme-Scale Scientific Software Stack)で配布されています。TAUは、対象となるバックエンドのCUDA、ROCm、またはOneAPIのL0と一緒にインストールするだけです。」これにより、TAUとLLVMベースのプロファイリング・アプリケーション・プログラミング・インターフェース(API)は、性能の高いクロスプラットフォームのHPCアプリケーションを作成するための重要なツールとなっている。図3は、TAUプロファイリングシステムの概要を示したものである。

図3:TAUプロファイリングシステム TAUのプロファイリングシステム。(出典: https://www.alcf.anl.gov/sites/default/files/2020-05/CompWorkshop_TAU_2020.pdf))

 

TAUは、プロファイリングの「スイス・アーミー・ナイフ」と呼ばれ、LLVMのトレース機能とインスツルメンテーション機能を利用してプロファイル情報を生成する。LLVMから膨大な量のプロファイル情報を収集することができる。TAUチームは、並列分散コードの性能問題を発見するのに役立つ、意味のある表示を作成している。ParaProf解析ツールで生成された表示の例を図4に示す。特に、ParaProf は MPI 通信コールのプロファイル情報を表示できる。HPCの標準であるMPIライブラリは、多くのHPCアプリケーションのスケーリングとパフォーマンスを決定する通信を処理する。Shendeは、TAUを使えば、「アプリケーションのパフォーマンスを調査すべきコード領域や、最適化の努力を傾けるべき場所を確認することができます」と述べている。

図4. ParaProfビューの例によるTAU解析。

シノプシスのTAUサポート内容

  • オープンMP
    • OpenMP Tools Interface (OMPT) OpenMPの顕著なランタイムイベントを追跡するツールインターフェース
    • Opariソースリライタ
    • OMPTがサポートされていない場合のラッパーOpenMPランタイムライブラリのプリロード
  • OpenACC
    • OpenACCインスツルメンテーションAPI
    • ホストとデバイス間のデータ転送をトラッキング(変数単位
    • カーネルの使用時間を追跡
  • OpenCL
    • OpenCLプロファイリング・インターフェース
    • カーネルのタイミングをトラッキング
  • CUDA
    • CUDAプロファイリングツール・インターフェース
    • ホストとGPU間のデータ転送を追跡する
    • ホストとGPU間の統一された共有メモリへのアクセスを追跡。
  • ROCm
    • RocprofilerおよびRochracerインストルメンテーションインターフェイス
    • HIP LLVMコンパイラベースのインストルメンテーションサポート
    • ホストとGPU間のデータ転送およびカーネル実行の追跡
  • インテル oneAPI
    • コンパイラベースのインストルメンテーションとレベルゼロ・プロファイリングAPIを備えたインテル・コンパイラ
    • OpenCLプロファイリングAPI

まとめ

自由なライセンスと強力なベンダーサポートにより、LLVMはHPCコミュニティが多くのHPCコミュニティのニーズに対応するための優れた手段となっている。このことは、DOEのECPディレクターであるDoug Kotheが、「LLVMコンパイラ技術は、ベンダーとコミュニティのコンパイラ開発と進化の結節点になりつつある。」と考えていることにも反映されている[2]。

Rob Farberは、HPCおよび機械学習技術の開発に豊富な経験を持ち、国立研究所や商業組織で応用されているグローバルな技術コンサルタント兼作家である。

[1] https://www.exascaleproject.org/highlight/sollve-openmp-for-hpc-and-exascale/

[2] https://www.exascaleproject.org/highlight/sollve-openmp-for-hpc-and-exascale/