comparison paper/sigos.tex @ 11:04cb189ec841

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Mon, 09 May 2016 14:04:32 +0900
parents 8d0be7f20a33
children d64f4ead7636
comparison
equal deleted inserted replaced
10:8d0be7f20a33 11:04cb189ec841
188 188
189 \begin{figure}[ht] 189 \begin{figure}[ht]
190 \begin{center} 190 \begin{center}
191 \includegraphics[width=70mm]{./pic/gearsos.pdf} 191 \includegraphics[width=70mm]{./pic/gearsos.pdf}
192 \end{center} 192 \end{center}
193 \caption{gotoによる Code Segment 間の接続} 193 \caption{Gears OS の構成図}
194 \label{fig:gearsos} 194 \label{fig:gearsos}
195 \end{figure} 195 \end{figure}
196 196
197 \section{Context} 197 \section{Context}
198 Context は接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、 Persistent Data Tree へのポインタ、 Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear である。 198 Context は接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、 Persistent Data Tree へのポインタ、 Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear である。
200 200
201 メインとなる Context と Worker 用 Context があり、 TaskQueue と Persistent Data Tree は共有される。 201 メインとなる Context と Worker 用 Context があり、 TaskQueue と Persistent Data Tree は共有される。
202 Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することは出来ない。 202 Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することは出来ない。
203 Worker 間の相互作用は Persistent Data Tree への読み書きのみで行う。 203 Worker 間の相互作用は Persistent Data Tree への読み書きのみで行う。
204 204
205 Code \ref{src:context}, Code \ref{src:initContext} に実際の Context の定義と初期化を示す。 205 Code \ref{src:context}, Code \ref{src:initContext} に実際の Context の定義と生成を示す。
206 206
207 \lstinputlisting[label=src:context, caption=Context]{./src/context.h} 207 \lstinputlisting[label=src:context, caption=Context]{./src/context.h}
208 \lstinputlisting[label=src:initContext, caption=initContext]{./src/context.c} 208 \lstinputlisting[label=src:initContext, caption=initContext]{./src/context.c}
209 209
210 Code \ref{src:context}, Code \ref{src:initContext} は以下の事を定義している。 210 Code \ref{src:context}, Code \ref{src:initContext} は以下の事を定義している。
213 Code Gear の名前とポインタの対応は Code \ref{src:context} の enum Codeと 関数ポインタによって表現される。 213 Code Gear の名前とポインタの対応は Code \ref{src:context} の enum Codeと 関数ポインタによって表現される。
214 実際に Code Gear に接続する際は enum Code を指定することで接続を行う。 214 実際に Code Gear に接続する際は enum Code を指定することで接続を行う。
215 これにより、実行時のルーチンなどを動的に変更することが可能となる。 215 これにより、実行時のルーチンなどを動的に変更することが可能となる。
216 216
217 \paragraph* {Data Gear の Allocation 用の情報} 217 \paragraph* {Data Gear の Allocation 用の情報}
218 Context の生成時に Allocation 用に Code \ref{src:context} の ALLOCATE\_SIZE 文の領域を確保する。 218 Context の生成時(Code \ref{src:initContext})、 Allocation 用に Code \ref{src:context} の ALLOCATE\_SIZE 分の領域を確保する。
219 Context にはその領域へのポインタとサイズが格納されている(Code \ref{src:context}の struct Context 内の heap, heapLimit)。 219 Context にはその領域へのポインタとサイズが格納されている(Code \ref{src:context}の struct Context 内の heap, heapLimit)。
220 実際に Allocation する際は heap を 必要な Data Gear のサイズに応じてインクリメントすることで Data Gear の Allocation を実現する。 220 実際に Allocation する際は heap を 必要な Data Gear のサイズに応じてインクリメントすることで Data Gear の Allocation を実現する。
221 221
222 \paragraph* {Data Gear へのポインタ} 222 \paragraph* {Data Gear へのポインタ}
223 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 223 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。
461 Persistent Data Tree は非破壊木構造で構成することで読み書きのを平行して行う事が可能となった。 461 Persistent Data Tree は非破壊木構造で構成することで読み書きのを平行して行う事が可能となった。
462 また、Red-Black Tree アルゴリズムを用いて実装することで木の平衡性が保たれる。 462 また、Red-Black Tree アルゴリズムを用いて実装することで木の平衡性が保たれる。
463 Worker は TaskQueue から Task を取り出し、 Persistent Data Tree から Data Gear を取得し、 Task 内の Code Gear の並列実行を行う。 463 Worker は TaskQueue から Task を取り出し、 Persistent Data Tree から Data Gear を取得し、 Task 内の Code Gear の並列実行を行う。
464 また、個別の Context を参照しているので、メモリ空間が独立しており、メモリを確保する処理で他の Worker を止めることはない。 464 また、個別の Context を参照しているので、メモリ空間が独立しており、メモリを確保する処理で他の Worker を止めることはない。
465 465
466 今後の課題として、 今回の例題では Twice を用いて並列処理の性能を示したが、 Twice は依存関係のない並列処理である。 466 今後の課題として、 依存関係のある並列処理の実現、 GPU などのプロセッサ等での実行、 デバック手法、 型検査が上げられる。
467
468 今回の例題では Twice を用いて並列処理の性能を示したが、 Twice は依存関係のない並列処理である。
467 本来、並列処理には依存関係が存在するため、 複雑な並列処理でも安定した実行ができることを依存関係がある並列処理の例題を作成し、評価する必要がある。 469 本来、並列処理には依存関係が存在するため、 複雑な並列処理でも安定した実行ができることを依存関係がある並列処理の例題を作成し、評価する必要がある。
468 470
469 また、型情報を残すために Data Gear を定義しているが、 Data Gear 野方情報を検査していない。 471 Gears OS 上でマルチコア CPU を用いた実行を可能にしたが、 GPU などの他のプロセッサを演算に用いることができない。
472 そのため、 Data Gear 等のデータを GPU などの各プロセッサにマッピングするための機構を用意する必要がある。
473
474 Gears OS は 関数呼び出しではなく、スタックを積まない軽量継続を使用して実装されているため、スタックトレースが見えず、従来のデバック手法が使えない。
475 そのため、Gears OS 用の 新しい デバック手法を考案する必要がある。
476 Gears OS は Context から Data Gear の情報を取得できるため、そこから今の状況を把握することができる。
477 その性質から、 Context を見ることができるコードを Meta Code Gear に入れることで、 Code Gear を止めて Data Gear の状況を見ることが可能となる。
478 しかし、この方法では並列で動いている Code Gear に対しては綺麗にデバック出来ない。
479 そのため、並列処理でのデバック手法も考案する必要がある。
480
481 また、型情報を残すために Data Gear を定義しているが、 Data Gear の型情報を検査していない。
470 プログラムの正しさを保証するために Data Gear の型情報を検査するシステムを 実装する必要がある。 482 プログラムの正しさを保証するために Data Gear の型情報を検査するシステムを 実装する必要がある。
471 % GPU の方も書く 483 % GPU の方も書く
472 % debug 手法 484 % debug 手法
473 485
474 \nocite{*} 486 \nocite{*}