changeset 1:f4b3de446113

write introduction and cerium
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 05 Nov 2013 23:59:45 +0900
parents 9e88a388ec83
children b7c8a956c10b
files paper/cerium.tex paper/data_parallel.tex paper/ipsj.tex
diffstat 3 files changed, 18 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- a/paper/cerium.tex	Tue Nov 05 23:18:04 2013 +0900
+++ b/paper/cerium.tex	Tue Nov 05 23:59:45 2013 +0900
@@ -1,19 +1,11 @@
-\section{Cerium での Task の生成}\label{section:cerium}
-Cerium では,user が createtask を行い、input data や依存関係の設定を行うと TaskManager で Task が生成される。
-
-\begin{figure}[ht]
-  \begin{center}
-    \includegraphics[scale=0.4]{./images/createTask.pdf}
-  \end{center}
-  \caption{Task Manager}
-  \label{fig:createTask}
-\end{figure}
-図\ref{fig:createTask}は Cerium が Task を作成/実行する場合のクラスの構成となる。
+\section{Cerium における Task の生成}\label{section:cerium}
+Cerium では,user が createtask を行い、input data や依存関係の設定し spawn を行うと TaskManager で Task が生成される。
+spawn の代わりに新たに用意した iterate を利用することで,Data 並列処理を行う Task として登録される。
 Task 毎に依存関係を表す wait\_i と wait\_me というリストがあり、依存関係が解消されて実行可能になった
 Task は ActiveTaskList に移される。さらに、Scheduler に転送しやすい TaskList に変換してから各 Scheduler に
 転送される。
-\subsection{Taskの生成}
-以下に Task を生成する例題を示す。
+
+以下に Data 並列処理を行う Task を生成する例題を示す。
 input data を二つ用意し、 input 同士を乗算し、 output に格納する multiply という例題となる。
 \begin{Verbatim}[fontsize=\footnotesize,xleftmargin=1cm]
 void
@@ -28,16 +20,15 @@
                       sizeof(int)*length);
     multiply->set_outData(0, o_data,
                       sizeof(int)*length);
-    multiply->set_param(0, (memaddr)length);
     multiply->set_cpu(SPE_ANY);
-    multiply->spawn();
+    multiply->iterate(length);
 }
 \end{Verbatim}
 
 \begin{tiny}
   \begin{table}[ht]
     \begin{center}
-      \caption{ Task 生成における API }
+      \caption{Task 生成における API}
       \label{table:create_taskAPI}
       \scalebox{0.5}[0.9]
       \small
@@ -47,46 +38,29 @@
         \hline
         set\_inData & Task への入力データのアドレスを追加 \\
         \hline
-        set\_outData & Task への入力データのアドレスを追加 \\
-        \hline
-        set\_param & Task へ値を一つ渡す。ここでは length \\
+        set\_outData & Task からの出力データのアドレスを追加 \\
         \hline
         set\_cpu & Task を実行するデバイスの設定  \\
         \hline
-        spawn& 生成した Task を ActiveTaskList に登録  \\
+        iterate&Data 並列処理を行う Task として ActiveTaskList に登録  \\
         \hline
       \end{tabular}
     \end{center}
   \end{table}
 \end{tiny}
-Task ( OpenCL における kernel )の記述は以下のようになる。
-\begin{Verbatim}[fontsize=\footnotesize,xleftmargin=1cm]
-static int
-run(SchedTask *s,void *rbuf, void *wbuf)
-{
-    float i_data1=(float*)s->get_input(rbuf,0);
-    float i_data2=(float*)s->get_input(rbuf,1);
-    float o_data=(float*)s->get_output(wbuf,0);
-    long length=(long)s->get_param(0); 
-    for (int i=0;i<length;i++) {
-        outdata[i]=indata1[i]*indata2[i];
-    }
-    return 0;
-}
-\end{Verbatim}
+
 \begin{tiny}
   \begin{table}[ht]
     \begin{center}
-      \caption{ Task 側で使用する API }
-      \label{table:taskAPI}
+      \caption{Task 側で使用する API}
+      \label{table:created_taskAPI}
+      \scalebox{0.5}[0.9]
       \small
       \begin{tabular}[t]{c|l}
         \hline
-        get\_input & Schedulerからinput dataを取得 \\
+        get\_input&Scheduler から set\_inData したアドレスを取得\\
         \hline
-        get\_output & Schedulerからoutput dataを取得 \\
-        \hline
-        get\_param & set\_paramした値を取得 \\
+        get\_output&Scheduler から set\_outData したアドレスを取得\\
         \hline
       \end{tabular}
     \end{center}
--- a/paper/data_parallel.tex	Tue Nov 05 23:18:04 2013 +0900
+++ b/paper/data_parallel.tex	Tue Nov 05 23:59:45 2013 +0900
@@ -1,25 +1,4 @@
-\section{Ceriumにおけるデータ並列}\label{data_parallel}
-OpenCLで充分な並列度を得るには、データ並列による実行をサポートした方が良い。
-CeriumでOpenCLのデータ並列を使うために、iterateというAPIを用意した。
-
-ベンチマークをとるために、まずはCPU(many core)上でデータ並列の機構を実装した。
-OpenCLでデータ並列を行う際は、NDRangeの引数でワークアイテムのサイズを設定し、以下のようにkernelを書けばよい。
-
-\begin{Verbatim}[fontsize=\footnotesize,xleftmargin=1cm]
-__kernel void
-multi(__global const float *i_data1, 
-      __global const float *i_data2,
-      __global float *o_data)
-{
-    int i = get_global_id(0);
-    o_data[i] = i_data1[i]*i_data2[i];
-}
-
-\end{Verbatim}
-kernelを複数生成し、各kernelは自分が担当するindexをget\_global\_id APIで取得し、
-その部分だけ計算を行う。CPUで実行する場合もGPU実行時のkernelとなるべく近い形式で記述できるようにする。
-
-\subsection{データ並列実行の機構}
+\section{Cerium における Data 並列}\label{data_parallel}
 データ並列で実行する場合はspawn APIではなく、iterate APIでTaskを生成すればよい。
 Scheduler内で引数分のTaskを生成し、それぞれに自分が担当するindexをパラメタとして設定していく。
 iterateにはlengthを引数として渡し、lengthの値と渡したlengthの個数で次元数や
--- a/paper/ipsj.tex	Tue Nov 05 23:18:04 2013 +0900
+++ b/paper/ipsj.tex	Tue Nov 05 23:59:45 2013 +0900
@@ -21,8 +21,8 @@
 % 和文概要
 \begin{abstract}
   Cerium Task Managerは並列プログラミングフレームワークである。
-  今回、MultiCore CPU での Data 並列処理を行うために iterator という API を用意した。
-  この API を用いて fft を実装し,benchmark を取り、結果から iterator の性能と問題について考察を行った。
+  今回、MultiCore CPU での Data 並列処理を行うために iterate という API を用意した。
+  この API を用いて fft を実装し,benchmark を取り、結果から iterate の性能と問題について考察を行った。
 \end{abstract}
 
 % 表題などの出力
@@ -32,8 +32,6 @@
 
 \input{introduction}   % 研究目的
 \input{cerium}         % Cerium
-\input{opencl}           % Open  CL
-\input{cerium_gpu}     % GPU上での実行の機構
 \input{data_parallel}
 \input{fft_benchmark}
 %\input{benchmark1}