Mercurial > hg > Papers > 2022 > pine-thesis
view paper/text/cbc.tex @ 10:884ba6158dd6
add describe for transpiler
author | Takato Matsuoka <t.matsuoka@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 30 Jan 2022 23:34:06 +0900 |
parents | 06592642eedc |
children | 538bcf79ca64 |
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=12cm]{./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とMetaDataGear} CbCにおいてメタ計算を行うCodeGearをMetaCodeGearといい、特に実行したいCodeGearの直前で実行されるMetaCodeGearをStubCodeGearという。 また、CPUやGPUの情報、計算に必要な全てのDataGearなどメタ計算を行うために必要な情報を持つのがMetaDataGearである。 ノーマルレベルから見るとCodeGearが直接InputDataGearからデータを受け取り、プログラム実行、その後OutputDataGearにデータを書き込んでいるように見えるが、実際にはCodeGear実行の前にMetaCodeGearが実行され、MetaCodeGearを経由してDataGearとデータの受け渡しを行っている。メタレベルの計算をMetaCodeGearが行うことで、ノーマルレベルの計算とメタレベルの計算の分離を実現している。MetaCodeGear、MetaDataGearを含めたCodeGearの遷移を図\ref{figs:MetaCodeGear_flow}に示す。 \begin{figure}[htbp] \begin{center} \includegraphics[width=13cm]{./figs/meta-cg-dg.pdf} \caption{MetaCodeGearを含めたCodeGearの遷移} \label{figs:MetaCodeGear_flow} \end{center} \end{figure}