本日の赤ペン先生
- すべて目的・概要・詳細の順番で書くべき
- 完全にグローバルビューで記述可能で、なおかつ性能が既存処理系に劣らないものを作る。
- そのためには二つの難しさがある
- MPIの「誰のどこ」ローカルビュー
- DMIの「持ってきたやつ」ローカルビュー
- ついでにi/eとかも使って性能を保つ。
- そのためには二つの難しさがある
- 関連研究
- ちゃんと図をMPI, DMI, mylangの3つの為に書く、スライド用が適切?
- メッセージパッシングは誰のどこと通信しないといけないと記述するのが面倒。
- 通常のPGAS処理系はローカルバッファ付きで、そこのローカルビューが足枷。
- Chapel, X10は完全にグローバルビューで記述可能だが、透過的すぎて遅い。
- 性能を最適化するためには通信する場所を明示できて、なおかつグローバルビューで記述可能であるべき。
- inspector/executorというものがありますよ
- 誤った記述があるらしい、掛け算と足し算の間違いとか
- ちなみにDMIはUPCと違って(単一のaffinityとか)誰と通信するかを決め打たなくていいからローカルバッファがあるPGAS処理系としては妥当な選択(1 subsectionとして記述する)でこれの上に処理系を構築する
- 提案手法
- 基本設計
- さっき言ったような「グローバルビューで全部書ける」「通信の場所が明快」というのをサポートする文法を導入するぜ
- C言語の拡張
- 概要
- ブロックでかこめ
- アクセスする部分を指定しろ
- 左辺値・右辺値判定をしてやるよ
- read/writeを必要に応じてするよ
- アクセスを差し替えるよ
- 具体例
- 簡単なの、2倍しつつのコピー
- DMI版と比較する
- 詳細な仕様
- BNF
- 実はもっと複雑なA[B[i]]形式に対応してるぜ
- 具体例
- 実装
- さっきに示したものの変換例
- inspector/executor
- フラグ形式ということにしてしまう
- あら、フラグを入れるだけでi/eが導入できちゃった。
- やっぱsync文サイコーね!
- 概要
- 基本設計
- 性能評価