Mercurial > hg > Papers > 2010 > jsst-yutaka
view presen/presen.html @ 24:f36296a02b5b default tip
fix
author | Yutaka_Kinjyo |
---|---|
date | Mon, 13 Sep 2010 10:14:34 +0900 |
parents | 1a964eb56925 |
children |
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>Yutaka Kinjyo, Shinji Kono</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> --> <!-- <big><u>Output data</u></big> --> <!-- <ul> --> <!-- <li>Onput data にはTaskが処理したデータの書き出し先アドレスとサイズを指定する。</li> --> <!-- <li>SPE側でそのアドレスをもとにDMA転送を用いて実際のデータをメインメモリに書き出す。</li> --> <!-- </ul> --> <!-- </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をwaitする場合、TaskBが実行完了すると、TaskAが実行可能になる。</li> <li>Taskの実行完了は、SPEのMail送信ボックスにデータが書き込まれ通知される。</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>Mail機能</u></big><br> <ul> <li>Cellの機能の1つ</li> <li>32bitのメッセージをPPE,SPE間でやりとりできる</li> <li>送信ボックス、受信ボックスがSPEに設けられている。</li> <li>それぞれMailボックスはキューになっている</li> <li>受信ボックスのサイズは4</li> <li>送信ボックスのサイズは1</li> </ul> </div> <div class="slide"> <h1>CeriumにおけるTask</h1> <big><u>Mail機能</u></big><br> <ul> <li>送信ボックスのデータはPPEから、受信ボックスのデータはSPEから呼び出される</li> <li>書き込みはその逆</li> </ul> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/mail.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をMailで通知する</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>SPEの待ち時間</h1> SPEはデータの転送とMailの読み込み、書き込みの際に待ち時間が生じることがある。 <ul> <li> 送信Mailボックスに書き込もうとしたとき、 ボックスがいっぱいの場合は、PPEから呼び出されるまでSPEは待ち続ける </li> <li> TaskManagerでは、受信ボックスがいっぱいになることはない。 </li> <li>PPEでMailのチェック、返信があるまで、SPEは止まってしまう</li> <li>SPEの待ち時間が増えると、処理速度の低下につながる</li> </ul> </div> <div class="slide"> <h1>Sort</h1> TaskManagerを用いたsortの例題を紹介する<br> CellのSPE6基、1基、Mac OS X 10.5 と比較する。 <ul> <li>time : 実行時間</li> <li>dma wait : dma転送の待ち時間の割合</li> <li>mail wait : mailの待ち時間の割合</li> <li>sortする対象は30,000個のランダムな値</li> <li>Quick sortを行う</li> </ul> </div> <div class="slide"> <h1>Sort</h1> <table border="3" style="width:100%;"> <tr> <th></th> <th>Mac OS X</th> <th>Cell(SPE6)</th> <th>Cell(SPE1)</th> </tr> <tr> <th>time</th> <td align="center">24.9s</td> <td align="center">11.0s</td> <td align="center">65.8s</td> </tr> <tr> <th>dma wait</th> <td align="center">なし</td> <td align="center">0.41%</td> <td align="center">0.39%</td> </tr> <tr> <th>mail wait</th> <td align="center">なし</td> <td align="center">0.82%</td> <td align="center">0.17%</td> </tr> <caption>Sortの速度比較</caption> </table><br> <ul> <li>SPEの稼働率は約98%。</li> <li>Sortの場合、SPEの待ち時間がほとんど無く高速に動作する</li> <li>WordCount,レンダリングエンジンの場合は待ち時間がはいる</li> </ul> </div> <div class="slide"> WordCountのTask内容 <ul> <li>WordCountTask(<font color="red">TaskArray化</font>)</li> <ul> <li>Input data であたえられたデータをwcし、output data に書き出す</li> </ul> <li>PrintTask</li> <ul> <li>各SPEから書き出されたwcデータを集計し、出力する</li> <li>dependency に WordCountTaskを設定</li> </ul> </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> ファイルの大きさは166MB <table border="3" style="width:100%;"> <tr> <th></th> <th>WordCount</th> </tr> <tr> <th>time</th> <td align="center">2.102s</td> </tr> <tr> <th>dma wait</th> <td align="center">12%</td> </tr> <tr> <th>mail wait</th> <td align="center">7%</td> </tr> <caption>WordCountの速度</caption> </table><br> <ul> <li>Sort に比べて、dima wait, mail wait の割合が大きい</li> </ul> </div> <div class="slide"> <h1>TaskArray</h1> <font color="red">SPEのMailの待ち時間を解消するためにTaskArrayを提案、実装した</font> <ul> <li>TaskArrayは複数のTaskを1つにまとめることができる</li> <li>Task毎のMail通知がTaskArray毎の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> 期待される効果 <ul> <li>Mailの数が減り、SPEのMail待ちのタイミングが減る</li> <li>Mail待ちが減るので、SPEの稼働率が向上する</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>WordCount</h1> <ul> <li>TaskArrayのサイズは64</li> </ul> <table border="3" style="width:100%;"> <tr> <th></th> <th>Task</th> <th>TaskArray</th> </tr> <tr> <th>time</th> <td align="center">2.102s</td> <td align="center">2.083s</td> </tr> <tr> <th>dma wait</th> <td align="center">12%</td> <td align="center">17(<font color="red">+5</font>)%</td> </tr> <tr> <th>mail wait</th> <td align="center">7%</td> <td align="center">2(<font color="red">-5</font>)%</font></td> </tr> <caption>WordCountの比較</caption> </table><br> <ul> <li>Mail wait の割合が減少、代わりに dma wait が増加</li> <li>TaskArrayは、最初にdma転送でTaskArrayの中のTaskを取得する</li> </ul> </div> <div class="slide"> <h1>WordCount</h1> WordCount の dma wait <ul> <li>大きなファイルをメモリにマッピングするためスワップが起きる</li> <li>dmaでメモリにアクセスするときに、時間がかかり待ち時間が生じるていると考えられる</li> </ul> </div> <div class="slide"> <h1>WordCount</h1> メモリアクセスの局所性を維持するために <ul> <li>一度にすべてのTaskを生成せず、一定のTaskを生成、実行を繰り返す</li> <li>同期する地点を設け、特定のSPEがはしり過ぎないようにする</li> <!-- <li>一度に生成するTaskは384個</li> --> </ul> <table border="3" style="width:100%;"> <tr> <th></th> <th>一度に生成</th> <th>分割して生成</th> </tr> <tr> <th>time</th> <td align="center">2.083s</td> <td align="center">2.481s</td> </tr> <tr> <th>dma wait</th> <td align="center">17%</td> <td align="center">9(<font color="red">-8</font>)%</td> </tr> <tr> <th>mail wait</th> <td align="center">2%</td> <td align="center">22(+20)%</td> </tr> <caption>WordCountの比較</caption> </table><br> </div> <div class="slide"> <h1>WordCount</h1> WordCount の Mail wait <ul> <li>次のTaskは、今のTaskが終わってから生成するので、その間の待ちがある</li> <li>PPE側で先に次のTaskを用意しておくことで、改善できるはず</li> <li>また、Task同様マッピング自体も複数回にわけて行うことで、局所性が維持できる</li> </ul> </div> <div class="slide"> <h1>TaskArray</h1> <font color="red">レンダリングエンジンのTaskの一部をTaskArray化した</font><br><br> レンダリングエンジンのTask内容 <ul> <li>CreatePolygonTask</li> <ul> <li>Polygonを生成する</li> </ul> <li>CreateSpanTask</li> <ul> <li>Polygonを水平な線(Span)に分割する</li> </ul> <li>DrawSpanTask(<font color="red">TaskArray化</font>)</li> <ul> <li>Spanを描画する</li> </ul> </ul> </div> <div class="slide"> <h1>レンダリングエンジン</h1> DrawSpanTask : Taskの数が多いDrawSpanTaskをTaskArray化した。地球と月を表示する 例題を対象に計測した。<br><br> 計測条件 <ul> <li>FPS : 一秒間に表示するFrame数</li> <li>TaskArrayの適応の有無を比較</li> <li>TaskArrayのサイズは8</li> </ul> </div> <div class="slide"> <h1>レンダリングエンジン</h1> <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%(<font color="red">-13%</font>)</td> </tr> <caption>レンダリングエンジンの比較</caption> </table><br> <ul> <li>mail wait 割合が減少し、それに伴ってFPSも増加</li> <li>レンダリングエンジンの場合、PPE側で実行するTaskがある</li> <li>PPEのMailチェックがおくれることがあるので、TaskArrayの効果がある</li> <li>Mail wait の細かい内訳はまだわかっていない</li> </ul> </div> <div class="slide"> <h1>レンダリングエンジン</h1> 今後のMail待ち時間削減<br> <ul> <li>PPE側のTaskをSPEに任せ、PPEの負担をへらす</li> <li>別スレッドでMailを監視する</li> <li>他のTaskもTaskArray化する</li> <li>Mail wait の細かい内訳を調べる</li> </ul> </div> <div class="slide"> <h1>まとめ</h1> <ul> <li>複数のTaskをまとめるTaskArrayを提案、実装した。</li> <li>PPE側が忙しい場合、<font color="red">Mail待ち時間の削減にTaskArrayの効果がみられる</font></li> <li>大量のメモリを消費する処理の場合</li> <ul> <li>マッピングの方法、Taskのスケジューリングを工夫して局所性を維持することでdma転送時間を削減できる</li> </ul> </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>