MITとCSAIL、ハードウェアアクセラレータ向けのプログラミング言語「Exo」を開発

マサチューセッツ工科大学(MIT)コンピュータ科学・人工知能研究所(CSAIL)の研究チームは、新しいプログラミング言語「Exo」を開発した。ハードウェアアクセラレータ向けの言語で、「Exocompilation」と呼ぶ新しいアイデアが主軸の言語だ。研究結果は「Programming Language Design and Implementation(PLDI) 2022」で発表された。

GPUやDSPといったアクセラレータは、CPUよりも桁違いの速さで特定のタスクを実行できる。多くのアプリケーションでアクセラレータと特別な命令を利用するため、高性能のカーネルライブラリは重要となる。多様で急速に進化するハードウェアをサポートするためにコンパイラを拡張するのは難しく、多くのライブラリでコーディングと最適化が手作業で行われている。

「これまで、多くの研究は特定のハードウェアに対してプロセスを自動で最適化することに着目してきた」と、論文の筆頭著者である五十嵐祐花氏は語る。このアプローチは多くのプログラマーにとってはありがたいのだが、パフォーマンスエンジニアにとってはコンパイラが邪魔になる場合がある。コンパイラの自動最適化は、効率が半減するなど誤った処理をした場合に修正する良策がないという。

Exoは領域特化型の言語で、例えば行列の積といったシンプルなプログラムを、同じ仕様でかなり高速で実行可能な非常に複雑なプログラムに変換する。また、カスタム命令、専用メモリ、アクセラレータ構成をユーザーライブラリで定義できる。

Exocompilationを使うことで、どの最適化を、いつ、どういう順番で使うかを、コンパイラではなくパフォーマンスエンジニアが責任をもって選ぶことになる。その代わりに、Exo側はすべての最適化が正しいことを保証する。これにより、エンジニアがコンパイラ相手に奮闘していた時間を、性能改善に割り当てられることが期待される。

もう1つの利点は、コンパイラ開発者を雇用しなくても良いことだ。従来、ハードウェアインタフェースの定義はコンパイラ開発者が管理してきた。多くのアクセラレータチップにおいてハードウェアインタフェースは独自仕様で、企業は特定のチップ用に変更されたコンパイラのフォーク(コピー)を保守する必要がある。Exoを使うと、パフォーマンスエンジニアが、コンパイルの修正なしに最適化したい新しいチップの記述ができる。

Exoを使った例として、手動で最適化したIntelの数学カーネルライブラリと同等性能のコードをすぐに作成できたと挙げた。研究チームは、並行プログラミングモデルのサポートなど、さらなる開発を予定している。

関連リンク

A programming language for hardware accelerators
The Exo Language

関連記事

アーカイブ

fabcross
meitec
next
メルマガ登録
ページ上部へ戻る