Exo言語 (The Exo Language) は領域特化型プログラミング言語である。

ハードウェアに近いレイヤのパフォーマンス・エンジニア向けで、計算内容を指定した非常に単純なプログラムを、繰り返し速く実行する非常に複雑なプログラムに変換できる。

他のプログラミング言語やコンパイラとは異なり、Exoはエキソコンパイル(Exocompilation)の概念に基づいて構築されている。[1] [2]

開発背景とエキソコンパイル[1] 編集

伝統的なコンパイラは、あるハードウェア上で動作するようにプログラムを自動的に最適化するように作られており、多くのプログラマーにとって素晴らしい。だが、パフォーマンス・エンジニアにとっては、コンパイラは助けになるのと同じくらい邪魔になることも多い。コンパイラによる最適化は完全に自動で行われるため、間違った処理をした場合、修正する良い手段が用意されていない。

そして2022年現在作られている最高性能のハードウェア(GoogleのTPU、AppleのNeural Engine、NvidiaのTensor Coreなど)は、科学計算や機械学習の主要カーネル(例えば、基本線形代数サブルーチン(BLAS)ライブラリなど)を駆動する。これらのチップは、設計に何百人ものエンジニアを要するため、アプリケーション開発者にとっては、これらのカーネルが可能にする程度の性能しか発揮しない。

エキソコンパイルでは、パフォーマンス・エンジニアに最適化の手段を提供する。

どの最適化を、いつ、どのような順番で適用するかを選択する責任は、コンパイラからパフォーマンス・エンジニアに委ねられる。これにより、エンジニアはコンパイラと格闘したり、すべてを手作業で行うといった無駄な時間を過ごす必要がなくなる。同時に、Exoは、これらの最適化がすべて正しいことを保証する責任を負う。その結果、パフォーマンス・エンジニアは、複雑で最適化されたコードをデバッグするよりも、パフォーマンスの向上に時間を費やすことができる。

エクソコンパイルのもう一つの重要な部分は、パフォーマンス・エンジニアがコンパイラを修正することなく、最適化したい新しいチップを記述できることにある。従来、ハードウェアインターフェイスの定義は、コンパイラの開発者によって維持されてきた。しかし、ほとんどの新しいアクセラレータチップでは、ハードウェアインタフェースは独自仕様となっている。また、汎用チップに比べて変更頻度も高い。現状では、従来のコンパイラを自社専用のチップに対応するように修正した、独自のフォークを維持しなければならない。そのため、パフォーマンスエンジニアに加えて、コンパイラ開発者のチームを雇用する必要があった。

実績 編集

Exo を使って、インテルの手作業で最適化された数学カーネル・ライブラリと同等の性能を持つコードを迅速に記述できることを示された。また、カリフォルニア大学バークレー校は、オープンソースの機械学習アクセラレータであるGEMMINI向けのコードを作成するための共同作業を継続している。

脚注 編集

  1. ^ a b The Exo Language” (英語). The Exo Language. 2022年7月16日閲覧。
  2. ^ Ikarashi, Yuka; Bernstein, Gilbert Louis; Reinking, Alex; Genc, Hasan; Ragan-Kelley, Jonathan (2022-06-09). “Exocompilation for productive programming of hardware accelerators”. Proceedings of the 43rd ACM SIGPLAN International Conference on Programming Language Design and Implementation (New York, NY, USA: Association for Computing Machinery): 703–718. doi:10.1145/3519939.3523446. ISBN 978-1-4503-9265-5. https://doi.org/10.1145/3519939.3523446.