Mercurial > hg > Papers > 2008 > gongo-sigos
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}