小久保翔平
本研究室では並列プログラミングフレームワーク Cerium と分散ネットフレームワーク Alice の開発を行なってきた
Cerium では Task と呼ばれる分割されたプログラムを依存関係に沿って実行することで並列処理を実現する。 依存関係はプログラム自身が記述する必要があり、Task の種類が増えるほど記述が繁雑になる。 また、Task 間の依存関係のみに注目しており、データの依存関係を正しく保証することができない
Task が取り扱うデータに型情報がない 汎用ポインタを型変換して利用するしかなく、型検査を行うことができない
Alice では処理とデータの単位としてそれぞれ Code Segment, Data Segment と呼ばれる単位を用いてプログラムを記述する。 Code Segment が取り扱う Input/Output Data Segment を指定することで処理とデータの関係を決定する
Data Segment にアクセスする API が設計上の問題で複雑化している。 また、Java で実装されており、実行速度が遅いという問題がある
本研究では 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 間の依存関係を決定し、並列・分散処理を行う
従来の OS が行う排他制御、メモリ管理、並列実行などは Meta Computation に相当する。 関数型言語では Meta Computation に Monad を用いる手法があり、Gears OS では Code/Data Gear を Monad として定義して Meta Computation を実現する
並列実行の信頼性を確保するため Gears OS では作成されたプログラムに対して Model Checking を行う。 並列プログラムに Model Checking を行うことでそのプログラムが取り得る状態を列挙する。 これにより、デッドロック等を検出することで信頼性を確保する
Inherent Parallel
Distributed Open Computation
Reliablity
Separated Data Segment
Model Checking
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 Gear の実行時間、メモリ使用量を予測可能なものにする。