X10の予習

4/28にX10開発者の一人である Vijay Saraswat氏が早稲田に講義にやってくる。
http://phase.hpcc.jp/phase/swopp-announce/archives/msg03467.html
というわけで、英語の講義を聞いても内容が理解できない恐れがあるので,少し予習した。

Charles, Donawa, Ebcioglu, Grothoff, Kielstra, von Praun, Saraswat, Sarkar. X10 An Object-oriented approach to non-uniform Clustered Computing. OOPSLA 2005.

が一番長い論文みたいなので、これを読んだ。

X10ってなに?

X10アメリIBMで開発・研究がされているは並列・分散環境での高速な動作と、高生産性を得ることを目的とした言語だ。X10はJavaを拡張して作られており、逐次的な部分の記法や意味はJavaとほぼ同じだ。

目標は?

  • 安全性(Safety)
    • ポインタエラーとかやだ
    • 生産性のため
  • 解析可能性(Analyzability)
  • スケーラビリティ(Scalability)
    • 言語が様々な環境に対してスケーラブルな機能を持つ
    • 無理な最適化は必要ないよ(手動のループ展開とか)
  • 柔軟性(Flexibility)
    • 様々な並列プログラミングモデルの基礎になるよ

で、うまいことバランスをとるとのこと。

並列・分散へのアプローチ

並列・分散に対しX10では言語レベルでのアプローチを取っている。そのため、X10では言語自体に並列・分散の為の機能が備わっている。他のアプローチとしては、ライブラリを使うものや、コメントディレクティブで指定するものがある。簡単に表にするとこのようになる。

アプローチ 言語/ライブラリなど
言語 X10, Split-C, CILK, HPF, Co-Array Fortran, Titanium, UPC, ZPL, Chapel, Fortress
ライブラリ SHMEM, MPI, PVM
コメント OpenMP

型をがんばっている

もちろん、JavaベースなのでJavaと同じような型システムがある。でも、それに加えて(一部では)デッドロックが起きないように型検査で保証しているようだし、配列の形に対して依存型が使えるみたいだ。

placeによるPGAS(Partitioned Global Address Space)

PGASとは、メモリ空間が特定のスレッドと結びついているモデルらしい。共有メモリモデルではメモリ空間は一様だが、それに局所性を持たせた感じだ。
メモリ空間が一様の共有メモリモデルを使うと、深刻なスケーラビリティの問題が出てくるので、X10ではplaceというのを使ってPGASモデルを導入している。placeによってデータの局所性を明示的に扱う事によって、生産性を多少犠牲にして性能を取っているのだ。

非同期に実行される activity

activityは並行に実行される計算プロセスの事で、必ずいずれかのplaceに属している。属しているplaceは変わることはない。activityを作るには、asyncを使う。

async (P) {
  // A
}

Aに書いたコードは、新しいactivityとしてplace Pで実行される。他にも、foreach, ateachで並行のイテレーションができて、activityが各イテレーションの度に作ることができたりする。

activityは同じplaceにあるデータにしかアクセスできないので、異なるplaceにあるデータにアクセスしたい場合にはそのplaceで新しくactivityを作り、データの変更したり、値を返させたりする。値を返すときにはFutureを使う。

同期の機能 Clocks, Atomic Blocks

ClockとAtomic Blockはいずれも、同一のplaceにあるactivityの同期に関するを行う機能だ。
Clockはバリアのようなもので、特定の位置でactivityを待ち合わせる事ができる。Atomic Blockは一部のコードを atom { ... } と囲む事で、中に書いたコードの実行中には他のactivityが停止する。atom { .. } は複数の文を計算の一ステップのように実行するのだ。

実装

今のところ、X10をJavaにsource-to-sourceに変換するトランスレータが開発されている。これは高速に動作することを目的に作られているわけではないのが、C++ with OpenMPI バージョンも制作中の様だ。