annotate paper/sigos.tex @ 7:d23040817cf6

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Sun, 08 May 2016 14:59:00 +0900
parents 7355dbef5b75
children 31341eeba799
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \documentclass[techrep]{ipsjpapers}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \usepackage[dvipdfmx]{graphicx}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \usepackage{url}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \usepackage{listings,jlisting}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 \usepackage{enumitem}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 \lstset{
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
8 language=C,
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
9 tabsize=2,
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
10 frame=single,
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
11 basicstyle={\ttfamily\footnotesize},%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
12 identifierstyle={\footnotesize},%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
13 commentstyle={\footnotesize\itshape},%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
14 keywordstyle={\footnotesize\bfseries},%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
15 ndkeywordstyle={\footnotesize},%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
16 stringstyle={\footnotesize\ttfamily},
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
17 breaklines=true,
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
18 captionpos=b,
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
19 columns=[l]{fullflexible},%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
20 xrightmargin=0zw,%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
21 xleftmargin=1zw,%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
22 aboveskip=1zw,
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
23 numberstyle={\scriptsize},%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
24 stepnumber=1,
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
25 numbersep=0.5zw,%
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
26 lineskip=-0.5ex,
0
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
28 \renewcommand{\lstlistingname}{Code}
0
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 \input{dummy.tex} %% Font
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 % ユーザが定義したマクロなど.
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 \makeatletter
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \begin{document}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 % 和文表題
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 \title{Code Gear、 Data Gear に基づく OS のプロトタイプ}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 % 英文表題
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 \etitle{}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 % 所属ラベルの定義
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 \affilabel{1}{琉球大学大学院理工学研究科情報工学専攻 \\Interdisciplinary Information Engineering, Graduate School of Engineering and Science, University of the Ryukyus.}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 \affilabel{2}{琉球大学工学部情報工学科\\Information Engineering, University of the Ryukyus.}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 % 和文著者名
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \author{
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 伊波 立樹\affiref{1}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \and
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 東恩納 琢偉 \affiref{2}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \and
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 河野 真治\affiref{2}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 }
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 % 英文著者名
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 \eauthor{
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 Tatsuki IHA\affiref{1}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 \and
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 Takui HIGASHIONNA\affiref{2}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 \and
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 Shinji KONO\affiref{2}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 % 連絡先(投稿時に必要.製版用では無視される.)
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 \contact{伊波 立樹\\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 〒903-0213 沖縄県西原町千原1番地\\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 琉球大学工学部情報工学科\\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 TEL: (098)895-2221\qquad FAX: (098)895-8727\\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 email: innparusu@cr.ie.u-ryukyu.ac.jp}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 % 和文概要
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 \begin{abstract}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 当研究室では 処理の単位を Code Gear、 データの単位を Data Gear を用いて並列実行を行う Gears OS を開発している
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 Gears OS では 並列実行をするための Task を Code Gear と Data Gear の組で表現する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 Task の依存関係は Code Gear を実行するために必要なInput Data Gear と Code Gearで作られる Output Data Gear によって決定し、それにそって並列実行を行う。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 依存関係の解決などの Meta Computation の実行は Meta Code Gear で行われる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 Meta Code Gear は Code Gear に対応しており、 Code Gear が実行した後にそれに対応した Meta Code Gear が実行される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 本論文ではGears OS のプロトタイプとして並列処理機構を設計し、 CbC(Continuation based C) で実装する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 \end{abstract}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 % 英文概要
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 \begin{eabstract}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 \end{eabstract}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 % 表題などの出力
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 \maketitle
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 % 本文はここから始まる
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 % Introduce
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
91 \section{Gears OS}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
92 CPU の処理速度の向上のためクロック周波数の増加は発熱や消費電力の増大により難しくなっている。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
93 そのため、クロック周波数を上げる代わりに CPU のコア数を増やす傾向にある。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
94 マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
95 また、PC の処理性能を上げるためにマルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
96 並列処理をする上でこれらのリソースを無視することができない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
97 しかし、これらのプロセッサで性能を出すためにはこれらのアーキテクチャに合わせた並列プログラミングが必要になる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
98 並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
99 本研究では Cerium を開発して得られた知見を元にこれらの性質を持つ並列プログラミングフレームワークとして Gears OS の設計・実装を行う。
2
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
100
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
101 Cerium\cite{cerium} は本研究室で開発していた並列プログラミングフレームワークである。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
102 Cerium では Task と呼ばれる分割されたプログラムを依存関係に沿って実行することで並列実行を可能にする。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
103 Cerium では依存関係を Task 間で設定するが、本来 Task はデータに依存するもので Task 間の依存関係ではデータの依存関係を保証することができない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
104 また、Task には汎用ポインタとしてデータの受け渡しを行うため、型情報がない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
105 そのため、本要ポインタをキャストして利用するしか無く、型の検査を行う事ができない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
106
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
107 Gears OS\cite{gears} は Code Gear と Data Gear によって構成される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
108 Code Gear は処理の単位、Data Gear はデータの単位となる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
109 Gears OS では Code/Data Gear を用いて記述することでプログラム全体の並列度を高めて、効率的に並列処理することが可能になることを目的とする。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
110 また、Gears OS の実装自体が Code/Data Gear を用いたプログラミングの指針となるように実装する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
111 Gears OS における Task は実行する Code Gear と実行に必要な Input Data Gear, 出力される Output Data Gear の組で表現される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
112 Input/Output Data Gear によって依存関係が決定し、それに沿って並列実行する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
113 依存関係の解決などの Meta Computation の実行は Meta Code Gear で行われる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
114 Meta Code Gear は Code Gear に対応しており、 Code Gear が実行した後にそれに対応した Meta Code Gear が実行される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
115 本論文ではGears OS のプロトタイプとして Data Gear を管理する Persistent Data Tree, Task を管理する TaskQueue, 並列処理を行う Worker を実装し、簡単な例題を用いて Gears OS の評価を行う。
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
116
1
fe6323d1602d Add mind map
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
117 \section{Code Gear と Data Gear}
2
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
118 Gears OS はプログラムの単位として Gear を用いる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
119 Gear は並列実行の単位、データの分割、Gear 間の接続等になる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
120
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
121 Code Gear はプログラムの処理そのものである。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
122 Code Gear は任意の数の Input Data Gear を参照し、 処理が完了すると任意の数の Output Data Gear に書き込む。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
123 Code Gear は接続された Data Gear 以外には参照行わない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
124
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
125 Data Gear は Data そのものを表しており、int や文字列などの Primitive Data Type が入っている。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
126
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
127 Code Gear、 Data Gear は 本研究室で開発されている Alice\cite{alice} で使われている単位である Code Segment、 Data Segment\cite{segment} それぞれに対応する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
128
2
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
129 Gears OS では Code Gear と Input / Output Data Gear の対応から依存関係を解決し、 Code Gear の並列実行を可能とする。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
130
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
131 Gear の特徴として処理やデータの構造が Code Gear、 Data Gear に閉じていることにある。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
132 これにより、実行時間、メモリ使用量などを予想可能なものにする事が可能になる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
133
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
134 \section{Meta Computation}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
135 Gears OS では通常の処理を Computation、 Computation のための Computation を Meta Computation として扱う。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
136 Meta Computation の例として並列処理の依存関係の解決や、 OS が行うネットワーク管理、メモリ管理等の資源制御などが挙げられる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
137
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
138 Gears OS では Meta Computation を Meta Code Gear、 Meta Data Gear で表現する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
139 Meta Code Gear は通常の Code Gear 直後に遷移され、 Meta Computation を実行する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
140 Meta Computation の実行後は通常の Code Gear で指定した Code Gear を実行する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
141 つまり Code Gear の実行後は何かしらの Meta Code Gear を実行する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
142
2
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
143 \section{Continuation based C}
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
144 Gears OS の実装は本研究室で開発している CbC(Continuation based C)\cite{cbc-lola}を用いて行う。
2
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
145 CbC は処理を Code Segment を用いて記述することを基本としているため、 Gears OS の Code Gear を記述するのに適している。
0
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
2
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
147 CbC のプログラムでは C の関数の代わりに Code Segment を用いてい処理を記述している。 Code Segment は C の関数と異なり戻り値を持たない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
148 Code Segment の宣言は C の関数の構文と同様に行い、 型に \_\_code を使うことで宣言できる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
149
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
150 Code Segment から Code Segment への移動は goto の後に Code Segment 名と引数を並べた記述するという構文を用いて行う。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
151 この goto による処理の遷移を継続と呼ぶ。 図\ref{fig:cbc_goto} は Code Segment 間の継続関係を表している。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
152
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
153 C では関数呼び出しを行うたび、関数の引数の値がスタックに積まれていくが、Code Segment では戻り値を持たないため、スタックに値を積んでいく必要がなくスタックを変更する必要が無い。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
154 このようなスタックに値を積まない継続、つまり呼び出し元の環境を持たない継続を軽量継続と呼ぶ。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
155 軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようにする。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
156
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
157 \begin{figure}[ht]
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
158 \begin{center}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
159 \includegraphics[width=70mm]{./pic/cbc_goto.pdf}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
160 \end{center}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
161 \caption{gotoによる Code Segment 間の接続}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
162 \label{fig:cbc_goto}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
163 \end{figure}
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
164
2
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
165 \section{CbC での Gears OS の構文サポート}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
166 CbC は Gears OS の構文のサポートを行う。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
167
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
168 Gesrs OS では Contextという接続可能な Data Gear のリストからデータを取り出して処理行う。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
169 しかし、 Context を直接扱うのはセキュリティ上好ましくない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
170 そこで Gears OS では Context から必要なデータを取り出して Code Gear に接続する stub を定義する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
171 stub は Code Gear から推論することが可能のため、 CbC は自動的に stub の生成を行う。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
172
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
173 また、Code Gear の遷移には Meta computation を行うために Meta Code Gear を挟む。
2
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
174 CbC では Meta Code Gear への接続も自動的に行うようにする。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
175
3
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
176 \section{Gears OS の構成}
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
177 Gears OS は以下の要素で構成される。
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
178
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
179 \begin{itemize}
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
180 \item Context
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
181 \item TaskQueue
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
182 \item TaskManager
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
183 \item Persistent Data Tree
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
184 \item Worker
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
185 \end{itemize}
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
186
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
187 図\ref{fig:gearsos} に Gears OS の構成図を示す。
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
188
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
189 \begin{figure}[ht]
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
190 \begin{center}
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
191 \includegraphics[width=70mm]{./pic/gearsos.pdf}
3
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
192 \end{center}
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
193 \caption{gotoによる Code Segment 間の接続}
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
194 \label{fig:gearsos}
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
195 \end{figure}
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
196
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
197 \section{Context}
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
198 Context は接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、 Persistent Data Tree へのポインタ、 Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear である。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
199 Gears OS では必要な Code/Data Gear に参照したい場合、このContext を通す必要がある。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
200
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
201 メインとなる Context と Worker 用 Context があり、 TaskQueue と Persistent Data Tree は共有される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
202 Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することは出来ない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
203 Worker 間の相互作用は Persistent Data Tree への読み書きのみで行う。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
204
3
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
205 \section{TaskQueue}
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
206 Gears OS における Task Queue は Synchronized Queue で実現される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
207 メインとなる Context と Worker 用 の Context で共有され、 Worker が TaskQueue から Task を取得し、実行することで並列処理を行う。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
208
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
209 Gears OS の Queue は Queue を表す Data Gear と List を表現する Element という名前の Data Gear を組み合わせて表現する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
210 Queue を表す Data Gear には List 構造の先頭の Element を指す first, 末尾の Element を指す last, Element の個数を示す count が格納される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
211 Element を表す Data Gear は、Task を示す task、 次の Element を示す next が格納される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
212
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
213 Queue に対して操作を行う場合、 Queue 自体の Data Gear を書き換える。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
214 Task を 挿入する場合、 新しく Element を生成し、 Queue の last から List 構造の末尾に新しい Element を追加し、 Queue の last を書き換える。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
215 Task を 取得する場合、 Queue の first から List 構造を最初の要素を取り出し、 取り出した要素の次の要素の参照を Queue の first に書き込む。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
216
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
217 Gears OS の TaskQueue はマルチスレッドでの操作を想定しているため、データの一貫性を保証する必要がある。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
218 そのため、データの一貫性を並列実行時でも保証するために Compare and Swap(CAS) を利用して Queue の操作を行っている。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
219 CAS はデータの比較・置換をアトミックに行う命令である。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
220 メモリからデータの読みだし、変更、メモリへのデータの書き出しという一連の処理を CAS を利用することで処理の間に他のスレッドがメモリに変更を加えないことを保証することができる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
221 CAS に失敗した場合は置換を行わず、再びデータの呼び出しから始める。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
222
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
223 Code \ref{src:sync_enqueue} に CAS を使用した Task 挿入を示している。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
224 Code \ref{src:sync_enqueue} は 2つのCode Gear を定義しており、 putQueue3 は要素がある場合、 putQueue4 は要素がない場合の Task 挿入を示している。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
225
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
226 \lstinputlisting[label=src:sync_enqueue, caption=Enqueue]{./src/sync_enqueue.c}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
227
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
228 \section{Persistent Data Tree}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
229 Gears OS は Persistent Data Gear の管理に木構造を用いる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
230 この木構造は非破壊的で構成される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
231 非破壊木構造とは図\ref{fig:persistent_data_tree}のように一度構築した木構造を破壊すること無く新しい木構造を構築することで、木構造を編集する方法である。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
232 非破壊木構造は木構造を書き換えることなく編集を行うため、読み書きを平行して行うことが可能である。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
233
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
234 \begin{figure}[ht]
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
235 \begin{center}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
236 \includegraphics[width=80mm]{./pic/persistent_date_tree.pdf}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
237 \end{center}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
238 \caption{木構造の非破壊的編集}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
239 \label{fig:persistent_data_tree}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
240 \end{figure}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
241
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
242 Gears OS では Data Tree として木構造を利用する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
243 その場合、普通に木構造を構築するだけでは偏った木構造が構築される可能性がある。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
244 最悪なケースでは線形リストになり、計算量が O(n) となる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
245
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
246 そのため、挿入・削除・検索における処理時間を保証するため Red-Black Tree を用いて木構造の平衡性を保証する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
247 Red-Black Tree は通常の二分探索木としての条件の他に以下の条件を持つ。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
248
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
249 \begin{itemize}
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
250 \item 各ノードは赤または黒の色を持つ。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
251 \item ルートの色は黒である。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
252 \item 赤ノードは2つの黒ノードを子として持つ(赤ノードが続くことはない)。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
253 \item ルートから最下位ノードへのパスに含まれる黒ノードの数はどの最下位ノードでも一定である。
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
254 \end{itemize}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
255
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
256 これらの条件によってルートから最も遠い最下位ノードへのパスの長さはルートから最も近い最下位ノードへのパスの長さの2倍に収まることが保証される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
257
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
258 \section{Worker}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
259 Worker は TaskQueue から Task を取得し、実行する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
260 Task には実行する Code Gear と実行に必要な Code Gear の key が格納されている。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
261 実行に必要な Code Gear は Persistent Data Tree から key を使って取得する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
262
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
263 各 Worker は個別の Context を参照しており、 メモリ空間も独立しているのでメモリを確保する処理で他の Thread を止めることはない。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
264 ただし、Persistent Data Tree への書き出しは競合する可能性があるので CAS を利用してデータの一貫性を保証する必要がある。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
265
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
266 Worker が Task の取得を行う Code Gear を Code \ref{src:sync_dequeue} に示す。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
267 Task Queue から取得した Task から実行する Code Gear と必要な Data Gear の key を Worker Context に書き込むことで実行される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
268
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
269 \lstinputlisting[label=src:sync_dequeue, caption=GetTask]{./src/sync_dequeue.c}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
270
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
271 Worker から取得された Task の Code Gear は並列実行される。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
272 並列実行される Code Gear と言っても他の Code Gear と同じである。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
273 これは Gears OS 自体が Code Gear によって構成されていることに起因する。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
274 つまり、 Gears OS を利用して書かれたプログラムで定義されている Code Gear に依存関係がないとき、全て並列に実行することができる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
275
3
d46b6944f881 Add gearsos image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
276 \section{TaskManager}
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
277 Gears OS の TaskManager は WaitTaskQueue に入っている Task の依存関係を解決する。
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
278 Task には Input/Output Data Gear の情報が格納されている。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
279 Input Data Gear は Task に必要な Data Gear で揃ったら Task は実行可能な状態になる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
280 Output Data Gear は Task が Persistent Data Tree に書き出す Data Gear である。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
281 この Input と Output の関係が依存関係となる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
282 TaskManager は Persistent Data Tree を監視しており、WaitTaskQueue に入っている Task の Input Data Gear が揃っているのを確認したら実行可能な Task として AcitiveTaskQueue へ移動させる。
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
283
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
284 \section{評価}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
285 Gears OS の評価として依存関係のない例題の並列実行を行った。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
286
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
287 今回使用した例題は Twice という整数配列を2倍にする例題である。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
288 Code \ref{src:twice} に Twice の処理を行う Code Gear を示す。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
289
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
290 \lstinputlisting[label=src:twice, caption=Twice]{./src/twice.c}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
291
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
292 以下に今回の処理の流れを示す。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
293
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
294 \begin{itemize}
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
295 \item 配列サイズを元に index, alignment, 配列へのポインタを持つ Data Gear に分割。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
296 \item Data Gear を Persistent Data Tree に挿入。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
297 \item 実行する Code Gear(Twice) と実行に必要な Data Gear への key を持つ Task を生成。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
298 \item 生成した Task を TaskQueue に挿入。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
299 \item Worker の起動。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
300 \item Worker が TaskQueue から Task を取得。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
301 \item 取得した Task を元に必要な Data Gear を Persistent Data Tree から取得。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
302 \item 並列の処理される Code Gear(Twice) を実行。
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
303 \end{itemize}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
304
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
305 要素数$2^17$*1000 のデータを640個の Task に分割し、コア数を変更して測定を行った結果を表\ref{table:result}、図\ref{fig:result}に示す。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
306
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
307 \begin{table}[ht]
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
308 \begin{center}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
309 \small
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
310 \begin{tabular}[htpb]{|c||c|c|c|}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
311 \hline
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
312 Processor & Time(ms) \\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
313 \hline
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
314 \hline
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
315 1 CPU & 1315 \\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
316 \hline
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
317 2 CPUs & 689 \\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
318 \hline
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
319 4 CPUs & 366 \\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
320 \hline
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
321 8 CPUs & 189 \\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
322 \hline
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
323 12 CPUs & 111 \\
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
324 \hline
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
325 \end{tabular}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
326 \caption{要素数$2^{17}$*1000 のデータに対する Twice}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
327 \label{table:result}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
328 \end{center}
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
329 \end{table}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
330
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
331 \begin{figure}[ht]
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
332 \begin{center}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
333 \includegraphics[width=70mm]{pic/twice_640.pdf}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
334 \end{center}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
335 \caption{要素数$2^{17}$*1000 のデータに対する Twice}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
336 \label{fig:result}
6
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
337 \end{figure}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
338
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
339 結果から、 1 CPU と 12 CPU で約 11.8 倍の速度向上が見られた。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
340 しかし、 タスクの粒度が小さすぎると CAS の失敗が多くなり、性能がでないことがある。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
341 Code Gear には実行時間を予想可能なものにするという特徴があるため、タスクが最適な粒度なのかを検査する機能が必要になると考えられる。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
342
0
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 \section{まとめ}
7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
344 本論文では Code Gear、 Data Gear によって構成される Gears OS のプロトタイプの設計、実装を行った。
0
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
345
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
346 \nocite{*}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
347 \bibliographystyle{ipsjunsrt}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
348 \bibliography{sigos}
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
349
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 \end{document}