# HG changeset patch # User tobaru # Date 1509017293 -32400 # Node ID a9af7e7deb1995d8b74c009e4593db7e5894b75a # Parent 8db7c6f424228d5d473a6f89d789ece54fc4ef63 tex修正 diff -r 8db7c6f42422 -r a9af7e7deb19 compile-example.graffle Binary file compile-example.graffle has changed diff -r 8db7c6f42422 -r a9af7e7deb19 crosscompile.graffle Binary file crosscompile.graffle has changed diff -r 8db7c6f42422 -r a9af7e7deb19 mid_thesis.aux --- a/mid_thesis.aux Thu Oct 26 17:58:41 2017 +0900 +++ b/mid_thesis.aux Thu Oct 26 20:28:13 2017 +0900 @@ -4,17 +4,22 @@ \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces goto による code gear 間の継続}}{1}} \newlabel{fig:cs}{{1}{1}} \@writefile{toc}{\contentsline {section}{\numberline {3}Code Gear と Data Gear}{1}} -\@writefile{toc}{\contentsline {section}{\numberline {4}Context}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {4}研究目的}{1}} \citation{*} \bibstyle{junsrt} \bibdata{reference} \bibcite{kaito:2015}{1} \bibcite{gears}{2} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces I-T図の例}}{2}} +\newlabel{fig:examples}{{2}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {5}Raspberry Pi 上での実装}{2}} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Raspberry Pi}}{2}} +\newlabel{fig:RaspberryPi}{{3}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {6}LLVM CrossCompile}{2}} +\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces OSX}}{2}} +\newlabel{fig:OSX}{{4}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {7}仮想マシン}{2}} +\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces OSX Linux VM}}{2}} +\newlabel{fig:OSX_Linux_VM}{{5}{2}} \bibcite{kokubo:2016}{3} \bibcite{llvm}{4} -\@writefile{toc}{\contentsline {section}{\numberline {5}Raspberry Pi 上での実装}{2}} -\@writefile{toc}{\contentsline {section}{\numberline {6}LLVM CrossCompile}{2}} -\@writefile{toc}{\contentsline {section}{\numberline {7}仮装マシン}{2}} -\@writefile{toc}{\contentsline {section}{\numberline {8}clang のバージョンアップ}{2}} -\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces clang による コンパイル}}{2}} -\newlabel{fig:cs}{{2}{2}} diff -r 8db7c6f42422 -r a9af7e7deb19 mid_thesis.dvi Binary file mid_thesis.dvi has changed diff -r 8db7c6f42422 -r a9af7e7deb19 mid_thesis.log --- a/mid_thesis.log Thu Oct 26 17:58:41 2017 +0900 +++ b/mid_thesis.log Thu Oct 26 20:28:13 2017 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.5.28) 26 OCT 2017 16:14 +This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.5.28) 26 OCT 2017 20:24 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -129,6 +129,15 @@ \Urlmuskip=\muskip10 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) +(/usr/local/texlive/2016/texmf-dist/tex/latex/here/here.sty) +(/usr/local/texlive/2016/texmf-dist/tex/latex/float/float.sty +Package: float 2001/11/08 v1.3d Float enhancements (AL) +\c@float@type=\count113 +\float@exts=\toks16 +\float@box=\box44 +\@float@everytoks=\toks17 +\@floatcapt=\box45 +) ! LaTeX Error: File `dummy.tex' not found. @@ -140,41 +149,37 @@ LaTeX Warning: Unused global option(s): [9.5pt]. -(./mid_thesis.aux - -LaTeX Warning: Label `fig:cs' multiply defined. - -) +(./mid_thesis.aux) \openout1 = `mid_thesis.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 24. -LaTeX Font Info: ... okay on input line 24. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 24. -LaTeX Font Info: ... okay on input line 24. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 24. -LaTeX Font Info: ... okay on input line 24. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 24. -LaTeX Font Info: ... okay on input line 24. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 24. -LaTeX Font Info: ... okay on input line 24. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 24. -LaTeX Font Info: ... okay on input line 24. -LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 24. -LaTeX Font Info: ... okay on input line 24. -LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 24. -LaTeX Font Info: ... okay on input line 24. +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <12> on input line 29. +(Font) <12> on input line 31. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <8> on input line 29. +(Font) <8> on input line 31. LaTeX Font Info: External font `cmex10' loaded for size -(Font) <6> on input line 29. +(Font) <6> on input line 31. LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <14.4> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 32. +(Font) Font shape `JT1/gt/m/n' tried instead on input line 34. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <14.4> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 32. +(Font) Font shape `JY1/gt/m/n' tried instead on input line 34. -Underfull \hbox (badness 1735) in paragraph at lines 41--45 +Underfull \hbox (badness 1735) in paragraph at lines 43--47 []\OT1/cmr/m/n/10 Gears OS \JY1/mc/m/n/10 の実装には \OT1/cmr/m/n/10 LLVM/Clang \JY1/mc/m/n/10 上に実装した [] @@ -193,24 +198,41 @@ ] -File: pic/compiler.pdf Graphic file (type pdf) - (./mid_thesis.bbl +File: pic/examples.pdf Graphic file (type pdf) + +Overfull \hbox (6.97194pt too wide) in paragraph at lines 75--76 + [] + [] + +File: pic/RaspberryPi.pdf Graphic file (type pdf) + +Overfull \hbox (13.45076pt too wide) in paragraph at lines 90--91 + [] + [] + +File: pic/OSX.pdf Graphic file (type pdf) + +File: pic/OSX_Linux_VM.pdf Graphic file (type pdf) + +Overfull \hbox (1.1546pt too wide) in paragraph at lines 123--124 + [] + [] + +(./mid_thesis.bbl [2] LaTeX Font Info: External font `cmex10' loaded for size (Font) <7> on input line 17. LaTeX Font Info: External font `cmex10' loaded for size (Font) <5> on input line 17. -) [2] (./mid_thesis.aux) - -LaTeX Warning: There were multiply-defined labels. +) [3 - ) +] (./mid_thesis.aux) ) Here is how much of TeX's memory you used: - 1194 strings out of 493693 - 14649 string characters out of 6149787 - 80544 words of memory out of 5000000 - 4772 multiletter control sequences out of 15000+600000 + 1272 strings out of 493693 + 15880 string characters out of 6149787 + 82434 words of memory out of 5000000 + 4839 multiletter control sequences out of 15000+600000 13256 words of font info for 52 fonts, out of 8000000 for 9000 929 hyphenation exceptions out of 8191 27i,15n,43p,530b,367s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on mid_thesis.dvi (2 pages, 12136 bytes). +Output written on mid_thesis.dvi (3 pages, 13312 bytes). diff -r 8db7c6f42422 -r a9af7e7deb19 mid_thesis.pdf Binary file mid_thesis.pdf has changed diff -r 8db7c6f42422 -r a9af7e7deb19 mid_thesis.tex --- a/mid_thesis.tex Thu Oct 26 17:58:41 2017 +0900 +++ b/mid_thesis.tex Thu Oct 26 20:28:13 2017 +0900 @@ -4,6 +4,8 @@ \usepackage{fancyhdr} \usepackage{abstract} \usepackage{url} +% \usepackage{nidunfloat} +\usepackage{here} %\pagestyle{fancy} \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 卒業研究中間発表会} \rhead{} @@ -41,7 +43,7 @@ Gears OS の実装には LLVM/Clang 上に実装した CbC(Continuation based C)を用いる。\\ CbC は Code Segment を基本的な処理単位とする。C の関数とは異なり返り値を持たないが、Code Segment の宣言は C の関数の構文と同じように行い、型に \_\_code を用いる。\\ CbC は for 文や while 文といったループ制御構文を持たないので、ループ処理は自分自身への再帰的な継続を行う事で実現する。\\ - 現在の Code Segment から次の Code Segment への移動は goto の後に Code Segment 名と引数を並べて記述する。この goto による処理の遷移を継続と呼ぶ。C と異なり、戻り値を持たない Code Segment ではスタックに値を積んで行く必要が無くスタックは変更されない。このようなスタックに値を積まない継続を軽量継続と呼ぶ。この軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。\\ + 現在の Code Segment から次の Code Segment への移動は goto の後に Code Segment 名と引数を並べて記述する。この goto による処理の遷移を継続と呼ぶ。C と異なり、戻り値を持たない Code Segment ではスタックに値を積んで行く必要が無くスタックは変更されない。このようなスタックに値を積まない継続を軽量継続と呼ぶ。この軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。 \begin{figure}[htpb] @@ -57,44 +59,81 @@ Code Gear はプログラムの処理そのものであり、任意の数の Data Gear を参照し、処理が完了すると任意の数の Data Gear に書き込む。Code Gear は接続された Data Gear 以外にアクセスできない。Code Segment と同じように Code Gear から次の Code Gear への処理の移動は goto の後に Code Gear の名前と引数を指定する事で実現できる。 Data Gear はデータそのものを表す。int や 文字列などの Primitive Data Type を持っている。Gear の特徴として処理やデータの構造が Code Gear、Data Gear に閉じている事にある。これにより、実行時間、メモリ使用量などを予測可能なものにすることができる。 -\section{Context} - 接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear 等のためのメモリ空間を持っており、Context を通してアクセスすることができる。Context にはメインとなる Context と Worker 用の Context がある。Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉する事はできない。 +% \section{Context} +% 接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear 等のためのメモリ空間を持っており、Context を通してアクセスすることができる。Context にはメインとなる Context と Worker 用の Context がある。Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉する事はできない。 + + + + +\section{研究目的} +本研究では、ARM で動くシングルボードコンピュータである Raspberry Pi 上で Gears OS を動かせるようになる事で、ハードウェア上でも信頼性があり、並列実行ができるプログラミングを を記述できるようになる事を目指している。\\ +CbC を Raspberry Pi で動かすためのアプローチの手法を、I と T の形をした図の組み合わせによって説明を行う。I の上部分に cbclang や Xv6 などのソースコード名を、下部分にその機能の記述言語を記してある。T の下にある I は特別で、上に VM 下に VM を乗せている OS が記されている。 T の上部分は左に入力されるファイル、右に出力されるその機能によって出力されるファイルが記され、下部分にその機能の記述言語が記されている。\\ +例として、cbclang のソースコード(I)と、 Raspberry Pi 上の clang (T) を図\ref{fig:examples} に示す。 + +\begin{figure}[htpb] + \begin{center} + \scalebox{0.5}{\includegraphics{pic/examples.pdf}} + \end{center} + \caption{I-T図の例} + \label{fig:examples} +\end{figure} + + + \section{Raspberry Pi 上での実装} -本研究では、ARM で動くシングルボードコンピュータである Raspberry Pi 上で Gears OS を動かせるようになる事で、ハードウェア上でも信頼性があり、並列実行ができるプログラミングを を記述できるようになる事を目指している。\\ - Raspberry Pi の OS である Raspbian ではメモリが 256MB なので Raspberry Pi 上で直接 CbC をコンパイルする事ができない。qemu によるメモリの拡張もできないので、別の手法で Raspberry Pi 上に CbC を実装する必要がある。 + Raspberry Pi の OS である Raspbian ではメモリが 256MB なので Raspberry Pi 上で直接 CbC をコンパイルするには時間がかかる。qemu によるメモリの拡張もできないので、別の手法で Raspberry Pi 上に CbC を実装する方が好ましい。\\ +Raspberry Pi でコンパイルを行うまでの過程を、図\ref{fig:RaspberryPi}に示す。 + +\begin{figure}[htpb] + \begin{center} + \scalebox{0.35}{\includegraphics{pic/RaspberryPi.pdf}} + \end{center} + \caption{Raspberry Pi} + \label{fig:RaspberryPi} +\end{figure} + + \section{LLVM CrossCompile} Raspberri pi 上ではコンパイルするためのメモリが足りないので、OSX 上で CrossCompile する事でこの問題を解決する方法がある。\\ CrossCompile とは、別の OS で実行可能なコードを生成するコンパイルの手法である。つまり、OSX であらかじめ Raspberry Pi で CbC が動くように CrossCompile を行い、そのコードを Raspberry Pi に移せばよい。\\ -arm-linux-gnueabihf-gcc を使用し、C で書かれたファイルを CrossCompile することで ARM のコードを生成できる事を確認した。CbC でも CrossCompile できるコンパイラを書く必要がある。 +arm-linux-gnueabihf-gcc を使用し、C で書かれたファイルを CrossCompile することで ARM のコードを生成できる事を確認した。CbC でも CrossCompile できるコンパイラを書く必要がある。OSX 上で コンパイルを行うまでの過程を、図\ref{fig:OSX}に示す。 + +\begin{figure}[htpb] + \begin{center} + \scalebox{0.35}{\includegraphics{pic/OSX.pdf}} + \end{center} + \caption{OSX} + \label{fig:OSX} +\end{figure} -\section{仮装マシン} + +\section{仮想マシン} CrossCompile と別に linux 環境で CbC を動かした後に、Raspberry Pi に載せる手法がある LLVM を動かす際に、オプションで target を指定する事で、ARM のコードを生成することができる。\\ linux 用の gcc を CbC に書き直す際に、gcc7 に書き直せば linker がそのまま使えるので、xv6 で動くようになる。\\ xv6とは、マサチューセッツ工科大の大学院生向け講義の教材として使うために、UNIX V6 という OS を ANSI-C に書き換え、x86に移植した OS である。 -xv6 は Raspberry Pi に移植する事ができる。ANSI-C で書かれている xv6 を CbC に書き直す事で、Raspberry Pi で CbC を動かせるようになる。 +xv6 は Raspberry Pi に移植する事ができる。ANSI-C で書かれている xv6 を CbC に書き直す事で、Raspberry Pi で CbC を動かせるようになる。Linux 上で コンパイルを行うまでの過程を、図\ref{fig:OSX_Linux_VM}に示す + +\begin{figure}[htpb] + \begin{center} + \scalebox{0.35}{\includegraphics{pic/OSX_Linux_VM.pdf}} + \end{center} + \caption{OSX Linux VM} + \label{fig:OSX_Linux_VM} +\end{figure} % xv6詳しく -\section{clang のバージョンアップ} - CbC はバージョン 3.9 の clang を使用している。現在のバージョンの LLVM と clang を使用して、CbCをコンパイラできるように修正を加える必要がある。 +% \section{clang のバージョンアップ} +% CbC はバージョン 3.9 の clang を使用している。現在のバージョンの LLVM と clang を使用して、CbCをコンパイラできるように修正を加える必要がある。 -\begin{figure}[htpb] - \begin{center} - \scalebox{0.5}{\includegraphics{pic/compiler.pdf}} - \end{center} - \caption{clang による コンパイル} - \label{fig:cs} -\end{figure} - - -% cross compiler 実機 VM への実装を書く +% cross compiler, 実機, VM への実装を書く \nocite{*} \bibliographystyle{junsrt}