プログラミング言語Harlanは最近、Eric Holk氏が発表した言語で、リッチなデータ構造をサポートしたGPU向けのプログラミング言語だ。Mac OS X 10.6, 10.7, 10.8とLinux系のOSで動作する。
Harlanを動かすには、Intel OpenCL SDK、NVIDIA CUDA Toolkit、AMD Accelerated Parallel Processing (APP) SDKのようなOpenCLの実装に加え、Petite Chez Schemeが必要だ。さらに、間もなく高階関数もサポートされる予定だ。
InfoQはインディアナ大学の博士課程の学生でもあるEric Holk氏にこのプログラミング言語Harlanについて話を聞いた。
InfoQ: Harlanでアプリケーションを構築するための基本的な要件を教えてください。
Harlanはさまざまなハードウエアで動くように設計されています。Harlanで書かれたアプリケーションはOpenCLの実装が搭載されているマシンでならどれでも動くはずです。コンパイラ自体はChez Schemeで書かれていますので、Petite Chez Schemeも必要です。動作要件はなるべく最小になるように努力しています。簡単に試せるようにしたいからです。
InfoQ: Harlanを使って開発できるアプリケーションの種類を教えてください。
Harlanは汎用のデータ並列コンピューティング言語なので、さまざまな種類のアプリケーション開発に利用できます。カスタムのデータ型やファーストクラスプロシージャのような高レベルなプログラミング機能を提供します。このような機能はGPU向けの既存のプログラミング言語では一般的ではありません。
コンパイラの書き手として、私は特にHarlanを使ってプログラム分析処理を高速化をすることに興味があります。ベンチマークの結果を見れば、Harlanは従来の科学アプリケーションに向いています。この言語の機能は従来のグラフ分析やレイトレーシングなど既存のGPUアプリケーションに対するサポートはそれほど強くありません。
InfoQ: Windows 7と8とは互換性がありますか。
現時点ではありません。とはいえ、Windowsに対応するのはそれほど大変ではありません。ほとんどのコードは移植できます。必要なのは少しランタイムシステムを変更する必要があるだけです。
InfoQ: Harlanはどのようにグラフィックの描画に役に立ちますか。
Harlanはグラフィックに特化するのではなく、汎用の計算に注力しています。とはいえ、GPU上で動作するプログラムやグラフィック処理もHarlanで書くことができます。
InfoQ: Hello Worldを書くにはどうすればいいですか。
次のプログラムを見てください。
(module
(define (main)
(println "Hello, World!")
(return 0))) >
しかし、これは面白い例ではありません。Harlanの並列処理の機能を示していませんから。次の例では、2つのベクタ間のドット積を計算しています。
(module
(define (main)
(let ((X (vector 1 2 3 4))
(Y (vector 4 3 2 1)))
(let ((dot (reduce + (kernel ((x X) (y Y))
(* x y)))))
(println dot)
(return 0)))))
(vector 1 2 3 4)と(vector 4 3 2 1)の代わりに違う式を使うことでベクタを長くすることもできます。
InfoQ: HarlanはNVidiaやATI GPUを含むすべての主要な特徴をサポートしますか。
HarlanはOpenCLへコンパイルされます。OpenCLは多くのGPUやCPU、その他のアクセラレータをサポートする汎用的な計算レイヤです。したがって、最新の機能はサポートしていません。例えば、CUDAの新しい動的並列機能は現時点ではサポートしていません。このような機能は何度も変更されると思います。また、GPU上の異なるメモリを積極的に利用することもしていません。しかし、この点は将来探求してみたいと思っています。