Mercurial > hg > Papers > 2014 > masakoha-thesis > final
view paper/chapter2.tex @ 27:9def91a908d6
add
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 11 Feb 2014 18:11:36 +0900 |
parents | 9b071b32e3de |
children | d5b9addca752 |
line wrap: on
line source
\chapter{Cerium} \label{chap:concept} \section{Cerium Task Manager} Cerium Task Manager では、並列処理を Task 単位で記述する。 関数やサブルーチンをそれぞれ Task として扱い、 Task には Input Data 、 Output Data 及び依存関係を設定することができる。 設定された Task は Cerium Task Manager によって管理され、実行される。 (図\ref{fig:createTask}の説明)図\ref{fig:createTask} \begin{figure}[htbp] \begin{center} \includegraphics[width=0.7\textwidth]{fig/createTask1.pdf} \end{center} \caption{Cerium Task Manager} \label{fig:createTask} \end{figure} \subsection{Task の生成} input data を 2つ準備してそれら同士を乗算し、output data に格納する multiply という例題がある。 その例題の Task 生成部分を以下に示す。 \begin{verbatim} multi_init(TaskManager *manager) { HTask* multiply = manager->create_task(MULTIPLY_TASK); multiply->set_cpu(SPE_ANY); multiply->set_inData(0, i_data1, sizeof(float)*length); multiply->set_inData(1, i_data2, sizeof(float)*length); multiply->set_outData(0, 0_data1, sizeof(float)*length); multiply->set_param(0,(long)length); multiply->spawn(); } \end{verbatim} \begin{tiny} \begin{table}[ht] \begin{center} \caption{Task 生成における API} \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} \end{center} \end{table} \end{tiny} Task の記述は以下のようになる。 \begin{verbatim} static int run(SchedTask *s,void *rbuf, void *wbuf) { float indata1=(float*)s->get_input(rbuf,0); float indata2=(float*)s->get_input(rbuf,1); float outdata=(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} \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}