Mercurial > hg > Papers > 2016 > parusu-sigos
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{*} |