changeset 11:eb43376ecb12

今後の課題など追加
author tobaru
date Fri, 27 Oct 2017 18:31:05 +0900
parents cf9fc50057b3
children bf98aab22a60
files mid_thesis.aux mid_thesis.dvi mid_thesis.log mid_thesis.pdf mid_thesis.tex
diffstat 5 files changed, 48 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/mid_thesis.aux	Fri Oct 27 17:20:52 2017 +0900
+++ b/mid_thesis.aux	Fri Oct 27 18:31:05 2017 +0900
@@ -1,10 +1,10 @@
 \relax 
 \@writefile{toc}{\contentsline {section}{\numberline {1}Gears OS}{1}}
 \@writefile{toc}{\contentsline {section}{\numberline {2}CbC}{1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces goto による Code Segment 間の継続}}{1}}
-\newlabel{fig:cs}{{1}{1}}
 \@writefile{toc}{\contentsline {section}{\numberline {3}Code Gear と Data Gear}{1}}
-\@writefile{toc}{\contentsline {section}{\numberline {4}研究目的}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {4}Raspberry Pi 上の Gears OS}{1}}
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces 図の例}}{1}}
+\newlabel{fig:examples}{{1}{1}}
 \citation{*}
 \bibstyle{junsrt}
 \bibdata{reference}
@@ -12,14 +12,13 @@
 \bibcite{gears}{2}
 \bibcite{kokubo:2016}{3}
 \bibcite{llvm}{4}
-\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces 図の例}}{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{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Raspberry Pi}}{2}}
+\newlabel{fig:RaspberryPi}{{2}{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{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces OSX}}{2}}
+\newlabel{fig:OSX}{{3}{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}}
+\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces OSX Linux VM}}{2}}
+\newlabel{fig:OSX_Linux_VM}{{4}{2}}
+\@writefile{toc}{\contentsline {section}{\numberline {8}今後の課題}{2}}
Binary file mid_thesis.dvi has changed
--- a/mid_thesis.log	Fri Oct 27 17:20:52 2017 +0900
+++ b/mid_thesis.log	Fri Oct 27 18:31:05 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)  27 OCT 2017 17:20
+This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.5.28)  27 OCT 2017 18:30
 entering extended mode
  restricted \write18 enabled.
  %&-line parsing enabled.
@@ -183,8 +183,8 @@
  \JY1/mc/m/n/10 上に実装した
  []
 
-File: pic/codesegment.pdf Graphic file (type pdf)
-<pic/codesegment.pdf>
+File: pic/examples_2.pdf Graphic file (type pdf)
+<pic/examples_2.pdf>
 File: pic/emblem-bitmap.pdf Graphic file (type pdf)
  <pic/emblem-bitmap.pdf>
 
@@ -197,16 +197,13 @@
 
 
 ]
-File: pic/examples_2.pdf Graphic file (type pdf)
- <pic/examples_2.pdf>
 File: pic/RaspberryPi_2.pdf Graphic file (type pdf)
  <pic/RaspberryPi_2.pdf>
 File: pic/OSX_2.pdf Graphic file (type pdf)
  <pic/OSX_2.pdf>
 File: pic/OSX_Linux_VM_2.pdf Graphic file (type pdf)
-
-<pic/OSX_Linux_VM_2.pdf>
-Overfull \hbox (12.99443pt too wide) in paragraph at lines 122--123
+ <pic/OSX_Linux_VM_2.pdf>
+Overfull \hbox (12.99443pt too wide) in paragraph at lines 129--130
  [] 
  []
 
@@ -215,16 +212,14 @@
 (Font)              <7> on input line 17.
 LaTeX Font Info:    External font `cmex10' loaded for size
 (Font)              <5> on input line 17.
- [2]) [3
-
-] (./mid_thesis.aux) ) 
+) [2] (./mid_thesis.aux) ) 
 Here is how much of TeX's memory you used:
- 1265 strings out of 493693
- 15697 string characters out of 6149787
+ 1261 strings out of 493693
+ 15618 string characters out of 6149787
  81577 words of memory out of 5000000
- 4836 multiletter control sequences out of 15000+600000
+ 4833 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 (3 pages, 13316 bytes).
+Output written on mid_thesis.dvi (2 pages, 13076 bytes).
Binary file mid_thesis.pdf has changed
--- a/mid_thesis.tex	Fri Oct 27 17:20:52 2017 +0900
+++ b/mid_thesis.tex	Fri Oct 27 18:31:05 2017 +0900
@@ -33,7 +33,7 @@
 \section{Gears OS}
 当研究室では、Code Segment と Data Segment によって構成される Gears OS の開発を行っている。Gears OS は、並列プログラミングフレームワークの Cerium と 分散フレームワークの Alice の開発を通して得られた知見を元に開発を進めている。 \\
   Cerium はオブジェクト指向言語である C++ を用いて開発した並列プログラミングフレームワークである。Cell、マルチコアCPU、GPU を用いた並列実行をサポートしている。並列処理の単位として Task を記述し、Task に他の Task との依存関係を設定する事で並列実行を実現するが、データは汎用ポインタで Task に渡されるため、データの依存関係を保証できない。データの正しさや依存関係を保証できていないので、並列処理は行えるが、信頼性が低い。その知見から、並列分散処理 には Code の分割だけではなく Data の分割も必要である事が分かった。\\
-  Alice では処理の単位である、 Code Segment、データの単位である Data Segment を用いてプログラムを記述する。Code Segment は使用する Input Data Segment、Output Data Segment  を指定することで処理とデータの依存関係を解決する。Gears OSでは、Gear という単位を用いてプログラムを Code Gear、Data Gear に細かく分割するが、これは Alice のCode Segment、Data Segment にそれぞれ対応する。\\
+%  Alice では処理の単位である、 Code Segment、データの単位である Data Segment を用いてプログラムを記述する。Code Segment は使用する Input Data Segment、Output Data Segment  を指定することで処理とデータの依存関係を解決する。Gears OSでは、Gear という単位を用いてプログラムを Code Gear、Data Gear に細かく分割するが、これは Alice のCode Segment、Data Segment にそれぞれ対応する。\\
   Gears OS では 当研究室で開発している CbC を用いて Data Sement を定義し、実装を行っている。
 %当研究室で開発している Code Segment を処理単位とする プログラミング言語 CbC を用いて Data Segment を定義し、Gears OS の実装を行っている。
 
@@ -45,13 +45,13 @@
    現在の Code Segment から次の Code Segment への移動は goto の後に Code Segment 名と引数を並べて記述する。この goto による処理の遷移を継続と呼ぶ。C と異なり、戻り値を持たない Code Segment ではスタックに値を積んで行く必要が無くスタックは変更されない。このようなスタックに値を積まない継続を軽量継続と呼ぶ。この軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。
 
 
-\begin{figure}[htpb]
- \begin{center}
-  \scalebox{0.5}{\includegraphics{pic/codesegment.pdf}}
- \end{center}
- \caption{goto による Code Segment 間の継続}
- \label{fig:cs}
-\end{figure}
+% \begin{figure}[htpb]
+%  \begin{center}
+%   \scalebox{0.5}{\includegraphics{pic/codesegment.pdf}}
+%  \end{center}
+%  \caption{goto による Code Segment 間の継続}
+%  \label{fig:cs}
+% \end{figure}
 
 \section{Code Gear と Data Gear}
 Gears OS では、プログラムの単位として Gear を用いる。Gear は並列実行の単位、データの分割、Gear 間の接続等になる。
@@ -64,7 +64,7 @@
 
 
 
-\section{研究目的}
+\section{Raspberry Pi 上の Gears OS}
 本研究では、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} に示す。
@@ -81,7 +81,9 @@
 
 
 \section{Raspberry Pi 上での実装}
-  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 1 では、メモリが足りないため CbC をコンパイルすることができない。Raspberry Pi 3 だとコンパイルできるが、時間がかかる。qemu によるメモリの拡張もできないので、別の手法で Raspberry Pi 上に CbC を実装する方が好ましい。\\
+
 Raspberry Pi でコンパイルを行うまでの過程を、図\ref{fig:RaspberryPi}に示す。
 
 \begin{figure}[htpb]
@@ -96,9 +98,12 @@
 
 
 \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 できるコンパイラを書く必要がある。OSX 上で コンパイルを行うまでの過程を、図\ref{fig:OSX}に示す。
+OSX 上で CrossCompile する事でコンパイルの時間の問題を解決する方法がある。\\
+% CrossCompile とは、別の OS で実行可能なコードを生成するコンパイルの手法である。つまり、OSX であらかじめ Raspberry Pi で CbC が動くように CrossCompile を行い、そのコードを Raspberry Pi に移せばよい。\\ 
+  CrossCompile とは、別の OS で実行可能なコードを生成するコンパイルの手法である。
+arm-linux-gnueabihf-gcc を使用し、C で書かれたファイルを CrossCompile することで ARM のコードを生成できる事を確認した。この時、出力は mach-o になるので、mach-o の loader 作ることで Raspberry Pi で動かせるようになる。\\
+  まだ実装できていないが、OSX 上で行えるためコンパイルの速度向上が望める。
+OSX 上で コンパイルを行うまでの過程を、図\ref{fig:OSX}に示す。
 
 \begin{figure}[htpb]
  \begin{center}
@@ -111,11 +116,13 @@
 
 
 \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 を動かせるようになる。Linux 上で コンパイルを行うまでの過程を、図\ref{fig:OSX_Linux_VM}に示す
+CrossCompile と別に Linux 環境で CbC を動かした後に、Raspberry Pi に載せる手法がある。\\
+ Linux の LLVM でコンパイルすることができれば elf のコードを書けるようになるので、elf のloader を作る事で、Raspberry Pi で動くようになる。\\
+  また、Linux 用の gcc を CbC に書き直す際に、gcc7 に書き直せば linker がそのまま使えるので、Xv6 で動くようになる。\\
+  Xv6とは、マサチューセッツ工科大の大学院生向け講義の教材として使うために、UNIX V6 という OS を ANSI-C に書き換え、x86に移植した OS である。
+Xv6 は Raspberry Pi に移植する事ができる。ANSI-C で書かれている Xv6 を CbC に書き直す事で、Raspberry Pi で CbC を動かせるようになる。\\
+  Linux 上 で LLVM がコンパイルできない原因はまだ分かってないが、メモリを上げる事でこの方法でもコンパイルの速度向上が望める。 
+Linux 上で コンパイルを行うまでの過程を、図\ref{fig:OSX_Linux_VM}に示す
 
 \begin{figure}[htpb]
  \begin{center}
@@ -125,8 +132,10 @@
  \label{fig:OSX_Linux_VM}
 \end{figure}
 
+% Xv6詳しく
 
-% xv6詳しく
+\section{今後の課題}
+  Xv6 で CbC が動くようになれば、Raspberry Pi 以外のハードウェアでの実装も容易になるので、Linux 上での実装を目指して研究を進めていく。Xv6 で CbC が動けば、続けて Linux 上で Gears OS の実装も行なっていく。
 
 
 % \section{clang のバージョンアップ}