Mercurial > hg > Papers > 2019 > mitsuki-master
view paper/gearsOS.tex @ 9:ddf62b739703
update
author | mir3636 |
---|---|
date | Fri, 25 Jan 2019 03:48:23 +0900 |
parents | 66fa6f0b1ff6 |
children | 6c375f3eef72 |
line wrap: on
line source
\chapter{Gears OS の構成} Gears OS は以下の要素で構成される。 ・Context ・TaskManager ・TaskQueue ・Workers 図\ref{fig:gearsos} に Gears OS の構成図を示す。 \begin{figure}[ht] \begin{center} \includegraphics[width=160mm]{./fig/gears_structure} \end{center} \caption{Gears OS の構成図} \label{fig:gearsos} \end{figure} Data Gear は union と struct によって表現される。 Context には Data Gear の Data Type の情報が格納されている。 この情報から確保する Data Gear のサイズなどを決定する。 %Context は Task でもあり、Taskは通常のOSのスレッドに対応する。 %Task は実行する Code Gear と Data Gear をすべて持っている。 TaskManager は Task を実行する Worker の生成、管理、Task の送信を行う。 Gears OS における Task Queue は Synchronized Queue で実現される。 Worker は TaskQueue から Task である Context を取得し、Task の Code Gear を実行し、Output Data Gear の書き出しを行っている。 Input/Output Data Gear の依存関係が解決されたものから並列実行される。 \section{Context} Context は Task でもあり、Taskは通常のOSのスレッドに対応する。 Task は実行する Code Gear と Data Gear をすべて持っている。 Context は、ソースコード \ref{contexth} のように定義されている。 ソースコード \ref{contexth} 5、6行目で記述されているように Code Gear のリスト、Data Gear のリストを持っている。 ソースコード \ref{contexth} 13〜30行目は並列実行用の Task として扱うための情報である。 Context が持つ Data Gear のメモリ空間は事前に確保され、 Data Gear のメモリ確保の際に heap の値をずらしメモリを割り当てる。 Data Gear は構造体で定義されている。 メタ計算では任意の Data Gear を一律で扱うため、全て union で定義されている。(ソースコード \ref{contexth} 33行目〜) \lstinputlisting[label=contexth, caption=Context]{./src/context.h} Context は、ソースコード \ref{enumCodeh} のように Code Gear の番号を持っており。 初期化の際に Code Gear のアドレスと対応付けている。(ソースコード \ref{initContext}) \begin{lstlisting}[frame=lrbt,label=enumCodeh,caption={\footnotesize enum で定義された Code Gear の番号}] enum Code { C_popSingleLinkedStack, C_pushSingleLinkedStack, C_stackTest3, C_assert3, ... }; \end{lstlisting} \begin{lstlisting}[frame=lrbt,label=initContext,caption={\footnotesize Context の初期化}] context->code[C_popSingleLinkedStack] = popSingleLinkedStack_stub; context->code[C_pushSingleLinkedStack] = pushSingleLinkedStack_stub; context->code[C_stackTest3] = stackTest3_stub; context->code[C_assert3] = assert3_stub; \end{lstlisting} Data Gear も Code Gear と同様に Context が番号を持っている。(ソースコード \ref{enumDatah}) Context の初期化の際に引数格納用の Data Gear が生成される。 この Data Gear は Code Gear が継続する際に、継続先の Code Gear が要求する引数を格納するためのものである。 生成された Data Gear は data のリストと番号の対応から参照される。 \begin{lstlisting}[frame=lrbt,label=enumDatah,caption={\footnotesize enum で定義された Data Gear の番号}] enum DataType { D_Code, D_SingleLinkedStack, D_Stack, D_TaskManager, D_Worker, ... }; \end{lstlisting} \section{TaskManager} TaskManager は、CPU、GPU の数に応じた Worker の生成、管理、Task の送信を行う。 ソースコード \ref{TaskManager} は TaskManager の Interface である。 TaskManager は、初期化の際にそれぞれ指定した CPU、GPU の数の Worker を生成する。 また、実行する Task の Input Data Gear が用意されているかどうか判断し、 全て用意されていた場合、その Task を Worker の Queue に送信する。 \lstinputlisting[label=TaskManager, caption=TaskManager の Interface]{./src/taskManagerInterface.cbc} \section{TaskQueue} \section{Workers}