Monad に基づくメタ計算を基本とする Gears OS の設計

小久保翔平

Monad に基づくメタ計算を基本とする Gears OS の設計

小久保翔平

Cerium と Alice

本研究室では並列プログラミングフレームワーク Cerium と分散ネットフレームワーク Alice の開発を行なってきた

Cerium では Task と呼ばれる分割されたプログラムを依存関係に沿って実行することで並列処理を実現する。 依存関係はプログラム自身が記述する必要があり、Task の種類が増えるほど記述が繁雑になる。 また、Task 間の依存関係のみに注目しており、データの依存関係を正しく保証することができない

Task が取り扱うデータに型情報がない 汎用ポインタを型変換して利用するしかなく、型検査を行うことができない

Cerium と Alice

Alice では処理とデータの単位としてそれぞれ Code Segment, Data Segment と呼ばれる単位を用いてプログラムを記述する。 Code Segment が取り扱う Input/Output Data Segment を指定することで処理とデータの関係を決定する

Data Segment にアクセスする API が設計上の問題で複雑化している。 また、Java で実装されており、実行速度が遅いという問題がある

Gears OS

本研究では Cerium と Alice を開発して得られた知見から並列分散フレームワーク Gears OS の設計・開発を行う

Gears OS では Alice の Code/Data Segment に相当する Code/Data Gear という単位を用いてプログラムを細かく分割する。 Code Gear は Input Data Gear から Output Data Gear を生成する。 Input/Output Data Gear の関係から Code Gear 間の依存関係を決定し、並列・分散処理を行う

Gears OS

従来の OS が行う排他制御、メモリ管理、並列実行などは Meta Computation に相当する。 関数型言語では Meta Computation に Monad を用いる手法があり、Gears OS では Code/Data Gear を Monad として定義して Meta Computation を実現する

並列実行の信頼性を確保するため Gears OS では作成されたプログラムに対して Model Checking を行う。 並列プログラムに Model Checking を行うことでそのプログラムが取り得る状態を列挙する。 これにより、デッドロック等を検出することで信頼性を確保する

Features

Inherent Parallel

Distributed Open Computation

Reliablity

 Separated Data Segment

 Model Checking

Code/Data Gear

Gears OS ではプログラム実行単位として Gear を用いる。 Gear は変更実行の単位、データの分割、Gear 間の接続などになる

Code Gear は実行コードそのものであり、OpenCL/CUDA の kernel に相当する。 接続された複数の Input Data Gear を参照し、単一または複数の Output Data Gear に書き込む。 Code Gear では接続された Data Gear のみに干渉することができる

Code Data Gear

Code/Data Gear ではポインタを直接には扱わず、Code と Data の分離性を上げることで、ポインタ関連のセキュリティフローを防止する

Gear の特徴の一つとしてその処理が Code/Data Gear に閉じていることがある。 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。

list

List

singly linked list の実装

  • Context
    • list の先頭を示す head
  • DataSegment
    • 任意
  • MetaDataSegment
    • 次の mds を示す next

操作

  • append
    • head から探索して末尾に新たな DS を追加
  • delete
    • head を next に変更
  • traverse
    • list を先頭から表示