changeset 7:f218f749eba9

Add CbC section
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 28 Oct 2015 07:05:08 +0900
parents 1e530e8bb7ef
children e2a7e7102521
files midterm.pdf midterm.tex pic/codesegment.pdf
diffstat 3 files changed, 25 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
Binary file midterm.pdf has changed
--- a/midterm.tex	Tue Oct 27 15:34:26 2015 +0900
+++ b/midterm.tex	Wed Oct 28 07:05:08 2015 +0900
@@ -19,7 +19,7 @@
 
 \input{dummy.tex}
 \begin{document}
-\title{Code Gear, Data Gearに基づくGears OS の設計}
+\title{Code Gear、 Data Gearに基づくGears OS の設計}
 \author{125716B 氏名 {伊波}{立樹} 指導教員 : 河野 真治}
 \date{}
 \maketitle
@@ -61,22 +61,38 @@
 これにより、並列実行時のデッドロックの検出などを行うことでプログラムの信頼性を確保する。
 Model Checking の実現には Meta Code/Data Gearを用いる。
 
-本研究室で開発している CbC(Continuation based C)\cite{cbc-llvm} を用いて、Gears OS を実装する。
-CbC はプログラムを Code Segment, Data Segment という単位で記述する。
-CbC において Code Segment 間の処理の移動は function call ではなく、goto を用いた軽量継続を用いる。
-
 Gears OS は Many Core CPU, GPU といった並列実行環境に合わせた設計・実装を行う。
 また、接続する Gear を変更することでプログラムの振る舞いを変更することを可能にする柔軟性、Monad に基づくメタ計算による並行制御、Model Checking を用いた信頼性の確保を目的とする。
 
+\section{Continuation based C}
+Gears OS は本研究室で開発している CbC(Continutaion based C)\cite{cbc-llvm} を用いて実装を行う。
+
+CbC のプログラムでは C の関数の代わりに Code Segment を用いて処理を記述している。
+Code Segment は C の関数と異なり戻り値を持たない。
+Code Segment の宣言はCの関数の構文と同様に行い、型に \_\_code を使うことで宣言できる。
+
+Code SegmentからCode Segmentへの移動は goto の後にCode Segment 名と引数を並べて記述するという CbC独自の構文で行う。
+この goto による処理の遷移を継続と呼ぶ。 
+図\ref{fig:codesegment}はCode Segment 間の継続関係を表している。
+
+C では関数呼び出しを繰り返し行う場合、呼びだされた関数の引数の数だけスタックに値が積まれていくが、戻り値を持たない Code Segment ではスタックに値を積んでいく必要が無くスタックを変更する必要が無い。
+このようなスタックに値を積まない継続、つまり呼び出し元の環境を持たない継続を軽量継続と呼び、軽量継続による並列化、ループ制御、関数コールとスタックの意識した最適化がソースコードで行えるようになる。
+
+\begin{figure}[ht]
+    \centering
+    \includegraphics[width=70mm]{pic/codesegment.pdf}
+    \caption{goto による Code Segment 間の継続}
+    \label{fig:codesegment}
+\end{figure}
+
+
 \section{Code Gear と Data Gear}
 Gears OS ではプログラムの実行単位として様々な Gear を使う。
 Gear が平行実行の単位、データ分割、Gear 間の接続などになる。
 
-Code Gear はプログラムの実行コードそのものであり、OpenCL\cite{opencl}/CUDA\cite{cuda}
-の kernel に相当する。
+Code Gear はプログラムの実行コードそのものであり、OpenCL\cite{opencl}/CUDA\cite{cuda} の kernel に相当し、 CbC では Code Segment で記述を行う。
 
-Code Gear 処理の基本として、 Input Data Gear を参照し、一つまたは複数の Output Data Gear に書
-き込む。また、接続された Data Gear 以外には参照を行わない。
+Code Gear は処理の基本として、 Input Data Gear を参照し、一つまたは複数の Output Data Gear に書き込む。また、接続された Data Gear 以外には参照を行わない。
 
 Code Gear はfunction callではないので、呼び出し元に戻る概念はない。
 その代わりに、次に実行する Code Gear を指定する機能(軽量継続)を持つ。
Binary file pic/codesegment.pdf has changed