Mercurial > hg > Papers > 2015 > yuhi-master
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}