5
|
1 \section{Task Manager}
|
3
|
2 Task Manager は、Task と呼ばれる分割された各プログラムを
|
|
3 管理するライブラリである。Task 同士の依存関係を考慮しながら
|
|
4 メモリ上にマッピングし、SPE 上ではそのプログラムを
|
|
5 DMA 転送によりロードする (\figref{fig-manager-load}) 。
|
4
|
6 SPE は 256KB という小さなデータ量しか持てず、
|
|
7 大量のプログラムを全て SPE 上に置いておくことはできない可能性がある。
|
|
8 そのため、必要な時に必要な実行プログラムだけが SPE 上にロード
|
|
9 されていることが望ましい。
|
3
|
10
|
|
11 \begin{figure}[tb]
|
|
12 \begin{center}
|
4
|
13 \includegraphics[scale=0.45]{figure/manager-load.pdf}
|
3
|
14 \caption{Task Manager}
|
|
15 \label{fig-manager-load}
|
|
16 \end{center}
|
|
17 \end{figure}
|
|
18
|
|
19 現在実装されている Task Manager の API を \tabref{tab:manager-api} に示す。
|
|
20
|
6
|
21 \begin{table}[htbp]
|
3
|
22 \caption{Task Manager API} \label{tab:manager-api}
|
|
23 \hbox to\hsize{\hfil
|
|
24 \begin{tabular}{r|l} \hline \hline
|
|
25 create\_task & Task を生成する \\ \hline
|
|
26 spawn & Task を実行 Task Queue に登録する \\ \hline
|
|
27 set\_depend & Task の依存関係の考慮 \\\hline
|
|
28 set\_cpu & Task を実行する CPU の設定 \\ \hline
|
|
29 run & 実行 Task Queue の実行 \\ \hline
|
|
30 \end{tabular}\hfil}
|
|
31 \end{table}
|
|
32
|
7
|
33
|
4
|
34 以下に Task Manager を使った記述を示す。
|
|
35
|
|
36 {\small
|
|
37 \begin{verbatim}
|
6
|
38
|
4
|
39 int
|
|
40 main(void)
|
|
41 {
|
|
42 TaskManager *manager = new TaskManager;
|
|
43 Task *task1, *task2;
|
|
44
|
|
45 /**
|
|
46 * cmd : 実行するタスクID
|
|
47 * size : in_addr で取得するデータのバイト数
|
|
48 * in_addr : 入力データ元アドレス
|
|
49 * out_addr : 出力データ先アドレス
|
|
50 */
|
|
51 task1 = create_task(CMD_RUN1, size1,
|
|
52 in_addr1, out_addr2);
|
|
53 task2 = create_task(CMD_RUN2, size2,
|
|
54 in_addr2, out_addr2);
|
|
55
|
|
56 // task2 は task1 が終了してから開始する
|
|
57 task2->set_depend(task1);
|
|
58
|
|
59 task1->spawn();
|
|
60 task2->spawn();
|
|
61
|
|
62 manager->run();
|
|
63
|
|
64 return 0;
|
|
65 }
|
6
|
66
|
4
|
67 \end{verbatim}
|
|
68 }
|
|
69
|
7
|
70 \input{manager-task}
|
|
71 \input{manager-cr}
|