Mercurial > hg > Papers > 2010 > jsst-yutaka
view presen/presen.html @ 10:e5f74d4de3ad
add file
author | Yutaka_Kinjyo |
---|---|
date | Wed, 08 Sep 2010 01:05:10 +0900 |
parents | |
children | c770f569a801 |
line wrap: on
line source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> <head> <title>発表資料</title> <!-- metadata --> <meta name="generator" content="S5" /> <meta name="version" content="S5 1.1" /> <meta name="presdate" content="20050728" /> <meta name="author" content="Eric A. Meyer" /> <meta name="company" content="Complex Spiral Consulting" /> <!-- configuration parameters --> <meta name="defaultView" content="slideshow" /> <meta name="controlVis" content="hidden" /> <!-- style sheet links --> <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" /> <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" /> <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" /> <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" /> <!-- S5 JS --> <script src="ui/default/slides.js" type="text/javascript"></script> <style type="text/css"> body { font-size: 100%; } p.ex10 { font-size: 2.0em; } p.ex9 { font-size: 1.9em; } p.ex8 { font-size: 1.8em; } p.ex7 { font-size: 1.7em; } p.ex6 { font-size: 1.6em; } p.ex5 { font-size: 1.5em; } p.ex4 { font-size: 1.4em; } p.ex3 { font-size: 1.3em; } p.ex2 { font-size: 1.2em; } p.ex1 { font-size: 1.1em; } p.ex0 { font-size: 1.0em; } p.ex05 { font-size: 0.5em; } span.classifier { font-family: sans-serif ; font-style: oblique } span.classifier-delimiter { font-family: sans-serif ; font-weight: bold } span.interpreted { font-family: sans-serif } span.option { white-space: nowrap } span.pre { white-space: pre } span.problematic { color: red } span.section-subtitle { /* font-size relative to parent (h1..h6 element) */ font-size: 80% } </style> </head> <body> <div class="layout"> <div id="controls"><!-- DO NOT EDIT --></div> <div id="currentSlide"><!-- DO NOT EDIT --></div> <div id="header"></div> <div id="footer"> <!--<h1>Cell上のソフトウェアレンダリングの高速化と高機能化</h1> <h2>琉球大学工学部情報工学科並列信頼研</h2>--> </div> </div> <div class="presentation"> <div class="slide"> <h1>Fine grain Task Manager Cerium のチューニング</h1> <h3>108574D 金城裕</h3> <h3>指導教官:河野真治</h3> <h4>琉球大学大学院理工学研究科情報工学専攻並列信頼研</h4> </div> <div class="slide"> <h1>研究目的 と 背景</h1> <p class="ex1"> 現在 Cell/PS3またはMac OS X上で動作するOpen CL 的なFine Grain Task Manager である Cerium Task Manager を開発中である。 </p> <ul> <li> ソフトウェアレンダリングエンジンとWord countを例題として、Task Manager の実装時の問題を洗い出している。 </li> <br> <li>メインメモリ上の Task を各 Core が受け取る際や、その終了を通知する際に待ち時間が生じる。</li> </ul> <p><font color="red">本研究ではその待ち時間を削減するTask arrayを提案し実装した。その効果について報告する</font></p> </div> <div class="slide"> <h1>発表の流れ</h1> <ul> <li>Cellとは</li> <li>Ceriumとは</li> <li>CeriumにおけるTask</li> <li>TaskArray</li> <ul> <li>WordCountのTaskArray化</li> <li>レンダリングエンジンのTaskArray化</li> </ul> <li>結果</li> <li>まとめ</li> </ul> </div> <div class="slide"> <h1>Cellとは</h1> <big>Cell(Cell Broadband Engine)</big>とはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ<br> Cellは1基の制御系のプロセッサコア<u>PPE</u>と、8基の演算系プロセッサコア<u>SPE</u> で構成される(Ceriumで扱えるSPEの数は6基)。 <!-- PPEよりもSPEが高速なので、1SPE 上で実行するだけでも意味がある。--> <!-- それぞれ高速なバスで接続されている<br><br> --> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/cell1.png" style="width: 40%%"></td></tr> </table> </div> <div class="slide"> <h1>Ceriumとは</h1> <big>Cerium</big>とは、当研究室で開発したPS3/Cell、Mac OS X、Linux 上で動作するゲームフレームワーク。 以下の3つの要素から構成されている。 <ul> <li>TaskManager</li> <li>レンダリングエンジン</li> <li>SceneGraph</li> </ul> </div> <div class="slide"> <h1>Ceriumとは</h1> <big>Cerium</big>とは、当研究室で開発したPS3/Cell、Mac OS X、Linux 上で動作するゲームフレームワーク。 以下の3つの要素から構成されている。 <ul> <li><font color="red">TaskManager</font></li> <li>レンダリングエンジン</li> <li>SceneGraph</li> </ul> </div> <div class="slide"> <h1>TaskManager</h1> <ul> <li>TaskManagerは、Taskと呼ばれる、分割された各プログラムを管理する</li> <ul> <li>Taskの単位は関数またはサブルーチン</li> </ul> <li>Task同士の依存関係を考慮</li> <li>実行可能になったTaskをSPEに渡す</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/taskmanager1.png" style="width: 60%%"></td></tr> </table> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> TaskはTaskManagerを使って生成する。Taskを生成する際に以下のような要素が 設定可能である。 <ul> <li>Input data</li> <li>Output data</li> <li>Paramater</li> <li>CPU type</li> <li>Dependency</li> </ul> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Input data</u></big> <ul> <li>Input data にはTaskの処理対象データのアドレスとサイズを指定する。</li> <li>SPE側でそのアドレスをもとにDMA転送を用いて実際のデータをメインメモリから取得する。</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/task1.png" style="width: 80%%"></td></tr> </table> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Output data</u></big> <ul> <li>Onput data にはTaskが処理したデータの書き出し先アドレスとサイズを指定する。</li> <li>SPE側でそのアドレスをもとにDMA転送を用いて実際のデータをメインメモリに書き出す。</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/task2.png" style="width: 80%%"></td></tr> </table> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Paramater</u></big><br> <ul> <li>Input data とは別にデータを与えたい場合に使用する。</li> <li>32bitの値を指定する。</li> </ul> <big><u>CPU type</u></big> <ul> <li>TaskがどのCoreで実行されるかを指定する。</li> <li>PPEもしくは、6基のSPEのいづれかを選択できる。</li> </ul> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Dependency</u></big><br> <ul> <li>Dependencyは他のTaskとの依存関係を示す。</li> <li>例えばTaskAがTaskBの実行完了を待つ例を紹介する。</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/dependency1.png" style="width: 40%%"></td></tr> </table> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Dependency</u></big><br> <ul> <li>はじめTaskBは待つTaskがないので、すぐにActiveQueueに入る。</li> <li>TaskAはTaskBを待つのでWaitQueueに入る。</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/dependency2.png" style="width: 60%%"></td></tr> </table> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Dependency</u></big><br> <ul> <li>ActiveQueueにあるTaskBはSPEに送られ実行される。</li> <li>TaskAはWaitQueueでTaskBを待つ。</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/dependency3.png" style="width: 60%%"></td></tr> </table> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Dependency</u></big><br> <ul> <li>TaskBが完了するとMailで通知される。</li> <li>TaskAは待つTaskがなくなるので、ActiveQueueに移る。</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/dependency4.png" style="width: 60%%"></td></tr> </table> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Dependency</u></big><br> <ul> <li>TaskBが完了するとMailで通知される。</li> <li>TaskAは待つTaskがなくなるので、ActiveQueueに移る。</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/dependency5.png" style="width: 60%%"></td></tr> </table> </div> <div class="slide"> <h1>TaskArray</h1> <big><u>TaskArray</u></big><br> <ul> <li>Task毎にMail通知を行う、、今日はここまで・・続きまた頑張りまっす。</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/dependency5.png" style="width: 60%%"></td></tr> </table> </div> <div class="slide"> <h1>今週</h1> <table border="3" style="width:100%;"> <tr> <th></th> <th>real_time</th> <th>wait_time</th> <th>mail_time</th> <th>busy_ratio</th> </tr> <tr> <th>all</th> <td align="center">58s</td> <td align="center">77%</td> <td align="center">17%</td> <td align="center">5.5%</td> </tr> <tr> <th>compatibility</th> <td align="center">31s</td> <td align="center">50%</td> <td align="center">39%</td> <td align="center">10%</td> </tr> <tr> <th>taskarray</th> <td align="center">34s</td> <td align="center">35%</td> <td align="center">55%</td> <td align="center">9%</td> </tr> <caption>速度比較</caption> </table><br> しかし、これは、RUN_TASK_BLOCKS_TASK を1つだけ生成した場合でした・・二つにしてみると・・ </div> <div class="slide"> <h1>今週</h1> <table border="3" style="width:100%;"> <tr> <th></th> <th>real_time</th> <th>wait_time</th> <th>mail_time</th> <th>busy_ratio</th> </tr> <tr> <th>all</th> <td align="center">58s</td> <td align="center">77%</td> <td align="center">17%</td> <td align="center">5.5%</td> </tr> <tr> <th>compatibility</th> <td align="center">31s</td> <td align="center">50%</td> <td align="center">39%</td> <td align="center">10%</td> </tr> <tr> <th>taskarray</th> <td align="center">34s</td> <td align="center">35%</td> <td align="center">55%</td> <td align="center">9%</td> </tr> <caption>速度比較(RUN_TASK_BLOCK を1つ生成)</caption> </table><br> <table border="3" style="width:100%;"> <tr> <th></th> <th>real_time</th> <th>wait_time</th> <th>mail_time</th> <th>busy_ratio</th> </tr> <tr> <th>all</th> <td align="center">58s</td> <td align="center">62%</td> <td align="center">32%</td> <td align="center">5.5%</td> </tr> <tr> <th>compatibility</th> <td align="center">24s</td> <td align="center">79%</td> <td align="center">17%</td> <td align="center">13%<font color="red">(+3)</font></td> </tr> <tr> <th>taskarray</th> <td align="center">28s</td> <td align="center">66%</td> <td align="center">22%</td> <td align="center">11%<font color="red">(+2)</font></td> </tr> <caption>速度比較(RUN_TASK_BLOCK を二つ生成)</caption> </table><br> なるほど、次のTask生成までの時間ロスが減るので、少し速くなりますね。 </div> <div class="slide"> <h1>DrawSpan</h1> DrawSpanのTaskがTaskArray有無の場合<br><br> 例題はball_bound<br><br> compatibility -> 4.073888 FPS<br> TaskArray -> 4.339242 FPS<br> </div> <div class="slide"> <h1>論文をどうまとめるか</h1> <ul> 論文ちゃんの内容 <li>Taskが大量の場合一度に全て生成するより、incrementalに生成したほうがよい</li> <li>TaskArrayはうーん。うーん。もう少し考えてみます。</li> </ul> </div> <div class="slide"> <h1>end</h1> <ul> /*end*/ <br><br> <div class="slide"> <h1>Mandelbrot</h1> <table border="3" style="width:100%;"> <tr> <th></th> <th>real_time</th> <th>wait_time</th> <th>mail_time</th> <th>busy_ratio</th> </tr> <tr> <th>all</th> <td align="center">58s(-0)</td> <td align="center">62(-15)%</td> <td align="center">32%(+15)</td> <td align="center">5.5%(-0)</td> </tr> <tr> <th>compatibility</th> <td align="center">24s(-7)</td> <td align="center">79%(+19)</td> <td align="center">17%(-22)</td> <td align="center">13%(+3)</td> </tr> <tr> <th>taskarray</th> <td align="center">28s(-6)</td> <td align="center">66%(+31)</td> <td align="center">22%(-33)</td> <td align="center">11%(+2)</td> </tr> <caption>速度比較(RUN_TASK_BLOCK を二つ生成)</caption> </table><br> </div> <div class="slide"> <h1>Mandelbort</h1> <ul> <br> MandelbrotをCeriumに実装<br> こっちも、まだセグメンテーションエラーです。<br> バグとり間に合わず。 </div> <div class="slide"> <h1>バグとり</h1> <ul> <br> というわけで、WordCountのTaskArray,ネックの検証<br> MandelbrotのCerium実装<br> 引き続きもうちょっと頑張ります。 </div> <div class="slide"> <h1>end</h1> <ul> /*end*/ <br><br> </div> <div class="slide"> <h1>ダブルバッファリング</h1> <img src="gazo/doublebuffering.png" width="670" height="200"> <br> TaskListしたので、ダブルバッファリングしやすかった。次のタスクのアドレスがわかるので、 現Taskを処理している間に次のTaskをdma_get,前のTaskのoutputをdma_putする。 </div> <div class="slide"> <h1>例題</h1> <br> という実装をしたところで、マンデルブロー集合を計算してみました。demoあり </div> <div class="slide"> <h1>今後</h1> <br> 現在、SPE側のrun関数が決め打ちで動き、それがtaskという事になっている。 Cerium/TaskManager のように複数のTaskから指定して動くようにしたい。あとTaskの依存関係も。 MemorySegment!やります! </div> <div class="slide"> <h1>end</h1> <ul> /*end*/ <br><br> </ul> <div class="handout"> [any material that should appear in print but not on the slide] </div> </div> </div> </body> </html>