アクセラレータの主流にJavaの一撃を
Nicole Hemsoth
GPUや他のアクセラレータの利用が主流になると、主な障壁のひとつはプログラムの容易さである。 アクセラレータ周辺のベンダーコミュニティは、学習曲線を平坦に抑えているが、実際はその教育プロセスに乗り出す一般開発者の一部に特別な労力が求められることに変わりはない。
HPCスペースは、最も大きな規模でGPUとアクセラレータが大幅な性能改善を引き出すことが出来ることを実証し、そして、これらは確かに伝統的な高性能コンピューティング以外の企業にとって確かに魅力的である。ただ疑問が生じる。高速化のためのプログラミングに飛び込む際に、主流の開発者にどんな「好条件を提示する」ことが出来るだろうか?
或る研究者、ライス大学のMax Grossman、によると、 険しい学習曲線があり、高速化できるまでに暫く時間が掛かる。しかしその距離を縮める幾つかの注目すべきプロジェクトがある。 以下のインタビューではこれらの挑戦が詳述されている。-この若い研究者と彼のチームによる特にOpenCL/Javaの面で何がなされたのか- より高いレベルに高度なツールを持って行きたいと思う他の人には言及しない。
Grossmanは、幾つかのプラットフォーム(CPUやメニーコアGPUは、FPGAは、などから)に跨ってSIMDカーネルの互換性のある実行を可能にするためにOpenCLを使用することが可能にもかかわらず、JavaからOpenCLを使用することは危険な道筋であり、それは単純化に逆行すると言う。例えば、OpenCLカーネル言語でカーネルを書く等をする場合、データ転送を管理することを深く理解する必要がまだある。
これらの問題に取り組むために、彼らは、ベースとしてのOpenCLの自動生成を介して、Javaベースのプログラムを高速化するために幾つかのユニークなコンパイルとランタイム技術について協力した。 チームは説明したように、彼らがHJ-OpenCLと呼ぶアプローチは、次の事を含んでいる; OpenCLカーネルとHabanero-Java(HJ)言語で利用出来るparallel-forコンストラクタ(FORALL)からJNIグルーコードの自動生成;OpenCLのデバイス上の正方配列、多次元配列を効率的にサポートするためのHJの配列表示言語構成の利用;自動生成されたOpenCLのカーネル内の全対全バリア同期のためにHJのフェイザー(次)構造の実装。
チームがまとめたように:
「私たちは、私たちのアプローチを評価する10のJavaベンチマーク1組を使用して、ネイティブなOpenCLの実行と並列処理の両方に起因するパフォーマンスの改善を観測します。AMD APUについて、 4コアCPUのホスト上で実行した時に逐次型Javaと比較して36.7倍の性能向上を確認し、そして、統合されたGPU上で実行した場合、最大55.0倍でした。Intel Xeon CPUと後付けのNVIDIA Fermi GPUを搭載したシステムでは、逐次型Javaへの相対的な速度向上は、12コアCPUで35.7倍、そしてGPUで324.0倍でした。 さらに、私たちは、異なるアプリケーションが、JVMでの実行、OpenCLのCPU実行、およびOpenCLのGPU実行で最適に実行することを発見しました。 この作業に含まれる言語機能、コンパイラ拡張およびランタイム拡張機能は、全てのOpenCLプラットフォームを横断して、移植性、ラピッド・プロトタイピング、およびJVMアプリケーションの透過的な実行を可能にするものです。」
これらおよび他のアプローチに加えて、Grossmanは、ベンダーコミュニティはより広い分野の開発者により多くのハードウェアを提供することを含め、アクセラレータとの実験を発展させるために行うことができる幾つかのシンプルなことがあると言う。
このライス大学グループの研究の詳細は、ここ(http://pppj2013.dhbw.de/conference-pppj2013/program.html)を参照。