view paper/text/cbc.tex @ 8:06592642eedc

add figs
author Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp>
date Sun, 30 Jan 2022 16:03:45 +0900
parents 82fe279ce2cd
children 884ba6158dd6
line wrap: on
line source

\chapter{Continuation Based C}
Continuation Based C(CbC)\cite{cbc_kono}とは、本研究室で開発している軽量継続を導入したC言語の下位言語である。軽量継続とはSchemeのcall/ccなどの環境を持つ継続とは異なり、スタックが無く環境を持たない継続である。そのためcall/ccよりも軽量であることから軽量継続と呼ばれる。

\section{CodeGear}
CbCは従来のプログラミング言語における関数ではなくCodeGearという単位でプログラムを記述する。プログラムの遷移はCodeGearからCodeGearへの遷移によって実現され、軽量継続であるgoto文を用いて行われる。
CbCは軽量継続により遷移を行うため、次のCodeGearへ継続すると継続前のCodeGearに戻ることができない。
gotoによる軽量継続を用いたCodeGearの継続の流れが図\ref{figs:CbC_goto_example}である。

\begin{figure}[htbp]
  \begin{center}
   \includegraphics[width=7.5cm]{./figs/CbC_goto_example.png}
   \caption{gotoによる軽量継続を用いたCodeGear遷移}
   \label{figs:CbC_goto_example}
   \end{center}
\end{figure}

\section{DataGear}
CodeGearと同じくCbCにおけるプログラミング単位の一つである。CodeGearから次のCodeGearへの継続の際に、データの受け渡しに用いられるのがDataGearである。
特に、CodeGearからの入力を受け取るDataGearをInputDataGear、CodeGear実行後にCodeGearからの出力を受け取るDataGearをOutputDataGearという。

\section{メタ計算}
記述したプログラムの計算を行うためには、メモリ管理や、スレッド管理、GPUの資源管理などのOSレベルの計算を行う必要がある。このOSレベルの計算をメタ計算と呼び、ユーザーが記述したプログラムをノーマルレベルの計算と呼ぶことで2つの計算を区別している。

\section{MetaCodeGear}
CbCにおいてメタ計算を行うCodeGearをMetaCodeGearといい、特に実行したいCodeGearの直前で実行されるMetaCodeGearをStubCodeGearという。ノーマルレベルから見るとCodeGearが直接InputDataGearからデータを受け取り、プログラム実行、その後OutputDataGearにデータを書き込んでいるように見えるが、実際にはCodeGear実行の前にMetaCodeGearが実行され、MetaCodeGearを経由してDataGearとデータの受け渡しを行っている。メタレベルの計算をMetaCodeGearが行うことで、ノーマルレベルの計算とメタレベルの計算の分離を実現している。MetaCodeGear、DataGearを含めたCodeGearの遷移を図\ref{figs:MetaCodeGear_flow}に示す。

\begin{figure}[htbp]
  \begin{center}
   \includegraphics[width=9.1cm]{./figs/meta-cg-dg.pdf}
   \caption{MetaCodeGearを含めたCodeGearの遷移}
   \label{figs:MetaCodeGear_flow}
   \end{center}
\end{figure}

\section{MetaDataGear}
CPUやGPUの情報、計算に必要な全てのDataGearなどメタ計算を行うために必要な情報を持つのがMetaDataGearである。