Mercurial > hg > Members > kokubo > 2013-mid-thesis
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}