view paper/parallelism_gears.tex @ 9:729602c52c46

Add sendTask.graffle
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Sun, 21 Jan 2018 02:09:28 +0900
parents 106c1d35afd2
children a0f9def49535
line wrap: on
line source

\chapter{Gears OSの並列処理}
\section{並列処理の構成}

\section{TaskManager}
Gears OS の TaskManager は Task を実行する Worker の生成、管理、Task の送信を行う。
\coderef{taskManagerInterface} に TaskManager の Interface を示す。

\lstinputlisting[caption=TaskManager の Interface, label=code:taskManagerInterface]{./src/taskManagerInterface.cbc}

TaskManager は 以下の API を持っている。

\begin{itemize}
    \item Task の実行(spawn, spawnTasks)
    \item Task の依存関係の設定(setWaitTask)
    \item TaskManager が管理している Task 数のインクリメントとデクリメント(increment/decrementTaskCount)
    \item TaskManager(shutdown)の終了処理
\end{itemize}

\coderef{createTaskManager}  に TaskManager Interface を実装した Data Gear の初期化部分を示す。
TaskManager は初期化の際に、指定した数の Worekr を生成する。
その際CPU、GPU の数を指定することができ、指定した分の CPUWorker と GPUWorker が \coderef{createTaskManager} の createWorker 関数で生成される。

\lstinputlisting[caption=TaskManager の初期化, label=code:createTaskManager]{./src/createTaskManager.cbc}

TaskManager は \coderef{sendTask}のように spawn を呼び出した際、実行する Task の Input Data Gear が用意されているかをチェックする。
Input Data Gear が全て用意されている場合、その Task を Worker の TaskQueue に送信する。
送信する Worker は Task を実行する環境(CPU、GPU) によって決定する。

\begin{figure}[htbp]
    \begin{center}
        \includegraphics[scale=0.6]{./fig/sendTask.pdf}
    \end{center}
    \caption{Workerへの Task 送信}
    \label{fig:sendTask}
\end{figure}

実際にTask を Worker に送信する処理を\coderef{sendTask}に示す。

\lstinputlisting[caption=Task の送信処理, label=code:sendTask]{./src/sentTask.cbc}

\section{Worker}
\section{SynchornizedQueue}
\section{依存関係の解決}
\section{並列処理の記述}
\section{Iterator}
\section{待ち機構}