Mercurial > hg > Papers > 2010 > jsst-yutaka
view presen/presen.html @ 12:c770f569a801
add file
author | Yutaka_Kinjyo |
---|---|
date | Fri, 10 Sep 2010 02:43:57 +0900 |
parents | e5f74d4de3ad |
children | 87b8bb4d104c |
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: 50%%"></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>Taskの送信</h1> <ul> <li>Taskは1つ毎にSPEには送らない</li> <li>いくつかのTaskをまとめTaskListとして送る</li> <li>TaskListをすべて完了すると、SPEからPPEにMail通知が送られる</li> <li>PPE側がMailをチェックし次のTaskListを通知する</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/tasklist1.png" style="width: 40%%"></td></tr> </table> </div> <div class="slide"> <h1>Mail通知</h1> <ul> <li>SPEからPPEへのMail送信ボックスはキューになっている</li> <li>キューのサイズは1</li> <li>書き込む際にキューがいっぱいの場合はPPEから呼び出されるまで待つ</li> <li>PPEからのMail呼び出しがないと、SPEは待ち続ける</li> </ul> </div> <div class="slide"> <h1>TaskArray</h1> <font color="red">SPEの待ちを解消するためにTaskArrayを提案、実装した</font> <ul> <li>TaskArrayは複数のTaskを1つにまとめることができる</li> <li>Task毎のMail通知がTaskArray毎のMail通知になる</li> </ul> <br> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/taskarray1.png" style="width: 50%%"></td></tr> </table> </div> <div class="slide"> <h1>TaskArray</h1> 期待される効果 <ul> <li>Mailの数が減り、SPEのMail待ちのタイミングが減る</li> <li>Mail待ちが減るので、SPEの稼働率が向上する</li> <li>また、PPE側のMailチェックの時間も減る</li> <li>結果、処理速度が向上する</li> </ul> <br> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/taskarray1.png" style="width: 50%%"></td></tr> </table> </div> <div class="slide"> <h1>TaskArray</h1> <font color="red">WordCountのTaskと、レンダリングエンジンのTaskの一部をTaskArray化した。 その結果を報告する</font><br><br> それぞれのTask内容 <ul> <li>WordCount</li> <ul> <li>WordCountTask(<font color="red">TaskArray化</font>)</li> <li>PrintTask</li> </ul> <li>レンダリングエンジン</li> <ul> <li>CreatePolygonTask</li> <li>CreateSpanTask</li> <li>DrawSpanTask(<font color="red">TaskArray化</font>)</li> </ul> </ul> </div> <div class="slide"> <h1>WordCount</h1> <ul> <li>wcするfileをマッピングし、Taskに割り振る</li> <li>WordCountTaskの終了をまって、PrintTaskが実行される</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/wc_graf1.png" style="width: 40%%"></td></tr> </table> </div> <div class="slide"> <h1>WordCount</h1> <ul> <li>TaskArrayのサイズは64</li> <li>WC対象は166Mのテキスト</li> <li>TaskArrayの適応の有無を比較</li> </ul> </div> <div class="slide"> <h1>WordCount</h1> <ul> <li>time : 実行時間</li> <li>dma wait : dma転送待ちの割合</li> <li>time wait : mail待ちの割合</li> </ul> <br> <table border="3" style="width:100%;"> <tr> <th></th> <th>Task</th> <th>TaskArray</th> </tr> <tr> <th>time</th> <td align="center">2.184s</td> <td align="center">2.109s</td> </tr> <tr> <th>dma wait</th> <td align="center">18%</td> <td align="center">12%</td> </tr> <tr> <th>mail wait</th> <td align="center">5%</td> <td align="center">8%</td> </tr> <caption></caption> </table><br> <div class="slide"> <h1>WordCount</h1> <ul> <li>あまり効果は見られなかった</li> <li>PPE側のTaskがないので、あまりmail待ちが入らない</li> <li>ファイルのサイズが大きいのでメモリアクセスで時間がかかる</li> </ul> <br> <table border="3" style="width:100%;"> <tr> <th></th> <th>Task</th> <th>TaskArray</th> </tr> <tr> <th>time</th> <td align="center">2.184s</td> <td align="center">2.109s</td> </tr> <tr> <th>dma wait</th> <td align="center">18%</td> <td align="center">12%</td> </tr> <tr> <th>mail wait</th> <td align="center">5%</td> <td align="center">8%</td> </tr> <caption></caption> </table><br> </div> <div class="slide"> <h1>WordCount</h1> 改善策 <ul> <li>一度にファイルマッピングをしない</li> <li>何度かに分けてマッピングする</li> <li>同じ領域を切り替えて使う</li> <li>スワップを減らし、アクセス時間を短縮する</li> <li>dma wait の割合が減る</li> </ul> </div> <div class="slide"> <h1>レンダリングエンジン</h1> 構成Task <ul> <li>CreatePolygonTask</li> <li>CreateSpanTask</li> <li>DrawSpanTask(<font color="red">TaskArray化</font>)</li> </ul> <br> DrawSpanTask : Taskの数が多いDrawSpanTaskをTaskArray化した。地球と月を表示する 例題を対象に計測した。 </div> <div class="slide"> <h1>レンダリングエンジン</h1> <ul> <li>FPS : 一秒間に表示できるFrame数</li> </ul> <table border="3" style="width:100%;"> <tr> <th></th> <th>Task</th> <th>TaskArray</th> </tr> <tr> <th>FPS</th> <td align="center">3.94</td> <td align="center">4.32</td> </tr> <tr> <th>dma wait</th> <td align="center">0.06%</td> <td align="center">0.07%</td> </tr> <tr> <th>mail wait</th> <td align="center">55%</td> <td align="center">42%</td> </tr> <caption></caption> </table><br> <ul> <li>mail wait 割合が減った</li> <li>レンダリングエンジンの場合、PPE側で実行するTaskがあるので、 mailチェックが遅れ気味</li> </ul> </div> <div class="slide"> <h1>まとめ</h1> <ul> <li>複数のTaskをまとめるTaskArrayを提案、実装した。</li> <li>PPE側が忙しく、mailチェックが遅れる場合に効果的</li> <li>PPE側にTaskがない場合は、mailチェックは間に合う</li> <li>WordCountはdma転送がネックになっている</li> <li>マッピングの方法、Taskのスケジューリングを工夫して、dma転送時間を削減できる</li> </ul> </div> <div class="slide"> <h1>end</h1> <ul> /*end*/ <br><br> <div class="handout"> [any material that should appear in print but not on the slide] </div> </div> </div> </body> </html>