Mercurial > hg > Papers > 2015 > yuhi-master
comparison slide/blank.html @ 60:0690afa10eb7
add
author | Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 17 Feb 2015 17:59:05 +0900 |
parents | 8057614d5b77 |
children | 1eea0dd50676 |
comparison
equal
deleted
inserted
replaced
59:b85ecebe6fc3 | 60:0690afa10eb7 |
---|---|
155 <img src="./images/cerium_image.png" width="700"> | 155 <img src="./images/cerium_image.png" width="700"> |
156 <p>Cerium を用いることでマルチコア CPU と GPU において Scheduling を含めたプログラミングを可能となる。</p> | 156 <p>Cerium を用いることでマルチコア CPU と GPU において Scheduling を含めたプログラミングを可能となる。</p> |
157 </div> | 157 </div> |
158 | 158 |
159 <div class='slide'> | 159 <div class='slide'> |
160 <h2>Cerium での Task の例</h2> | 160 <h2>Cerium における Task の生成</h2> |
161 | 161 |
162 <p> | 162 <p> |
163 Cerium TaskManager では処理の単位を Task としてプログラムを記述していく。 | 163 Cerium TaskManager では処理の単位を Task としてプログラムを記述していく。 |
164 関数やサブルーチンを Task として扱い、Task に各種パラメタを設定した後に並列実行される。 | 164 関数やサブルーチンを Task として扱い、Task に各種パラメタを設定した後に並列実行される。 |
165 Input データの各要素同士を乗算し、 Output に格納する Multiply という例題がある。 | 165 Input データの各要素同士を乗算し、 Output に格納する Multiply という例題がある。 |
192 } | 192 } |
193 </pre> | 193 </pre> |
194 </div> | 194 </div> |
195 | 195 |
196 <div class='slide'> | 196 <div class='slide'> |
197 <h2></h2> | 197 <h2>Cerium における Task の記述</h2> |
198 | 198 <p>Device 側で実行される Task の記述を示す。</p> |
199 <pre class="code"> | |
200 static int | |
201 run(SchedTask ∗s) { | |
202 float ∗i_data1 = (float∗)s−>get_input(0); // get input | |
203 float ∗i_data2 = (float∗)s−>get_input(1); // get output | |
204 float ∗o_data = (float∗)s−>get_output(0); // get parameter | |
205 long length = (long)s−>get_param(0); | |
206 | |
207 // calculate | |
208 for (int i=0; i<length; i++) { | |
209 o_data[i] = i_data1[i] ∗ i_data2[i]; | |
210 } | |
211 return 0; | |
212 } | |
213 </pre> | |
214 <p>Host 側では Task を生成する際に様々なパラメタを設定しており、 | |
215 Task にはそれを取得する API が用意されている。</p> | |
216 <table border="0" > | |
217 <tr bgcolor="palegreen"> | |
218 <th align="center">API</th><th align="center">content</th> | |
219 </tr> | |
220 | |
221 <tr bgcolor="dbffa3"> | |
222 <th align="left" >get_input</th><th align="left">入力データのアドレスを取得</th> | |
223 </tr> | |
224 <tr bgcolor="palegreen"> | |
225 <th align="left">get_output</th><th align="left">出力先データのアドレスを取得</th> | |
226 </tr> | |
227 <tr bgcolor="dbffa3"> | |
228 <th align="left">get_param</th><th align="left">パラメータを取得</th> | |
229 </tr> | |
230 </table> | |
231 </div> | |
232 | |
233 <div class='slide'> | |
234 <h2>TaskManager の構成</h2> | |
235 <div align="center"> | |
236 <img src='images/createtask.png' width="700"> | |
237 </div> | |
238 <ul> | |
239 <li>TaskManagerと各Threadsの間には Syncronized な Mail Queueがある。 | |
240 <li>依存関係の解決された Task は TaskManager から Mail Queue に送られる。 | |
241 <li>Task に設定された CPUType に対応した Threads が Mail Queue から Task を取得し、並列実行していく。 | |
242 </ul> | |
243 </div> | |
244 | |
245 <div class='slide'> | |
246 <h2>マルチコア CPU 上での並列実行</h2> | |
247 <div align="center"> | |
248 <img src="images/pipeline.png" width="600"> | |
249 </div> | |
250 <p> | |
251 Cerium は Cell 上で動作するフレームワークであったが MacOSX、Linux 上での並列実行に対応させた。 | |
252 </p> | |
253 <p> | |
254 マルチコア CPU 上での並列実行は、Synchronized Queue とパイプラインによって実現されている。 | |
255 TaskManager で依存関係を解決された Task は Scheduler に送信され、 | |
256 Scheduler が持っているパイプラインの機構に沿って並列に実行する。 | |
257 </p> | |
258 </div> | |
259 | |
260 <div class='slide'> | |
261 <h2>マルチコア CPU におけるパイプラインの実装</h2> | |
262 <table> | |
263 <tr> | |
264 <th> | |
265 <pre class="code" align="left">void | |
266 Scheduler::run(SchedTaskBase* task1) { | |
267 SchedTaskBase* task2 = new SchedNop(); | |
268 SchedTaskBase* task3 = new SchedNop(); | |
269 | |
270 // main loop | |
271 do { | |
272 | |
273 task1->read(); | |
274 task2->exec(); | |
275 task3->write(); | |
276 | |
277 delete task3; | |
278 | |
279 task3 = task2; | |
280 task2 = task1; | |
281 task1 = task1->next(this, 0); | |
282 | |
283 } while (task1); | |
284 | |
285 delete task3; | |
286 delete task2; | |
287 }</pre> | |
288 </th> | |
289 <th align="left"> | |
290 <p> | |
291 Cerium の Task は SchedTask と呼ばれるデータ構造で表現されている。 | |
292 SchedTask は read/exec/write のメソッドを持っており、 | |
293 パイプラインの各ステージで段階的に実行される。 | |
294 </p> | |
295 <p> | |
296 引数として TaskList を受け取り、List 内の Task をパイプライン実行する。 | |
297 task3 が write を担当しており、write が終わった Task は終了となる。 | |
298 </p> | |
299 <p> | |
300 終了した task は delete して良い。 | |
301 task3=task2、task2=task1 と SchedTask をずらして行き、TaskList から 次の Task を読み込む。 | |
302 </p> | |
303 </th> | |
304 </tr> | |
305 </table> | |
306 </div> | |
307 | |
308 <div class='slide'> | |
309 <h2>DMA の prefetch を用いた改良</h2> | |
310 </div> | |
311 | |
312 <div class='slide'> | |
313 <h2>マルチコア CPU におけるデータ並列</h2> | |
314 </div> | |
315 | |
316 <div class='slide'> | |
317 <h2>GPGPU への対応</h2> | |
318 </div> | |
319 | |
320 <div class='slide'> | |
321 <h2>GPGPU におけるパイプラインの実装</h2> | |
322 </div> | |
323 | |
324 <div class='slide'> | |
325 <h2>GPGPU におけるデータ並列</h2> | |
326 </div> | |
327 | |
328 <div class='slide'> | |
329 <h2>Cerium の I/O(mmap による読み込み)</h2> | |
330 </div> | |
331 | |
332 <div class='slide'> | |
333 <h2>BlockedRead による I/O の並列化</h2> | |
334 </div> | |
335 | |
336 <div class='slide'> | |
337 <h2>I/O 専用のThread</h2> | |
338 </div> | |
339 | |
340 <div class='slide'> | |
341 <h2>実験に利用する例題-Sort-</h2> | |
342 </div> | |
343 | |
344 <div class='slide'> | |
345 <h2>実験に利用する例題-WordCount-</h2> | |
346 </div> | |
347 | |
348 <div class='slide'> | |
349 <h2>実験に利用する例題-FFT-</h2> | |
350 </div> | |
351 | |
352 <div class='slide'> | |
353 <h2>実験環境</h2> | |
354 </div> | |
355 | |
356 <div class='slide'> | |
357 <h2>マルチコア CPU による並列実行のベンチマーク</h2> | |
358 </div> | |
359 | |
360 <div class='slide'> | |
361 <h2>DMA の prefecth に関するベンチマーク </h2> | |
362 </div> | |
363 | |
364 <div class='slide'> | |
365 <h2>GPGPU のベンチマーク</h2> | |
366 </div> | |
367 | |
368 <div class='slide'> | |
369 <h2>データ並列実行のベンチマーク</h2> | |
370 </div> | |
371 | |
372 <div class='slide'> | |
373 <h2>GPGPU のベンチマーク</h2> | |
374 </div> | |
375 | |
376 <div class='slide'> | |
377 <h2>FFT による GPGPU のベンチマーク</h2> | |
378 </div> | |
379 | |
380 <div class='slide'> | |
381 <h2>BlockedRead による並列 I/O のベンチマーク</h2> | |
382 </div> | |
383 | |
384 <div class='slide'> | |
385 <h2>まとめ</h2> | |
386 </div> | |
387 | |
388 <div class='slide'> | |
389 <h2>今後の課題</h2> | |
199 </div> | 390 </div> |
200 | 391 |
201 </div> <!-- presentation --> | 392 </div> <!-- presentation --> |
202 </bodypp> | 393 </bodypp> |
203 </html> | 394 </html> |