Mercurial > hg > Papers > 2014 > masakoha-sigos
view paper/cerium.tex @ 3:05a0e70f5823
add some image files
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 17 Apr 2014 01:37:37 +0900 |
parents | b15b449619b1 |
children | c030ccbf279a |
line wrap: on
line source
\section{Cerium TaskManager}\label{section:cerium} \subsection{Cerium Task Manager の概要} Cerium Task Manager は並列プログラミングフレームワークであり、内部では C や C++ で実装されている。 Cerium Task Manager は、User が並列処理を Task 単位で記述し、関数やサブルーチンを Task として扱い、その Task に対して Input Data、Output Data 及び依存関係を設定する。 そして、それに基づいた設定の元で Task Manager にて管理し実行される。 Cerium Task Manager は PlayStation 3/Cell、Mac OS X 及び Linux 上で利用することが可能である。 図\ref{fig:cerium} では、 User が Task を生成して、CPU や GPU の各デバイスに Task が割り振られる様子を表している。 User が設定を行った Task は Task Manager にて生成される。その生成した Task に HTask にて Input Data 、Output Data や依存関係などを設定して Task の集合体である TaskList に Set する。 そして TaskList を各デバイスに割り振って、各 Scheduler に管理をさせたあとにそれぞれの Task を起動する。 \begin{figure}[htbp] \begin{center} \includegraphics[scale=0.5]{images/ceriumtaskmanager.pdf} \end{center} \caption{Cerium} \label{fig:cerium} \end{figure} \subsection{Cerium Task Manager の利用方法} input Data で格納して 2 つの数を乗算し、output data に格納する multiply という例題がある。 その例題の Task 生成部分を以下に示す。 \\ \begin{verbatim} multi_init(TaskManager *manager) { float *A, *B, *C; HTaskPtr multiply = manager->create_task (MULTIPLY_TASK); multiply->set_cpu(SPE_ANY); multiply->set_inData (0, (memaddr)A, sizeof(float)*length); multiply->set_inData (1, (memaddr)B, sizeof(float)*length); multiply->set_outData (0, (memaddr)C, sizeof(float)*length); multiply->set_param(0,(long)length); multiply->spawn(); } \end{verbatim} \begin{tiny} \begin{table}[ht] \begin{center} \label{table:create_taskAPI} \small \begin{tabular}[t]{c|l} \hline create\_task& Task を生成する \\ \hline set\_inData & Task への入力データのアドレスを追加 \\ \hline set\_outData & Task への出力データのアドレスを追加 \\ \hline set\_param & Task へ値を一つ渡す。ここでは length \\ \hline set\_cpu & Task を実行するデバイスの設定 \\ \hline spawn & 生成した Task を TaskList に set \\ \hline \end{tabular} \caption{Task 生成における API} \end{center} \end{table} \end{tiny} Task の記述は以下のようになる。 \\ \begin{verbatim} static int run(SchedTask *s,void *rbuf, void *wbuf) { float *A, *B, *C; A = (float*)s->get_input(rbuf,0); B = (float*)s->get_input(rbuf,1); C = (float*)s->get_output(wbuf,0); long length=(long)s->get_param(0); for (int i=0;i<length;i++) { C[i]=A[i]*B[i]; } return 0; } \end{verbatim} \begin{tiny} \begin{table}[ht] \begin{center} \caption{Task 側で使用する API} \label{table:taskAPI} \small \begin{tabular}[t]{c|l} \hline get\_input & Scheduler から input data を取得 \\ \hline get\_output & Scheduler から output data を取得 \\ \hline get\_param & set\_param した値を取得 \\ \hline \end{tabular} \end{center} \end{table} \end{tiny}