view cerium-manager.tex @ 7:bd8574dedd1b

*** empty log message ***
author gongo
date Tue, 25 Mar 2008 15:51:53 +0900
parents a46c6f313a0b
children b70a62630a57
line wrap: on
line source

\section{Task Manager}
Task Manager は、Task と呼ばれる分割された各プログラムを
管理するライブラリである。Task 同士の依存関係を考慮しながら
メモリ上にマッピングし、SPE 上ではそのプログラムを
DMA 転送によりロードする (\figref{fig-manager-load}) 。
SPE は 256KB という小さなデータ量しか持てず、
大量のプログラムを全て SPE 上に置いておくことはできない可能性がある。
そのため、必要な時に必要な実行プログラムだけが SPE 上にロード
されていることが望ましい。

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.45]{figure/manager-load.pdf}
    \caption{Task Manager}
    \label{fig-manager-load}
  \end{center}
\end{figure}

現在実装されている Task Manager の API を \tabref{tab:manager-api} に示す。

\begin{table}[htbp]
  \caption{Task Manager API} \label{tab:manager-api}
  \hbox to\hsize{\hfil
  \begin{tabular}{r|l} \hline \hline
    create\_task & Task を生成する \\ \hline
    spawn        & Task を実行 Task Queue に登録する \\ \hline
    set\_depend  & Task の依存関係の考慮 \\\hline
    set\_cpu     & Task を実行する CPU の設定 \\ \hline
    run          & 実行 Task Queue の実行 \\ \hline
  \end{tabular}\hfil}
\end{table}


以下に Task Manager を使った記述を示す。

{\small
\begin{verbatim}

int
main(void)
{
    TaskManager *manager = new TaskManager;
    Task *task1, *task2;

    /**
     * cmd  : 実行するタスクID
     * size : in_addr で取得するデータのバイト数
     * in_addr  : 入力データ元アドレス
     * out_addr : 出力データ先アドレス
     */
    task1 = create_task(CMD_RUN1, size1,
                        in_addr1, out_addr2);
    task2 = create_task(CMD_RUN2, size2,
                        in_addr2, out_addr2);

    // task2 は task1 が終了してから開始する
    task2->set_depend(task1);

    task1->spawn();
    task2->spawn();

    manager->run();

    return 0;
}

\end{verbatim}
}

\input{manager-task}
\input{manager-cr}