comparison paper/main.tex @ 0:cca1d0bf491c

rm chapter CbC GearsOS
author tobaru
date Sat, 17 Feb 2018 19:34:35 +0900
parents
children 612de2705907
comparison
equal deleted inserted replaced
-1:000000000000 0:cca1d0bf491c
1 \documentclass[a4j,12pt]{jreport}
2 \usepackage[dvipdfmx]{graphicx}
3 \usepackage{mythesis}
4 \usepackage{multirow}
5 \usepackage{ascmac}
6 \usepackage{here}
7 \usepackage{url}
8 \usepackage{fancyhdr}
9 \usepackage{float}
10 \usepackage{listings, jlisting}
11 %% \input{dummy} %% font
12
13 \lstset{
14 language=java,
15 tabsize=2,
16 frame=single,
17 basicstyle={\ttfamily\footnotesize},%
18 identifierstyle={\footnotesize},%
19 commentstyle={\footnotesize\itshape},%
20 keywordstyle={\footnotesize\bfseries},%
21 ndkeywordstyle={\footnotesize},%
22 stringstyle={\footnotesize\ttfamily},
23 breaklines=true,
24 captionpos=b,
25 columns=[l]{fullflexible},%
26 xrightmargin=0zw,%
27 xleftmargin=1zw,%
28 aboveskip=1zw,
29 numberstyle={\scriptsize},%
30 stepnumber=1,
31 numbersep=0.5zw,%
32 lineskip=-0.5ex,
33 numbers=left
34 }
35 \renewcommand{\lstlistingname}{Code}
36
37 \setlength{\itemsep}{-1zh}
38
39 \title{GearsOS on Raspberry Pi}
40 \icon{
41 \includegraphics[width=80mm,bb=0 0 595 642]{fig/ryukyu.pdf} %%元は 642じゃなくて842
42 }
43 \year{平成30年度 卒業論文}
44 \belongto{琉球大学工学部情報工学科}
45 \author{145759E 桃原 優 \\ 指導教員 {河野 真治} }
46
47 \makeatletter
48 \newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}}
49 \newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}}
50 \makeatother
51 \setlength\abovecaptionskip{0pt}
52
53 \begin{document}
54
55 % タイトル
56 \maketitle
57 \baselineskip 17pt plus 1pt minus 1pt
58
59 \pagenumbering{roman}
60 \setcounter{page}{0}
61
62 \tableofcontents % 目次
63 \listoffigures % 図目次
64 \listoftables % 表目次
65
66 %以下のように、章ごとに個別の tex ファイルを作成して、
67 % main.tex をコンパイルして確認する。
68 %章分けは個人で違うので下のフォーマットを参考にして下さい。
69
70 % はじめに
71
72 % 1章では研究目的を書かない(もったいない)
73
74
75
76
77 \chapter{(序章)}
78 \pagenumbering{arabic}
79 問題提起\\
80 研究目的はかかない
81
82
83 \label{chap:Introduction}
84
85
86 %
87
88 %序論の目安としては1枚半ぐらい.
89 %英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも.
90
91
92
93 % \chapter{CbC}
94 % Continuation based C(以下、CbC)は、本研究室で LLVM/Clang 上に実装した言語である。
95
96 % CbC は Code Segment 間を、goto によって継続的に遷移し処理を行っている。
97 % その流れを図\ref{fig:CodeSegment} に示す。
98
99
100
101 % \begin{figure}[htpb]
102 % \begin{center}
103 % \scalebox{1}{\includegraphics{images/codesegment.pdf}}
104 % \end{center}
105 % \caption{goto による Code Segment 間の継続}
106 % \label{fig:CodeSegment}
107 % \end{figure}
108
109 % \label{chap:CbC}
110
111
112 % \section{Code Segment}
113 % CbC は Code Segment を基本的な処理単位とする。C の関数とは異なり返り値を持たないが、
114 % Code Segment の宣言は C の関数の構文と同じように行い、型に \_\_code を用いる。
115
116 % CbC は for 文や while 文といったループ制御構文を持たないので、
117 % ループ処理は自分自身への再帰的な継続を行う事で実現する。
118
119 % 現在の Code Segment から次の Code Segment への移動は
120 % goto の後に Code Segment 名と引数を並べて記述する。この goto
121 % による処理の遷移を継続と呼ぶ。C と異なり、戻り値を持たない Code Segment
122 % ではスタックに値を積んで行く必要が無くスタックは変更されない。
123 % このようなスタックに値を積まない継続を軽量継続と呼ぶ。この軽量継続により、
124 % 並列化、ループ制御、関数コールとスタックの操作を意識した
125 % 最適化がソースコードレベルで行えるようになる。
126
127
128
129
130 % \chapter{GearsOS}
131 % \label{chap:GearsOS}
132
133
134 % \section{GearsOS}
135 % 当研究室では、CodeSegmentとDataSegmentによって構成される
136 % GearsOSの開発を行っている。GearsOSは、並列プログラミングフレームワーク
137 % の Cerium と分散フレームワークの Alice の開発を通して得られた知見を元に
138 % 開発を進めている。
139
140 % Cerium はオブジェクト指向言語である C++ を用いて開発した並列プログラミング
141 % フレームワークである。Cell、マルチコアCPU、GPU を用いた並列実行をサポート
142 % している。並列処理の単位として Task を記述し、Task に他の Task との
143 % 依存関係を設定する事で並列実行を実現するが、データは汎用ポインタで Task に
144 % 渡されるため、データの依存関係を保証できない。データの正しさや依存関係を
145 % 保証できていないので、並列処理は行えるが、信頼性が低い。その知見から、
146 % 並列分散処理 には Code の分割だけではなく Data の分割も必要である事が
147 % 分かった。
148
149 % Alice では処理の単位である、 Code Segment、データの単位である
150 % Data Segment を用いてプログラムを記述する。Code Segment は使用する Input Data Segment、Output Data Segment を指定することで処理とデータの依存関係を解決する。Gears OSでは、Gear という単位を用いてプログラムを Code Gear、Data Gear に細かく分割するが、これは Alice のCode Segment、Data Segment にそれぞれ対応する。\\
151 % Gears OS では CbC を用いて Data Sement を定義し、
152 % 実装を行っている。
153
154 % 当研究室で開発している Code Segment を処理単位とする プログラミング言語
155 % CbC を用いて Data Segment を定義し、Gears OS の実装を行っている。
156
157
158 % \section{Code Gear と Data Gear}
159 % Gears OS では、プログラムの単位として Gear を用いる。
160 % Gear は並列実行の単位、データの分割、Gear 間の接続等になる。
161
162 % Code Gear はプログラムの処理そのものであり、任意の数の Data Gear を参照し、
163 % 処理が完了すると任意の数の Data Gear に書き込む。Code Gear は接続された
164 % Data Gear 以外にアクセスできない。Code Segment と同じように Code Gear から
165 % 次の Code Gear への処理の移動は goto の後に Code Gear の名前と引数を指定する事で実現できる。
166
167 % Data Gear はデータそのものを表す。int や 文字列などの Primitive Data Type
168 % を持っている。Gear の特徴として処理やデータの構造が Code Gear、Data Gear
169 % に閉じている事にある。これにより、実行時間、メモリ使用量などを予測可能なものにすることができる。
170
171 \chapter{RaspberryPi上でのGearsOS}
172
173
174 当研究室では CbC(Continuation base C) とCbC を用いて実装する
175 GearsOS の研究を行っている。
176
177 CbC は Code Segment と Data Segment という単位でプログラムを記述する。
178 Code Segment は並列処理の単位として利用でき、
179 Data Segment はデータそのもので型を持っていて、
180 CbC はメタレベルの処理,並列処理を記述することができる。
181
182 メタレベルの処理では、メモリ管理、スレッド管理、CPU や GPU の資源管理
183 を記述することができる。
184
185 本研究では、ARM で動くシングルボードコンピュータである
186 Raspberry Pi 上で Gears OS を動かせるようになる事で、
187 ハードウェア上でもメタレベルの処理、並列実行ができるプログラミング
188 を記述できるようになる事を目指している。
189
190 しかし、メモリの関係上 RaspberryPi 上で CbC の make を行うと、
191 かなりの時間がかかる。
192
193 解決案として、OSX 上で CrossCompile を行う方法と、Linux 環境で
194 CrossCompile を行う方法を提案する。
195
196
197
198
199 \label{chap:rpiGears}
200
201
202
203 \chapter{RaspberryPi上での実装}
204
205 \label{chap:rpi}
206
207 \section{CbCのmake時間}
208 % Raspberry Pi の OS である Raspbian ではメモリが 256MB なので
209 % Raspberry Pi 上で直接 CbC をコンパイルするには時間がかかる。qemu によるメモリの拡張もできないので、別の手法で Raspberry Pi 上に CbC を実装する方が好ましい。
210 Raspberry Pi 1 のメモリは 256MB と小さいため、 CbC をコンパイルすることができない。
211 Raspberry Pi 3 だとメモリは 1GB あり CbC をコンパイルできるが、時間がかかる。
212
213
214
215 学科のサーバの一つでLinux環境であるDALMORE
216
217 \begin{table}[htb]
218 \centering
219 \scalebox{1.5}[1.5]{
220 \begin{tabular}{| c | r | r |} \hline
221 環境(メモリ) & 時間 & 比較 \\ \hline \hline
222 RaspberryPi(1GB) & 15時間11分06秒 & 1.00倍 \\ \hline
223 OSX(16GB) & 2時間16分06秒 & 6.69倍 \\ \hline
224 Linux(500GB) & 2分26秒 & 374.42倍 \\ \hline
225 \end{tabular}
226 }
227 \end{table}
228
229
230
231 % qemuによる拡張ができない原因
232
233
234 \section{T図形}
235 CbC を Raspberry Pi で動かすためのアプローチの手法を、I と T の形をした
236 図の組み合わせによって説明を行う。I の上部分に cbclang や Xv6 などのソースコード名を、
237 下部分にその機能の記述言語を記してある。T の下にある I は特別で、上に VM 下に VM を乗せている
238 OS が記されている。 T の上部分は左に入力されるファイル、右に出力されるその機能によって出力される
239 ファイルが記され、下部分にその機能の記述言語が記されている。
240
241 例として、cbclang のソースコード(I)と、 Raspberry Pi 上の clang (T)
242 を図\ref{fig:examples} に示す。
243
244 \begin{figure}[htpb]
245 \begin{center}
246 \scalebox{0.70}{\includegraphics{images/examples_2.pdf}}
247 \end{center}
248 \caption{T図形の例}
249 \label{fig:examples}
250 \end{figure}
251
252 \break
253 Raspberry Pi でコンパイルを行うまでの過程を、図\ref{images:RaspberryPi}に示す。
254
255 \begin{figure}[htpb]
256 \begin{center}
257 \scalebox{0.30}{\includegraphics{images/RaspberryPi_2.pdf}}
258 \end{center}
259 \caption{Raspberry Pi}
260 \label{images:RaspberryPi}
261 \end{figure}
262
263
264 \break
265
266
267
268 \chapter{CrossCompile}
269 \label{chap:CrossCompile}
270 OSX 上で CrossCompile する事で make 時間の問題を解決する方法がある。
271 % CrossCompile とは、別の OS で実行可能なコードを生成するコンパイルの手法である。
272 % つまり、OSX であらかじめ Raspberry Pi で CbC が動くように CrossCompile を行い、そのコードを Raspberry Pi に移せばよい。\\
273 CrossCompile とは、別の OS で実行可能なコードを生成するコンパイルの手法である。
274
275
276 % この研究でOSX とLinuxそれぞれで LLVMとGCCのCrossCompileを行う説明
277
278 Raspberry Pi の OS である Rasbian が qemu によるメモリの拡張もできないので、
279 別の手法で Raspberry Pi 上に CbC を実装する方が好ましい。
280
281
282 \chapter{OSX}
283 \label{chap:OSX}
284
285
286 \section{LLVM}
287
288 arm-linux-gnueabihf-gcc というツールチェーンを使用し、C で書かれたファイルを CrossCompile することで OSXで
289 ARM のコードを生成できる事を確認した。その際のコマンドをリスト\ref{OSXCrossCompile}に、生成されたファイルにfileコマンドで調べた結果をリスト\ref{OSXfile}に示す。
290 \begin{lstlisting}[frame=lrbt,label=OSXCrossCompile,caption={CrossCompileの例}]
291 /usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc -g -o hello hello.c
292 \end{lstlisting}
293
294
295 \begin{lstlisting}[frame=lrbt,label=OSXfile,caption={生成したファイル}]
296 $ file hello
297 hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter
298 /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.26,
299 BuildID[sha1]=a78af9ba00197d52a8ed7cbac433b24360c57283, not stripped
300 \end{lstlisting}
301
302
303 \break
304
305 この時、出力は mach-o になるので、mach-o の
306 loader 作ることで CbC が動かせるようになる。
307
308 まだ実装できていないが、OSX 上で行えるためコンパイルの速度向上が望める。
309 OSX 上で コンパイルを行うまでの過程を、図\ref{fig:OSX}に示す。
310
311 \begin{figure}[htpb]
312 \begin{center}
313 \scalebox{0.7}{\includegraphics{images/OSX_2.pdf}}
314 \end{center}
315 \caption{OSX}
316 \label{fig:OSX}
317 \end{figure}
318
319
320 \section{GCC}
321
322 \break
323
324 \chapter{Linux}
325 \section{LLVM}
326
327
328 \section{GCC}
329
330 CrossCompile と別に Linux 環境で CbC を動かした後に、Raspberry Pi に載せる手法がある。
331
332 Linux の LLVM でコンパイルすることができれば elf のコードを書けるようになるので、
333 elf のloader を作る事で、CbC を動かすことができる。
334
335 また、Linux 用の gcc を CbC に書き直す際に、gcc7 に書き直せば linker がそのまま使えるので、
336 Xv6 で動くようになる。
337
338 Xv6とは、マサチューセッツ工科大の大学院生向け講義の教材として使うために、UNIX V6 という OS を
339 ANSI-C に書き換え、x86に移植した OS である。
340 Xv6 は Raspberry Pi に移植する事ができる。ANSI-C で書かれている Xv6 を CbC に書き直す事で、
341 Raspberry Pi で CbC を動かせるようになる。
342
343 Linux 上 で LLVM がコンパイルできない原因はまだ分かってないが、
344 メモリを上げる事でこの方法でもコンパイルの速度向上が望める。
345 Linux 上で コンパイルを行うまでの過程を、図\ref{fig:OSX_Linux_VM}に示す。
346
347 \begin{figure}[htpb]
348 \begin{center}
349 \scalebox{0.8}{\includegraphics{images/OSX_Linux_VM_2.pdf}}
350 \end{center}
351 \caption{OSX Linux VM}
352 \label{fig:OSX_Linux_VM}
353 \end{figure}
354
355 % Xv6詳しく
356
357
358 \begin{lstlisting}[frame=lrbt,label=LinuxCrossCompile,caption={LinuxでのCrossCompile}]
359 ./bin/clang -target arm-linux-gnueabi -mfpu=neon-fp16 -marm -I /net/open/Linux/arm/gcc-arm-none-eabi-7-2017-q4-major/arm-none-eabi/include/ hello.c -c -mfloat-abi=hard
360 \end{lstlisting}
361
362
363 \chapter{今後の課題}
364 \label{chap:Task}
365
366 Xv6 で CbC が動くようになれば、Raspberry Pi 以外のハードウェアでの実装も容易になるので、Linux 上での実装を目指して研究を進めていく。Xv6 で CbC が動けば、続けて Linux 上で Gears OS の実装も行なっていく。
367
368
369
370
371 \break
372
373
374
375 % \addcontentsline{toc}{chapter}{謝辞}
376 \chapter*{謝辞}
377 \addcontentsline{toc}{chapter}{謝辞}
378 \label{chap:Acknowledgments}
379
380
381 %基本的な内容は以下の通り.参考にしてみて下さい.
382 %厳密な決まりは無いので,個々人の文体でも構わない.
383 %GISゼミや英語ゼミに参加した人はその分も入れておく.
384 %順番は重要なので気を付けるように.(提出前に周りの人に確認してもらう.)
385
386 \hspace{1zw}
387
388
389
390
391
392 \chapter*{参考文献}
393 \addcontentsline{toc}{chapter}{参考文献}
394 \label{chap:References}
395
396
397 %\bibitem{*}内の * は各自わかりやすい名前などをつけて、
398 %論文中には \cite{*} のように使用する。
399 %これをベースに書き換えた方が楽かも。
400 %書籍、論文、URLによって若干書き方が異なる。
401 %URLを載せる人は参考にした年月日を最後に記入すること。
402
403 % \begin{thebibliography}
404
405 % \bibitem{cbc}
406 % {徳森 海斗, 河野真治}: LLVM Clang 上の Continuation based C コンパイラの改良
407 % , 琉球大学工学部情報工学科平成 27 年度学位論文(修士) (2015).
408
409 % \end{thebibliography}
410
411
412 % \addcontentsline{toc}{chapter}{付録}
413 \chapter*{付録}
414 \addcontentsline{toc}{chapter}{付録}
415
416
417
418
419
420
421
422
423
424
425 \end{document}
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441