Mercurial > hg > Papers > 2010 > program-symposium
comparison task_array.html @ 0:a9fda18657b3 default tip
add
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 16 Dec 2009 10:05:04 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a9fda18657b3 |
---|---|
1 <html> | |
2 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> | |
3 <head> | |
4 <title>Task Array in Cerium</title> | |
5 </head> | |
6 <body> | |
7 <h1>Task Array in Cerium</h1> | |
8 <a href=#content>content</a><br> | |
9 <nr> | |
10 | |
11 <p> | |
12 | |
13 <hr> | |
14 <h2><a name="content000">従来のTaskの問題点</a></h2> | |
15 | |
16 <pre> | |
17 単純なデータ転送でも、List DMAデータを構築 | |
18 Param/List DMA は「8個まで」 | |
19 一つ一つのTaskがPPEに終了を通知。 | |
20 | |
21 </pre> | |
22 Task終了時にPPCがメールを受け取るのを待ってしまう。 | |
23 <p> | |
24 8個はひどいだろう? 1個でも8個転送しているので、SPE | |
25 に送る TaskList が大きい。 | |
26 <p> | |
27 実装が複雑。 | |
28 <p> | |
29 | |
30 <hr> | |
31 <h2><a name="content001">Simple Task</a></h2> | |
32 HTask の同期機能だけを持ち、単純転送の機能だけを持つTask。 | |
33 <p> | |
34 今までのCeriumのTaskから、 | |
35 <p> | |
36 | |
37 <pre> | |
38 RnewTask | |
39 ListDMA | |
40 | |
41 </pre> | |
42 の機能を削除することにより実現。Task List が単純になる。 | |
43 <p> | |
44 <center><img src="fig/simple-pipeline.jpg"></center> | |
45 <p> | |
46 | |
47 <hr> | |
48 <h2><a name="content002">Task Array</a></h2> | |
49 | |
50 <pre> | |
51 可変長のParam/inData/outData | |
52 Taskの終了を通知しない | |
53 全部のタスクが終了した時にPPEに通知 | |
54 Simple Task を使って、Task Array List を転送 | |
55 | |
56 </pre> | |
57 実装が容易。Simple Taskを複雑にしない。 | |
58 <p> | |
59 <center><img src="fig/TaskArrayList.png"></center> | |
60 <p> | |
61 | |
62 <pre> | |
63 Task 可変長Param, List DMAを持つ | |
64 | |
65 </pre> | |
66 しかし、単純にSimple Taskとして実行は出来ない。 | |
67 <p> | |
68 <center><img src="fig/TaskArray-bad.jpg"></center> | |
69 <p> | |
70 次の Simple Task (おそらくは別な TaskArray )が既に、read に入っているので、SchedTaskArray->exec() で実行するのでは、それと衝突してしまう。 | |
71 <p> | |
72 | |
73 <hr> | |
74 <h2><a name="content003">Task ArrayとSimple Task</a></h2> | |
75 Pipe-line を乱さないように、実行を切替える必要がある。そこで、SchedTaskArrayLoad / SchedTaskArray の二つにわけで、SchedTaskArrayLoad->next() で、次のSchedTaskを返さず、もう一つ作った、SchedTaskArray を返す。 | |
76 <p> | |
77 | |
78 <pre> | |
79 SchedTaskArrayLoad | |
80 Task Array のloadと、pile-line clear | |
81 SchedTaskArray | |
82 Task Array の実行 | |
83 | |
84 </pre> | |
85 SchedTaskArray で次に実行する Task Array がなくなれば、save していた SimpleTask->next() を返す。 | |
86 <p> | |
87 これは、TaskArray という SimpleTask で実行される。(実体はない) | |
88 <p> | |
89 <center><img src="fig/TaskArray.jpg"></center> | |
90 <p> | |
91 | |
92 <hr> | |
93 <h2><a name="content004">API</a></h2> | |
94 create_task_arrayで、param/inData/outData の数を指定する。全部同じparam/inData/outData の数なのは、allocate のsizeを計算するため。 | |
95 <p> | |
96 全部可変にして、後でsizeを指定しても良い。そういうAPIを用意することも可能。 でも、そんなの使うの? | |
97 <p> | |
98 HTask の方で array_task を生成。これは、create_array_task | |
99 で allocate した rbuf 上に生成する。最後に、大きさがあっているかどうかを、task_array_spawn() で調べている。 | |
100 <p> | |
101 本来は、HTaskArray を作って、array_task ではない場合には、APIを生成出来ないようにするべきだろう... (field は同じ)でも、そうすると、またvirtualになる... | |
102 <p> | |
103 最後に、create_task_array がSimpleTaskなので、それをspawn() する。 | |
104 <p> | |
105 | |
106 <pre> | |
107 HTask *twice_main = manager->create_task_array( | |
108 Twice,count,data_count+1,data_count,data_count); | |
109 t = 0; | |
110 for(int i = 0;i<count;i++) { | |
111 t = twice_main->next_task_array(Twice, t); | |
112 for(int j = 0;j<data_count;j++) { | |
113 t->set_param(j, (memaddr)length2); | |
114 t->set_inData(j,data, sizeof(int)*length2); | |
115 t->set_outData(j,data, sizeof(int)*length2); | |
116 } | |
117 } | |
118 twice_main->spawn_task_array(t->next()); | |
119 twice_main->set_cpu(SPE_ANY); | |
120 twice_main->spawn(); | |
121 | |
122 </pre> | |
123 | |
124 <hr> | |
125 <h2><a name="content005">従来の Task との互換性</a></h2> | |
126 | |
127 <p> | |
128 可変長Task を従来の TaskList に埋め込むことで、従来の8個 Param, List DMA Task との互換性を取る。 | |
129 <p> | |
130 TaskList に8個のParamを埋め込んだのと同等。TaskList の大きさを十分に取れば、従来と同等。 | |
131 <p> | |
132 これは、TaskArray1 という SimpleTask で実行される。(実体はない) | |
133 <p> | |
134 pipe-line の乱れもない。 | |
135 <p> | |
136 従来のコードは、SIMPLE_TASK で切替え。(そのうち削除?) | |
137 <p> | |
138 | |
139 <h2><a name="content">Content</h2> | |
140 <ol> | |
141 <li><a href="#content000"> 従来のTaskの問題点</a> | |
142 <li><a href="#content001"> Simple Task</a> | |
143 <li><a href="#content002"> Task Array</a> | |
144 <li><a href="#content003"> Task ArrayとSimple Task</a> | |
145 <li><a href="#content004"> API</a> | |
146 <li><a href="#content005"> 従来の Task との互換性</a> | |
147 </ol> | |
148 | |
149 </body></html> |