view paper/cbc.tex @ 2:c7acb9211784

add code, figure. and paper fix content
author ryokka
date Mon, 27 Jan 2020 20:41:36 +0900
parents ee44dbda6bd3
children b5fffa8ae875
line wrap: on
line source

% だいたい sigss のやつ

\chapter{Continuation based C}
Continuation based C\cite{cbc} (以下 CbC) は CodeGear を処理の単位、 DataGear をデータの単位として記述するプログラミング言語である。 CbC は C 言語とほぼ同じ構文を持つが、よりアセンブラに近いプログラムを記述することになる。
CbC でのプログラミングは DataGear を CodeGear で変更し、その変更を次の CodeGear に渡して処理を実行する。
現在 CbC の処理系には llvm/clang による実装\cite{llvm}と gcc\cite{gcc} による実装が存在する。

本章は CbC についての説明を行う。

\section{Code GearとData Gear}
当研究室では検証しやすいプログラムの単位として DataGear と CodeGear という
単位を用いるプログラミングスタイルを提案している。

DataGear は CodeGear で扱うデータの単位であり、処理に必要なデータである。
CodeGear の入力となる DataGear を Input DataGear と呼び、
出力は Output DataGear と呼ぶ。

CodeGear はプログラムの処理そのもので、図 Code \ref{fig:cgdg}で示しているように任意の数の
Input DataGear を参照し、処理が完了すると任意の数の Output DataGear に書き込む。

CodeGear 間の移動は継続を用いて行われる。継続は関数呼び出しとは異なり、呼び出し
た後に元のコードに戻らず、次の CodeGear へ継続を行う。
これは、関数型プログラミングでは末尾関数呼び出しを行うことに相当する。

図\ref{fig:csds}のように Input DataGear を受け取り、 CodeGear で処理を行い、
Output DataGear に変更を加え、プログラム全体を記述する。

\begin{figure}[htpb]
 \begin{center}
  \scalebox{0.55}{\includegraphics{fig/csds.pdf}}
 \end{center}
 \caption{CodeGear と DataGear}
 \label{fig:csds}
\end{figure}


\section{メタ計算}

%% プログラムの記述する際は、ノーマルレベルの計算の他に、メモリ管理、スレッド管理、CPUがGPUの資源管理等を記述しなければならない処理が存在する。
%% これらの計算はノーマルレベルの計算と区別してメタ計算と呼ぶ。
メタ計算(自己反映計算)\cite{weko_5056_1} とはプログラムを記述する際に通常の処理
と分離し、他に記述しなければならない処理である。例えば、プログラム実行時のメモリ管
理やスレッド管理、資源管理等の計算がこれに当たる。

メタ計算は関数型言語では Monad\cite{moggi-monad} を用いて表現される\cite{kkb-sigos}。
Monad は Haskell では実行時の環境を記述する構文として使われる。

従来の OS では、メタ計算はシステムコールやライブラリーコールの単位で行われる。
実行時にメタ計算の変更を行う場合には OS 内部のパラメータの変更を使用し、実行されるユーザープログラム自体への変更は限定的である。
しかし、メタ計算は性能測定あるいはプログラム検証、さらに並列分散計算のチューニングなど細かい処理が必要で実際のシステムコール単位では不十分である。
例えば、モデル検査ではアセンブラあるいは バイトコード、インタプリタレベルでのメタ計算が必要になる。
しかし、バイトコードレベルでは粒度が細かすぎて扱いが困難になっている。具体的にはメタ計算の実行時間が大きくなってしまう。

\section{Context}
CbC では、接続可能な全ての CodeGear、 DataGear のリスト、Temporal DataGear のためのメモリ空間などを
Context として保持している。
CbC で必要な CodeGear 、 DataGear を参照する際は Context を通してアクセスする必要がある。

\section{Meta Gears}
Meta Gear は CbC 上でのメタ計算で、通常の CodeGear を実行する際に必要なメタ計算を分離するための CodeGear である。
例えば、 CodeGear を実行する際、必要な DataGear を Context を通して取得する必要があるが、ユーザーが Context から直接データを扱える状態は信頼性が高いとは言えない。
そのために、 CbC では Meta CodeGear を用いて Context から必要な DataGear を取り出し、 CodeGear に接続する stub CodeGear という Meta CodeGear を定義している。