HarlanプロジェクトはGPGPUプログラミングの複雑さに挑戦
Alex Woodie

GPU(GPGPU)用の汎用アプリケーションを開発するために OpenCL や CUDA を使って低水準の開発をすることに疲れたHPC プログラマは、GPGPUアプリケーション開発における複雑さを隠蔽し、共通のエラーを取り除くように設計された新たな宣言にもとづくプログラミング言語であるHarlan プロジェクトに興味を持つかもしれない。
![]() |
GPUは、HPCシステムにおける計算能力を増強するために、ますます利用されている。従来のCPUアーキテクチャにNVIDIA Kepler またはIntel Xeron Phi コプロセッサカードを取り付けることによって、並列処理の性能を大幅に向上できる。しかし、X86 のプログラミングと比べて、異なるツールと技能を要するGPU プログラミングは難しいかもしれない。
Harlan のアイデアによれば、GPU の詳細を開発、最適化するために、泥沼の中で苦戦するのではなく、開発者は高水準のHPCプログラミングに集中できる。
インディアナ大学の博士候補であるエリック・ホーク氏は、Harlan のプロジェクトを推進している。2011年9月に開かれた並列計算に関する国際会議において、Harlan とその協力者が語ったところによれば、Harlan は、計算とCPU-GPU間通信を制御するために、宣言に基づく特定分野向け言語である。
Harlan の文法は、プログラミング言語Schemeをベースとしており、NVIDIA製CUDAの競争相手であるKhronosグループのOpenCLに準拠している。この言語は、データの配置、メモリの移動、スレッド処理、計算の制御について、「利用者が望む意味(セマンティックス)を直接的に表現する仕組み」を提供するために設計された。研究者らが論文で述べるところによれば、開発者は、実質的に、「何(what)」を宣言し、「どのように(how)」を考えなくても良い。
研究者らによれば、このアプローチの利点は、開発者にメモリ階層と計算粒度について少し複雑なことを考えてもらうことによって、GPUとCPUを組み合わせるハイブリッド・アプリケーションが可能なことである。
「Declarative Parallel Computing for GPUs」という論文によると、「それだけでなく、宣言に基づく言語は、GPUによる計算を指定するための抽象度を上げて、コンパイラがデータ移動とCPUとGPUの両方による同時処理を最適化できることにより、開発者が低水準のエラーを起こしやすく画一的で詳細なコードを書く必要をなくす。」ということだ。
それに加えて、ホーク氏と同僚は、分散メモリクラスタにおいて通信を制御するためのもうひとつの宣言に基づくプログラミング言語「Kanor」を開発している。ホーク氏の記述によると、Kanorは一般的なプログラミング言語とは異なる。適切であれば低水準の扱いを自動処理するし、さらに必要があればプログラマが通信のコードを手書きすることもできる。これによって、「宣言性、予測可能な性能および堅牢性のバランスをとることができる。」
Halanは生産性を向上させる。しかし、平均的なコーダがスーパーコーダになるわけではない。「我々がGPGPUまたはクラスタプログラミングを容易にする「銀の弾丸」すなわち「魔法のコンパイラ」を開発したのではないと、強調しておくことは重要である。」とホーク氏と同僚は記述している。
「むしろ、GPUあるいはクラスタプログラミング難しくする低水準の細かい事柄を抽象化しようとしている。それと同時に、データ配置と計算制御について、プログラマが高性能を追求できるようにもしている。」
HalanはMacOSとLinux上で動作する。Harlanは、GitHub (訳注:ソフトウェア開発のための共有ウェブサービス) に置かれて、5人が寄与している。