Mercurial > hg > Papers > 2016 > kkb-master
comparison paper/comparison.tex @ 28:85d3468efecc default tip
fix
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 25 Feb 2016 16:40:05 +0900 |
parents | 958634b9fa32 |
children |
comparison
equal
deleted
inserted
replaced
27:bb06d3fa6689 | 28:85d3468efecc |
---|---|
14 \end{itemize} | 14 \end{itemize} |
15 | 15 |
16 これらの性質を有する Gears OS はオペレーティングシステムであると言えるので既存の OS との比較も行う。 | 16 これらの性質を有する Gears OS はオペレーティングシステムであると言えるので既存の OS との比較も行う。 |
17 | 17 |
18 \section{Cerium} | 18 \section{Cerium} |
19 Cerium ではサブルーチンまたは関数を Task の単位としてプログラムを分割する。 | 19 \begin{itemize} |
20 Task には依存関係のある Task を設定することができ、TaskManager が依存関係を解決することで並列処理を実現している。 | 20 \item 依存関係 \\ |
21 実行に必要なデータのアドレスを Task の生成時に設定することで Task はデータにアクセスすることが可能になる。 | 21 Cerium では Task 間で依存関係を設定する。 |
22 データは汎用ポインタとして渡されるので Task 側で型変換して扱うことになる。 | 22 Task の途中でデータが破損しても完了を TaskManager に通知し、依存関係を解決して次の Task が実行される。 |
23 ここで問題となるのが Task 間だけにしか依存関係がないことと Task 実行時にデータの型情報がないことである。 | 23 これではデータの正しさを保証することができない。 |
24 | 24 |
25 本来 Task は必要なデータが揃ったときに実行されるべきものである。 | 25 Gears OS では Task に Input/Output Data Gear を設定することで Input と Output の関係から依存関係を決定する。 |
26 不正なデータが渡された場合、実行せずに不正なデータがであることを実行者に伝えることが望ましい。 | 26 TaskManager は Persistent Data Tree を監視し、必要な Data Gear が揃っていることを確認すると依存関係を解決する。 |
27 Cerium では Task の終了のみに着目して依存関係を解決するので途中で不正なデータになっても処理を続けてしまい不正な処理を特定することが難しい。 | 27 \item データの型情報 \\ |
28 Cerium では Task にデータを引き渡すとき汎用ポインタを用いる。 | |
29 このときデータの型情報が落ちるので Task の組み合わせが型的に安全なのか保証することができない。 | |
28 | 30 |
29 複雑なデータ構造を持つ場合、間違った型変換でデータの構造を破壊する可能性がある。 | 31 Gears OS では型情報を持つ分割されたデータとして Data Gear を定義し、Data Gear 単位でデータを Task に引き渡す。 |
30 型システムは正しい型に対して正しい処理が行われることを前提にしてプログラムの正しさを保証する。 | 32 Data Gear を型シグネチャとして Task の組み合わせが正しいことを保証する。 |
31 型情報がない Cerium では型システムによる安全性を保証できず、型に基づくバグが入り込む可能性がある。 | 33 \item Allocator \\ |
34 Cerium では Thread 間で Allocator を共有している。 | |
35 ある Thread がメモリ確保を行うとその間、他の Thread はメモリを確保することができず並列度が低下する。 | |
32 | 36 |
33 Gears OS では Code Gear, Data Gear という単位でプログラムを分割する。 | 37 Gears OS では Thraed ごとに Context を割り当てる。 |
34 Code Gear は処理の単位、Data Gear はデータそのものである。 | 38 Context は独立したメモリ空間を持つので他の Thread と干渉することないメモリの確保を行うことができる。 |
35 Code Gear には Input/Output Data Gear が設定されており、Input と Output の関係が Code Gear 間の依存関係となる。 | 39 \item 並列処理との相性 \\ |
36 Gears OS の TaskManager は Data Gear が格納されている Persistent Data Tree を監視して依存関係を解決する。 | 40 Cerium はオブジェクト指向言語である C++ で実装されている。 |
37 Data Gear は Context に構造体として定義されており、型情報を持つ。 | 41 オブジェクト指向は保守性と再利用性を高めるためにカプセル化とポリモフィズムを重視する。 |
42 オブジェクトの状態によって振る舞いが変わるため参照透過な処理でなくなり並列処理との相性が悪い。 | |
43 | |
44 Gears OS は本研究で開発している CbC を用いて実装する。 | |
45 CbC は Code Segment という単位でプログラムを記述する。 | |
46 Code Segment はスタックに値を積まない軽量継続を用いて他の Code Segment に遷移する。 | |
47 この軽量継続により並列化、ループ制御などを意識した最適化がソースコードレベルで行うことができる。 | |
48 \end{itemize} | |
38 | 49 |
39 \section{OpenCL/CUDA} | 50 \section{OpenCL/CUDA} |
40 OpenCL/CUDA では並列処理に用いる関数を kernel として定義する。 | 51 OpenCL/CUDA では並列処理に用いる関数を kernel として定義する。 |
41 OpenCL では CommandQueue, CUDA では Stream という命令キューに命令を発行することで GPU を利用することができる。 | 52 OpenCL では CommandQueue, CUDA では Stream という命令キューに命令を発行することで GPU を利用することができる。 |
42 命令キューは発行された順番通りに命令が実行されることが保証されている。 | 53 命令キューは発行された順番通りに命令が実行されることが保証されている。 |