diff paper/chapter2.tex @ 32:9b7ce931cad9

fix about cerium
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Sat, 14 Feb 2015 15:50:18 +0900
parents f0060254db3f
children 8d6a0f047d5a
line wrap: on
line diff
--- a/paper/chapter2.tex	Sat Feb 14 14:29:17 2015 +0900
+++ b/paper/chapter2.tex	Sat Feb 14 15:50:18 2015 +0900
@@ -7,61 +7,13 @@
 GPGPU の Data Parallel を含めて同じ形式で記述できる。
 
 CeriumはTaskManager、 SceneGraph、Rendering Engine の3つの要素から構成される。
-本研究では Cerium の TaskManager を汎用計算フレームワークとして改良を行う。
-これによりヘテロジニアス環境に対応したシステムやフレームワークに必要な API や機構について考察していく。
+本研究では Cerium の TaskManager を汎用計算フレームワークとして改良を行った。
+
 \section{Cerium TaskManager}
 Cerium TaskManager では、処理の単位を Task としてプログラムを記述していく。
 関数やサブルーチンを Task として扱い、 Task 間の依存関係を考慮しながら実行される。
-Task を生成する際に、以下のような要素を設定することができる。
 
-\begin{itemize}
-\item input data
-\item output data
-\item parameter
-\item cpu type
-\item dependency
-\end{itemize}
-
-input/output data, parameter は関数で言うところの引数に相当する。
-cpu type は Task が動作する Device を示し、 dependency は他の Task との依存関係を表す。
-
-\section{Cerium における Task}
-図:\ref{fig:taskmanager}は Cerium が Task を生成/実行する場合のクラスの構成図である。
-TaskManager で依存関係が解消され、実行可能になった Task は ActiveTaskList に移される。
-ActiveTaskList に移された Task は依存関係が存在しないのでどのような順番で実行されても良い。
-Task は転送を行いやすい TaskList に変換され、cpu type に対応した Scheduler に転送される。
-なお、転送はSynchronozed Queue である mail を通して行われる。
-
-
-\begin{figure}[htpb]
-  \begin{center}
-    \includegraphics[scale=0.7]{./images/createTask.pdf}
-  \end{center}
-  \caption{Task Manager}
-  \label{fig:taskmanager}
-\end{figure}
-
-\section{Task の Scheduling}
-
-GPU や Cell のような Shared Memory でない環境でのプログラミングを行う場合、
-Task の入出力となるデータを転送し、転送が終わってから Task を起動しなければならない。
-転送処理がボトルネックとなり、並列度が低下してしまう。
-そのため、Cerium はパイプライン実行をサポートしている。
-
-Scheduler に転送された Task はパイプラインで処理される(図:\ref{fig:scheduler})。
-Task が全て終了すると Scheduler から TaskManager に mail を通して通知される。
-通知に従い依存関係を解決した Task が再び TaskManager から Scheduler に転送される。
-
-\begin{figure}[htpb]
-  \begin{center}
-    \includegraphics[scale=0.7]{./images/scheduler.pdf}
-  \end{center}
-  \caption{Scheduler}
-  \label{fig:scheduler}
-\end{figure}
-\newpage
-\section{Task 生成の例}
-ソースコード:\ref{src:createTask}に Task を生成する例題を示す。
+ソースコード:\ref{src:createTask}に Host 側で Task を生成する例題を示す。
 input data を2つ用意し、 input data の各要素同士を乗算し、
 output に格納する multiply という例題である。
 
@@ -92,7 +44,8 @@
 \end{lstlisting}
 
 表:\ref{table:task_create_api}は Task 生成時に用いる API の一覧である。
-create された Task は各種パラメタを設定し、spawn/iterate することで TaskManager に登録される。
+create された Task は Input Data や 依存関係を設定し、
+spawn することで TaskManager に登録される。
 
 \begin{tiny}
   \begin{table}[htpb]
@@ -119,8 +72,7 @@
   \end{table}
 \end{tiny}
 
-ソースコード:\ref{src:createTask}は Host 側で Task を生成しているプログラムである。
-Device 側で実行される Task (OpenCL、CUDA でいう kernel) の記述はソースコード:\ref{src:task}のようになる。
+次に、ソースコード:\ref{src:task} に Device 側で実行される Task (OpenCL、CUDA でいう kernel) の記述を示す。
 
 \begin{lstlisting}[frame=lrbt,label=src:task,caption=Task,numbers=left]
 static int
@@ -142,6 +94,7 @@
 \end{lstlisting}
 
 表:\ref{table:task_api}は Task 側で使用する API である。
+Host 側で設定した Input Data やパラメタを取得することができる。
 
 \begin{tiny}
   \begin{table}[htpb]
@@ -161,3 +114,50 @@
     \end{center}
   \end{table}
 \end{tiny}
+
+Task を生成する際に設定できる要素は以下の通りとなる。
+
+\begin{itemize}
+\item Input Data
+\item Output Data
+\item Parameter
+\item CpuType
+\item Dependency
+\end{itemize}
+
+Input/Output Data, Parameter は関数で言うところの引数に相当する。
+CpuType は Task が動作する Device を示し、 Dependency は他の Task との依存関係を表す。
+
+\section{Cerium における Task}
+図:\ref{fig:taskmanager}は Cerium が Task を生成/実行する場合のクラスの構成図である。
+TaskManager で依存関係が解消され、実行可能になった Task は ActiveTaskList に移される。
+ActiveTaskList に移された Task は依存関係が存在しないのでどのような順番で実行されても良い。
+Task は転送を行いやすい TaskList に変換され、CpuType に対応した Scheduler に転送される。
+なお、転送はSynchronozed Queue である mail を通して行われる。
+
+\begin{figure}[htpb]
+  \begin{center}
+    \includegraphics[scale=0.7]{./images/createTask.pdf}
+  \end{center}
+  \caption{Task Manager}
+  \label{fig:taskmanager}
+\end{figure}
+
+\section{Task の Scheduling}
+
+GPU や Cell のような Shared Memory でない環境でのプログラミングを行う場合、
+Task の入出力となるデータを転送し、転送が終わってから Task を起動しなければならない。
+転送処理がボトルネックとなり、並列度が低下してしまう。
+そのため、Cerium はパイプライン実行をサポートしている。
+
+Scheduler に転送された Task はパイプラインで処理される(図:\ref{fig:scheduler})。
+Task が全て終了すると Scheduler から TaskManager に mail を通して通知される。
+通知に従い依存関係を解決した Task が再び TaskManager から Scheduler に転送される。
+
+\begin{figure}[htpb]
+  \begin{center}
+    \includegraphics[scale=0.7]{./images/scheduler.pdf}
+  \end{center}
+  \caption{Scheduler}
+  \label{fig:scheduler}
+\end{figure}