Mercurial > hg > Papers > 2011 > yutaka-sigos
diff presen/presen.html @ 12:e6a78ee8fb13
fix
author | Yutaka_Kinjyo |
---|---|
date | Tue, 12 Apr 2011 17:13:21 +0900 |
parents | |
children | 083c7035b2cf |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/presen.html Tue Apr 12 17:13:21 2011 +0900 @@ -0,0 +1,855 @@ +<!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>ゲームフレームワーク Cerium TaskManager の改良</h1> +<h3>金城 裕, 河野 真治, <br>多賀野 海人, 小林 佑亮</h3> +<h4>琉球大学大学院理工学研究科情報工学専攻並列信頼研</h4> +</div> + +<div class="slide"> +<h1>概要</h1> + +ゲームフレームワーク Cerium TaskManager を開発しました。 + +<ul> + <li>動作環境:MacOSX, Linux, PS3/Cell</li> + <li>主にCellに特化している。</li> + <li>SceneGraphを用いて、ゲームを記述する</li> + +</ul><br> + +琉球大学の学生実験で使用している。 + +</div> + + +<div class="slide"> +<h1>Cell</h1> +Cell Broadband Engine + +<ul> + <li>ソニー・コンピュータエンタテインメント、ソニー、IBM , 東芝によって開発されたマルチコア CPU である</li> + <li>1基の制御系プロセッサコアPPE(PowerPC Processor Element)</li> + <li>8基の演算系プロセッサコアSPE(Synergistic Processor Element)</li> + <li>各コアはEIB(Element Interconnect Bus)とうバスで接続されている</li> +</ul><br> + +</div> + +<div class="slide"> +<h1>Cell</h1> +Cell Broadband Engine + +<table height="100%" width="100%" border="0"> +<tr><td align="center" valign="middle"> +<img src="gazo/cell_arch.jpg" style="width: 50%%"></td></tr> +</table> + + +PPEは直接メインメモリアクセスできるが、SPEはそれぞれのLSにしかアクセスできない<br> +DMA転送を用いてメインメモリからのデータを明示的に取得する + +</div> + +<div class="slide"> +<h1>Cell</h1> +Cell のプログラミングスタイル + +<ul> + <li>PPEがデータと仕事を分割し、各SPEへ割り当てる</li> +</ul><br> + +Ceriumでは関数をTaskとして定義。Taskを各SPEへ割り当てる。<br> +一つのTaskにはinput,output,param,等のデータを持たせる<br> + + +</div> + +<div class="slide"> +<h1>Ceriumの構成</h1> + +Ceriumの構成 + +<ul> + <li>TaskManager</li> + <ul> + <li>ユーザが定義したTaskを管理し、各コアに割り当てる</li> + </ul> + + <li>RenderingEngine</li> + <ul> + <li>オブジェクトを画面に描画する</li> + <li>3種類のTaskから構成される</li> + </ul> + + <li>SceneGraph</li> + <ul> + <li>ゲームのルールを記述してく</li> + <li>ゲームのシーンを作成し、それを切り替えながらゲームを進行する</li> + <li>OpenSceneGraphのようなもの</li> + </ul> + +</ul><br> + + + +</div> + +<div class="slide"> +<h1>Ceriumの構成</h1> + +<table height="100%" width="100%" border="0"> +<tr><td align="center" valign="middle"> +<img src="gazo/cerium.png" style="width: 50%%"></td></tr> +</table> + +</div> + +<div class="slide"> +<h1>TaskManager</h1> + +TaskManager + +<ul> + <li>Taskは関数単位</li> + <li>定義されたTaskは依存関係に沿って実行される</li> + <li>Taskはある程度の数が揃った上で、TaskListにまとめられSPEに送られる。</li> + <li>Taskはread,exec,write それぞれパイプライン化されて動く</li> + <li>Taskに必要なデータはDMA転送で送られる。転送時間はパイプライン化によって隠される</li> + <li>Taskの中にDMA転送命令を書くと自動ではパイプライン化されない</li> +</ul> + +</div> + +<div class="slide"> +<h1>TaskMangerを使った例題</h1> + +CeriumのTaskManager を使ったSortの例題<br> +10万個のランダムな値をクイックソートでソートする<br> +ソートする関数をTaskにして各SPEで実行<br><br> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> +<caption>Sortの例題</caption> +<tr> +<th></th> +<th>PPEのみ</th> +<th>SPE 1つ</th> +<th>SPE 6つ</th> +<!--<th>Mac(Core2Duo)</th>--> +<th>SPE稼働率</th> +</tr> +<tr align="center"> +<td>QuickSort</td> +<td>5.60s</td> +<td>6.22s</td> +<td>1.07s</td> +<td>97%</td> +<!--<td>1.76s</td>--> +</tr> +</table> + +<!-- 2.13GHz --> +</div> + + +<div class="slide"> +<h1>アムダール則</h1> + +プログラムの全体に対する並列化した部分の割合が低いと、マルチコアの性能がでない +<!--プログラムの8割を並列化すると、6CPUでは3倍の性能向上しか得られない--> + +<table height="100%" width="100%" border="0"> +<tr><td align="center" valign="middle"> +<img src="gazo/amdahl.jpg" style="width: 55%%"></td></tr> +</table> + +</div> + +<div class="slide"> +<h1>RenderingEngine</h1> + +RenderingEngineの例題<br> +月と + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> +<tr> +<th></th> +<th>FPS</th> +<th>稼働率</th> +<!--<th>Mac(Core2Duo)</th>--> +<th>SPE稼働率</th> +</tr> +<tr align="center"> +<td>universe</td> +<td>17FPS</td> +<td>25.4%</td> +<!--<td>1.76s</td>29%--> +</tr> +</table> + + + + +</div> + + +<div class="slide"> +<h1>RenderingEngine</h1> + +SortとRenderingEngineの違い + +<ul> + <li>三種類のTaskから構成されている</li> + <li>三つのTaskはバリア同期を行っている</li> + <li>すべてのTaskは一度に作られない</li> + <li>PPEにもTaskが割り振られている</li> + <li>大量のデータを扱う(ポリゴン、テクスチャ)</li> +</ul> + +</div> + +<div class="slide"> +<h1>RenderingEngineの構成</h1> +RenderingEngineの構成 +<ul> + <li>CreatePolygon</li> + <ul> + <li>モデリングデータからポリゴンを生成する</li> + </ul> + <li>CreateSpan</li> + <ul> + <li>ポリゴンをSpanと呼ばれる水平な線に分ける</li> + </ul> + <li>DrawSpan</li> + <ul> + <li>Spanを実際にディスプレイに描画する</li> + </ul> +</ul><br> + +RenderingEngineは3種類のTaskから構成されている + +</div> + + +<div class="slide"> +<h1>RenderingEngine</h1> + +RenderingEngienの場合の問題点 + +<ul> + <li>SPEの待ちが入る(SPEの稼働率の低下、処理性能の低下)</li> + <ul> + <li>MailをPPEが読み込みのを待つ</li> + <li>他のSPEを待つ</li> + <li>次のTaskListを待つ</li> + </ul> + <li>PPE側でTaskを生成、各SPEに割り振る</li> + <li>Taskはバリア同期している</li> +</ul> + +</div> + +<div class="slide"> +<h1>バリア同期</h1> +<table height="100%" width="100%" border="0"> +<tr><td align="center" valign="middle"> +<img src="gazo/renderingengine1.png" style="width: 35%%"></td></tr> +</table> + +RenderingEngineのTaskは、3つそれぞれバリア同期をしている。 + +</div> + +<div class="slide"> +<h1>バリア同期</h1> +バリア同期には二つの待ちがある +<ul> + <li>SPEが他のSPEを待つ時間</li> + <li>バリア同期が完了し、PPE側で次のTaskが作られる時間</li> +</ul><br> + + +</div> + +<div class="slide"> +<h1>バリア同期</h1> +<table height="100%" width="100%" border="0"> +<tr><td align="center" valign="middle"> +<img src="gazo/renderingengine2.png" style="width: 45%%"></td></tr> +</table> + +この待ちを解消するためにTaskのパイプライン化を行った。 + +</div> + + + +<div class="slide"> +<h1>Ceriumの改良点の概要</h1> + +Ceriumの改良点の概要 + +<ul> + <li>TaskManager</li> + <ul> + <li>Taskの同期にはCellのMail機能を使う</li> + <li>Mailの同期するタイミングの改良</li> + <ul> + <li>MailQueue</li> + <li>TaskArray</li> + </ul> + </ul> + + <li>RenderingEngine</li> + <ul> + <li>Taskのパイプライン化</li> + <li>扱う画像をSPE側でキャッシュする</li> + </ul> + +</ul> + +</div> + +<div class="slide"> +<h1>Mailbox機能</h1> +CellのMailbox機能<br> + +<ul> + <li>PPEとSPEとの間を双方向で32bitのデータを受け渡す</li> + <li>FIFO キュー構造</li> +</ul> +Mailboxの種類 +<ul> + <li>Inbount Mailbox(PPE->SPE 4つ)</li> + <li>Outbount Mailbox(SPE->PPE 一つ)</li> + <li>Outbount interrupt Mailbox(SPE->PPE 一つ)</li> +</ul> + +</div> + +<div class="slide"> +<h1>Mailbox機能</h1> + +<table height="100%" width="100%" border="0"> +<tr><td align="center" valign="middle"> +<img src="gazo/mailbox.png" style="width: 60%%"></td></tr> +</table> + +</div> + +<div class="slide"> +<h1>Mailbox機能</h1> +SPE側からTaskが一つ実行完了する度に、実行完了のMailをOutboxに書きこむ<br> + +<ul> + <li>Outboxに既にMailが書きこまれている場合に、PPE側から読み込まれるまで、SPEは待つ(Cellの仕様)</li> + <li>PPE側のMailチェックが追いつかない場合がある。</li> + <li>その間、SPEは何もしないので、処理速度の低下につながる</li> +</ul><br> + +そこで、Outboxに既に読み込まれていないMailがあった場合に、いったん、別のキューに追加する。(MailQueue) + + +</div> + +<div class="slide"> +<h1>MailQueue</h1> + +<ul> + <li>TaskListを消化し、次のTaskListを要求する時に、MailQueueにMailが残っている場合はそれを先に書きだす</li> + <li>PPE側はMailのチェックをMailが無くなるまでループする</li> + <li>PPEはMailがない場合に、自分の仕事に戻る。</li> + <li>今のPPEのMailチェックの仕様には、一度にMailを書きだすのが向いている</li> +</ul> + +</ul> + +</div> + +<div class="slide"> +<h1>MailQueueの効果</h1> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> +<caption>MailQueueの効果</caption> +<tr> +<th></th> +<th>改良前</th> +<th>改良後</th> +<th>性能</th> +</tr> +<tr align="center"> +<td>universe</td> +<td>16FPS</td> +<td>18.5FPS</td> +<td>12%向上</td> +</tr> +</table> + +地球と月を表示する例題を使って計測した。 + +</div> + +<div class="slide"> +<h1>Ceriumの改良点の概要</h1> + +Ceriumの改良点の概要 + +<ul> + <li>TaskManager</li> + <ul> + <li>Taskの同期にはCellのMail機能を使う</li> + <li>Mailの同期するタイミングの改良</li> + <ul> + <li><s>MailQueue</s></li> + <li>TaskArray</li> + </ul> + </ul> + + <li>RenderingEngine</li> + <ul> + <li>Taskのパイプライン化</li> + <li>扱う画像をSPE側でキャッシュする</li> + </ul> + +</ul> + +</div> + + +<div class="slide"> +<h1>TaskArray</h1> +Task毎のMailは、Task同士の依存関係を解決するために用いている。 + +<ul> + <li>依存関係はグループ化できる</li> + <li>TaskArrayを用いて複数のTaskのMailを一つに扱う</li> +</ul> + +Mailの数を減らせるので、Mailのための処理が減る。その分処理速度が上がる + +</div> + +<div class="slide"> +<h1>TaskArray</h1> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> +<caption>TaskArrayの効果(universe)</caption> +<tr> +<th></th> +<th>改良前</th> +<th>改良後</th> +<th>性能</th> +</tr> +<tr align="center"> +<td>universe</td> +<td>16FPS</td> +<td>18.5FPS</td> +<td>12%向上</td> +</tr> +</table> + +</div> + + + +<div class="slide"> +<h1>MailQueueとTaskArray</h1> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="8" align="center"> +<caption>MailQueueとTaskArrayの効果(universe)</caption> +<tr> +<th>TaskArray</th> +<th>MailQueue</th> +<th>FPS</th> +<th>性能</th> +</tr> +<tr align="center"> +<td>あり</td> +<td>あり</td> +<td>20FPS</td> +<td>22%向上</td> +</tr> +<tr align="center"> +<td>あり</td> +<td>なし</td> +<td>18.5FPS</td> +<td>12%向上</td> +</tr> +<tr align="center"> +<td>なし</td> +<td>あり</td> +<td>18.5FPS</td> +<td>12%向上</td> +</tr> +<tr align="center"> +<td>なし</td> +<td>なし</td> +<td>16.4FPS</td> +<td>0%向上</td> +</tr> +</table> + +</div> + + +<div class="slide"> +<h1>Ceriumの改良点の概要</h1> + +Ceriumの改良点の概要 + +<ul> + <li>TaskManager</li> + <ul> + <li>Taskの同期にはCellのMailbox機能を使う</li> + <li>Mailの同期するタイミングの改良</li> + <ul> + <li><s>MailQueue</s></li> + <li><s>TaskArray</s></li> + </ul> + </ul> + + <li>RenderingEngine</li> + <ul> + <li>Taskのパイプライン化</li> + <li>扱う画像をSPE側でキャッシュする</li> + </ul> + +</ul> + +</div> + + + + +<div class="slide"> +<h1>パイプライン化</h1> +<table height="100%" width="100%" border="0"> +<tr><td align="center" valign="middle"> +<img src="gazo/renderingengine4.png" style="width: 40%%"></td></tr> +</table> + +あまり、多段にするとゲームのキー入力の反映が遅れる。DrawSpanの処理が他の二つに比べて重いので +DrawSpanとパイプラインを組むことで十分に隠れる + +</div> + +<div class="slide"> +<h1>パイプライン化の比較</h1> + +例題:<br> +PS3上で学生実験で学生が作成したシューティングゲーム +SuperDandy を用いる。 + + +</div> + + +<div class="slide"> +<h1>パイプライン化の比較</h1> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> +<caption>パイプライン化の効果(dandy)</caption> +<tr> +<th></th> +<th>改良前</th> +<th>改良後</th> +<th>性能</th> +</tr> +<tr align="center"> +<td>dandy</td> +<td>11.5FPS</td> +<td>16.6FPS</td> +<td>44%向上</td> +</tr> +</table> + +44%の向上がみられた。 + +</div> + +<div class="slide"> +<h1>Ceriumの改良点の概要</h1> + +Ceriumの改良点の概要 + +<ul> + <li>TaskManager</li> + <ul> + <li>Taskの同期にはCellのMailbox機能を使う</li> + <li>Mailの同期するタイミングの改良</li> + <ul> + <li><s>MailQueue</s></li> + <li><s>TaskArray</s></li> + </ul> + </ul> + + <li>RenderingEngine</li> + <ul> + <li><s>Taskのパイプライン化</s></li> + <li>扱う画像をSPE側でキャッシュする</li> + </ul> + +</ul> + +</div> + + +<div class="slide"> +<h1>SPEのキャッシュ効果</h1> + +SPE内でのキャッシュ + +<ul> + <li>DrawSpan内で、描画するためのテクスチャデータを読み込む。</li> + <li>テクスチャは分割さていて、必要な時に必要な部分を読み込む</li> + <li>そこで、テクスチャをキャッシュするようにした(LRU)</li> + <li>テクスチャのデータはハッシュで管理する</li> + </ul> + +</div> + + +<div class="slide"> +<h1>SPEのキャッシュ効果</h1> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> +<caption>SPEのキャッシュの効果(universe)</caption> +<tr> +<th></th> +<th>改良前</th> +<th>改良後</th> +<th>性能</th> +</tr> + +<tr align="center"> +<td>ball_bound</td> +<td>4FPS</td> +<td>30FPS</td> +<td>7.5倍</td> +</tr> + +<tr align="center"> +<td>panel</td> +<td>0.2FPS</td> +<td>2.6FPS</td> +<td>13倍</td> +</tr> + +</table> + +テクスチャは頻繁に読み込みが行われるので、キャッシュは非常に有効だった。 +Span一つに対して、分割されたテクスチャが複数必要。 +Spanの数は、1920x1080 の解像度で、最低でも8000ほどのテクスチャ読み込みが起こる。 + +</div> + +<div class="slide"> +<h1>SPEのキャッシュ効果</h1> + +実は改良前の計測にバグが。キャッシュを無効にした場合にキャッシュがHITしない動作 + + +</div> + + +<div class="slide"> +<h1>OpenGLとの比較</h1> +OpenGL(Open Graphics Library)とは、Silicon Graphics社が開発した、3Dグラフィックス処理の +ためのプログラミングインターフェース。Taskに分割され、SPEを使用したCeriumと、PPEのみで動作 +するOpenGLとで、処理速度の比較をした。例題は先ほど紹介したSuperDandyを用いた。 +</div> + +<div class="slide"> +<h1>OpenGLとの比較</h1> + +<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> +<caption>パイプライン化の効果(universe)</caption> +<tr> +<th></th> +<th>OpenGL</th> +<th>Cerium</th> +<th>性能差</th> +</tr> +<tr align="center"> +<td>dandy</td> +<td>17.5FPS</td> +<td>49.5FPS</td> +<td>2.9倍</td> +</tr> +</table> + +コア一つを使用するOpenGLに比べ、Cerium では2.9倍の性能向上が見られた。 +SPEを活用、待ち時間の短縮を行い、性能向上がみれた。 + +</div> + +<div class="slide"> +<h1>まとめ</h1> + +本研究ではゲームフレームワーク Cerium TaskManager の改良を行った。 +特にCell上において、SPEの稼働率に注意する必要があった。 + +SPE、PPE間のデータのやり取りにMail通知を用いている。SPEはMailの書き込みの際に待ちが発生する + +<ul> + <li>MailQueue</li> + <li>TaskArray</li> +</ul> + +で待ち時間の削減ができる + +</div> + +<div class="slide"> +<h1>まとめ</h1> + +RenderingEngineにおいて、Taskがバリア同期をしている。バリア同期にも待ちが発生する + +<ul> + <li>Task実行をパイプライン化</li> +</ul> + +SPEの待ち時間を解消できる。頻繁に扱うデータはSPE内でキャッシュするのがよい + +</div> + + +<div class="slide"> +<h1>依存関係の話</h1> +稼働率を維持するためにパイプライン化がある + +<ul> + <li>扱うデータの依存性から、Pipelineを自動で生成できるはず</li> + <li>TaskArrayもデータから自動でできるはず。</li> + <li>データはSegmentとして扱う</li> +</ui> + +</div> + +<div class="slide"> +<h1>Codeload</h1> + +Taskを事前に全部ロードしてる + +<ul> + <li>SPEのLSは256KB</li> + <li>大量のコードを入れるといっぱいになる</li> + <li>必要な時に必要な分を予測してSPEにロードするのがよい</li> + </ul> + +</div> + +<div class="slide"> +<h1>Segment</h1> + +データはすべてSegmentという形にして、SPEに必要な分を予測、読み込みするのがよい。<br> +テクスチャのように頻繁に扱うデータはキャッシュする<br> + +</div> + + + +<div class="slide"> +<h1>END</h1> + +/*end*/ + +</div> + + +</ul> + +<div class="handout"> +[any material that should appear in print but not on the slide] +</div> +</div> + + +</div> + +</body> +</html>