view presen/presen.html @ 14:06fe904e1951

fix
author Yutaka_Kinjyo
date Wed, 13 Apr 2011 17:26:26 +0900
parents 083c7035b2cf
children 413e772d6cea
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>ゲームフレームワーク Cerium TaskManager の改良</h1>
<h3>金城 裕, 河野 真治, <br>多賀野 海人, 小林 佑亮</h3>
<h4>琉球大学大学院理工学研究科情報工学専攻並列信頼研</h4>
</div>

<div class="slide">
<h1>概要</h1>

ゲームフレームワーク Cerium TaskManager を開発した。
<ul>
  <li>琉球大学の学生実験で使用している</li>
  <li>短期間でPS3/Cell上で並列処理されるゲーム開発が可能</li>
</ul>

<p class="ex2">Ceriumの改良を行いOpenGLと比べ、2.9倍の性能向上を達成した(Cell上)</p>
<table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center">
<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>
FPS(Frames Per Second)
</div>

<div class="slide">
<h1>概要</h1>

Amdahlの法則より<br>
 プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。<br><br>

<u>SPEの稼働率を落とさない為の改良点</u>

<ul>
  <li>PPEとSPE間の通信回数を削減、タイミングを変更</li>
  <li>Taskのパイプライン化</li>
  <li>テクスチャをSPE内でキャッシュ</li>
</ul><br>

以上の改良により、FPSが5〜10倍程度性能向上がありました

<!--以上の改良により、OpenGL-->

</div>




<div class="slide">
<h1>概要</h1>

Amdahlの法則より<br>
 プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。<br><br>


<u>SPEの稼働率を落とさない為の改良点</u>

<ul>
  <li>PPEとSPE間の通信回数を削減、タイミングを変更</li>
  <li>Taskのパイプライン化</li>
  <li>テクスチャをSPE内でキャッシュ</li>
</ul><br>

Ceriumの改良点を紹介していく。

</div>

<div class="slide">
<h1>Cellの構成</h1>
Cell Broadband Engine

<img src="gazo/cell_arch.jpg" style="display:block; width:50%; float: right; margin-top:0%">

<ul>
  <li>ソニー・コンピュータエンタテインメント、ソニー、IBM , 東芝によって開発されたマルチコア CPU である</li>
  <li>1個のPPEと8個のSPEがリングバスで構成されている</li>
  <li>SPEは256KBのLocalStore(LS)を持つ</li>
  <li>SPEからメインメモリへは直接アクセスできない</li>
  <ul>
    <li>SPEが持つMFC(Memroy Flow Controller)へDMA命令を送ることで行う</li>
  </ul>
</ul><br>


</div>

<div class="slide">
<h1>Cellの基本機能</h1>
<u>DMA</u>
<ul>
<li>メインメモリとLS間でデータが転送される</li>
</ul>
<u>Mailbox</u>
<ul>
  <li>SPEのMFC内にあるFIFOキュー</li>
  <li>PPEとSPE間で32bitメッセージの交換に用いられる</li>
</ul>
</div>


<div class="slide">
<h1>Ceriumの構成</h1>

Ceriumの構成

<img src="gazo/cerium.png" style="display:block; width:50%; float: right; margin-top:0%">

<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>TaskManager</h1>

TaskManager は、Taskと呼ばれる分割された各プログラムを管理する。Task の単位
はサブルーチンである。Task 同士の依存関係を考慮しながら実行していく。</p>
<p>Task を生成する際に、以下のような要素が設定可能である</p>

<ul>
<li><b>input data, output data, parameter</b><br>
 これらは関数でいうところの引数に価する</li>
<li><b>cpu type</b><br>
 Task を PPE または SPE のどちらで実行するのかを示している</li>
<li><b>dependency</b></li>
 他の Task との依存関係を示している
</li>
</ul>

</div>


<div class="slide">
<h1>RenderingEngineの構成</h1>
RenderingEngineの構成

<img src="gazo/renderingengine1.png" style="display:block; width:40%; float: right; margin-top:0%">

<ul>
  <li>CreatePolygon</li>
  <ul>
    <li>モデリングデータからポリゴンを生成する(PPE)</li>
  </ul>
  <li>CreateSpan</li>
  <ul>
    <li>ポリゴンをSpanと呼ばれる水平な線に分ける(SPE)</li>
    </ul>
  <li>DrawSpan</li>
  <ul>
    <li>Spanを実際にディスプレイに描画する(SPE)</li>
  </ul>
</ul><br>

</div>


<div class="slide">
<h1>改良前RenderingEngine</h1>

<img src="gazo/universe.png" style="display:block; width:50%; float: right; margin-top:0%">

<u>改良前のRenderingEngineの例題</u><br>
地球と月の例題

<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
<tr>
<th></th>
<th>FPS</th>
<th>mail待ちの割合</th>
<th>SPE稼働率</th>
<!--<th>Mac(Core2Duo)</th>-->
</tr>
<tr align="center">
<td>universe</td>
<td>17FPS</td>
<td>53.6%</td>
<td>45.4%</td>
</tr>
</table><br>

処理全体の45%時間がmail待ちになっている. 

</div>

<div class="slide">
<h1>Mail待ちについて</h1>

<u>mail待ちが起こるタイミング</u>

<ul>
  <li>SPEが次のTaskのリストを待つとき</li>
  <ul>
    <li>Taskのパイプライン化で削減</li>
  </ul>
  <li>SPEがTaskの完了を書きこむとき</li>
  <ul>
    <li>MailQueueで削減</li>
    <li>TaskArrayで削減</li>
  </ul>
</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>バリア同期</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>

地球と月を表示する例題(universe)を使用。

<table height="100%" width="100%" border="0">
<tr><td align="center" valign="middle">
<img src="gazo/universe.png" style="width: 45%%"></td></tr>
</table>

</div>

<div class="slide">
<h1>パイプライン化の比較</h1>

<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
<caption>パイプライン化の効果(universe)</caption>
<tr>
<th></th>
<th>FPS</th>
<th>mail待ちの割合</th>
<th>稼働率</th>
</tr>
<tr align="center">
<td>Pipelineあり</td>
<td>19.6FPS</td>
<td>68.8%</td>
<td>29%</td>
</tr>
<tr>
<tr align="center">
<td>Pipelineなし</td>
<td>17FPS</td>
<td>72.6%</td>
<td>25.4%</td>
</tr>

</table>
</div>

<div class="slide">
<h1>パイプライン化の比較</h1>

地球と月を表示する例題(universe)を使用。

<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
<caption>パイプライン化の効果(universe)</caption>
<tr>
<th></th>
<th>FPS</th>
<th>mail待ちの割合</th>
<th>稼働率</th>
</tr>
<tr align="center">
<td>Pipelineあり</td>
<td>19.6FPS</td>
<td>68.8%</td>
<td>29%</td>
</tr>
<tr>
<tr align="center">
<td>Pipelineなし</td>
<td>17FPS</td>
<td>72.6%</td>
<td>25.4%</td>
</tr>

</table>
</div>

<div class="slide">
<h1>RenderingEngine</h1>

RenderingEngineでは、描画するためのテクスチャをSPEに読み込む必要がある<br>

テクスチャを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のキャッシュの効果</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>universe</td>
<td>6FPS</td>
<td>17FPS</td>
<td>2.8倍</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>

<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
<caption>SPEのキャッシュの効果</caption>
<tr>
<th></th>
<th>キャッシュなし</th>
<th>キャッシュあり</th>
<th>性能差</th>
</tr>

<tr align="center">
<td>ball_bound</td>
<td>28FPS</td>
<td>30FPS</td>
<td>+2FPS</td>
</tr>

<tr align="center">
<td>universe</td>
<td>22.9FPS</td>
<td>17FPS</td>
<td>-5.9FPS</td>
</tr>

<tr align="center">
<td>panel</td>
<td>5.0FPS</td>
<td>2.6FPS</td>
<td>-2.4FPS</td>
</tr>

</table>

ball_bound は扱うテクスチャが少なく、小さい

</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>TaskArray</h1>
Task毎のMailは、Task同士の依存関係を解決するために用いている。

<ul>
  <li>依存関係はグループ化できる</li>
  <li>TaskArrayを用いて複数のTaskのMailを一つに扱う</li>
</ul><br>

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>OpenGLとの比較</h1>
OpenGL(Open Graphics Library)とは、Silicon Graphics社が開発した、3Dグラフィックス処理の
ためのプログラミングインターフェース。Taskに分割され、SPEを使用したCeriumと、PPEのみで動作
するOpenGLとで、処理速度の比較をした。<br><br>

比較する例題には学生が実験中に作成したSuperDandyを用いた。
</div>

<div class="slide">
<h1>OpenGLとの比較</h1>

<table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
<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>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>