# HG changeset patch # User Shohei KOKUBO # Date 1456386005 -32400 # Node ID 85d3468efeccff4f868f9eee10aa99cbafc8d3bb # Parent bb06d3fa6689f1ef08323ac58cfb4b34187da5ec fix diff -r bb06d3fa6689 -r 85d3468efecc paper/comparison.tex --- a/paper/comparison.tex Sun Feb 21 20:35:51 2016 +0900 +++ b/paper/comparison.tex Thu Feb 25 16:40:05 2016 +0900 @@ -16,25 +16,36 @@ これらの性質を有する Gears OS はオペレーティングシステムであると言えるので既存の OS との比較も行う。 \section{Cerium} -Cerium ではサブルーチンまたは関数を Task の単位としてプログラムを分割する。 -Task には依存関係のある Task を設定することができ、TaskManager が依存関係を解決することで並列処理を実現している。 -実行に必要なデータのアドレスを Task の生成時に設定することで Task はデータにアクセスすることが可能になる。 -データは汎用ポインタとして渡されるので Task 側で型変換して扱うことになる。 -ここで問題となるのが Task 間だけにしか依存関係がないことと Task 実行時にデータの型情報がないことである。 +\begin{itemize} +\item 依存関係 \\ + Cerium では Task 間で依存関係を設定する。 + Task の途中でデータが破損しても完了を TaskManager に通知し、依存関係を解決して次の Task が実行される。 + これではデータの正しさを保証することができない。 -本来 Task は必要なデータが揃ったときに実行されるべきものである。 -不正なデータが渡された場合、実行せずに不正なデータがであることを実行者に伝えることが望ましい。 -Cerium では Task の終了のみに着目して依存関係を解決するので途中で不正なデータになっても処理を続けてしまい不正な処理を特定することが難しい。 + Gears OS では Task に Input/Output Data Gear を設定することで Input と Output の関係から依存関係を決定する。 + TaskManager は Persistent Data Tree を監視し、必要な Data Gear が揃っていることを確認すると依存関係を解決する。 +\item データの型情報 \\ + Cerium では Task にデータを引き渡すとき汎用ポインタを用いる。 + このときデータの型情報が落ちるので Task の組み合わせが型的に安全なのか保証することができない。 -複雑なデータ構造を持つ場合、間違った型変換でデータの構造を破壊する可能性がある。 -型システムは正しい型に対して正しい処理が行われることを前提にしてプログラムの正しさを保証する。 -型情報がない Cerium では型システムによる安全性を保証できず、型に基づくバグが入り込む可能性がある。 + Gears OS では型情報を持つ分割されたデータとして Data Gear を定義し、Data Gear 単位でデータを Task に引き渡す。 + Data Gear を型シグネチャとして Task の組み合わせが正しいことを保証する。 +\item Allocator \\ + Cerium では Thread 間で Allocator を共有している。 + ある Thread がメモリ確保を行うとその間、他の Thread はメモリを確保することができず並列度が低下する。 -Gears OS では Code Gear, Data Gear という単位でプログラムを分割する。 -Code Gear は処理の単位、Data Gear はデータそのものである。 -Code Gear には Input/Output Data Gear が設定されており、Input と Output の関係が Code Gear 間の依存関係となる。 -Gears OS の TaskManager は Data Gear が格納されている Persistent Data Tree を監視して依存関係を解決する。 -Data Gear は Context に構造体として定義されており、型情報を持つ。 + Gears OS では Thraed ごとに Context を割り当てる。 + Context は独立したメモリ空間を持つので他の Thread と干渉することないメモリの確保を行うことができる。 +\item 並列処理との相性 \\ + Cerium はオブジェクト指向言語である C++ で実装されている。 + オブジェクト指向は保守性と再利用性を高めるためにカプセル化とポリモフィズムを重視する。 + オブジェクトの状態によって振る舞いが変わるため参照透過な処理でなくなり並列処理との相性が悪い。 + + Gears OS は本研究で開発している CbC を用いて実装する。 + CbC は Code Segment という単位でプログラムを記述する。 + Code Segment はスタックに値を積まない軽量継続を用いて他の Code Segment に遷移する。 + この軽量継続により並列化、ループ制御などを意識した最適化がソースコードレベルで行うことができる。 +\end{itemize} \section{OpenCL/CUDA} OpenCL/CUDA では並列処理に用いる関数を kernel として定義する。 diff -r bb06d3fa6689 -r 85d3468efecc paper/master_paper.pdf Binary file paper/master_paper.pdf has changed