view presen/pre.html @ 17:5f9478510c44

fix presen
author aaa
date Thu, 18 Feb 2010 13:44:07 +0900
parents 7856523eef7e
children c7344fbacd60
line wrap: on
line source

<?xml version="1.0" encoding="utf-8"?>
<!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" lang="en" xml:lang="en"> 
<head> 
  <!--<title>SceneGraph を用いたマルチコア CPU 向けゲームの処理</title> -->
  <title>マルチコア CPU 上における SceneGraph を用いたゲームの作成</title>
  <meta name="copyright" 
   content="Copyright &#169; 2005 your copyright notice" /> 
  <link rel="stylesheet" type="text/css" media="screen, projection, print" 
   href="./slidy.css" /> 
  <link rel="stylesheet" type="text/css" media="screen, projection, print" 
   href="./user.css" /> 
  <script src="./slidy.js" 
   type="text/javascript"></script> 
  <style type="text/css"> 
    <!-- your custom style rules --> 
  </style> 
</head>
<body>

<div class="slide cover">
<center>
<h1>マルチコア CPU における<br> SceneGraph を用いたゲームの作成</h1>
<br>
<br>
<br>
<br>
<ul>
<li>琉球大学 工学部 情報工学科 065746J
<li>仲宗根広樹
<li>指導教官:河野真治
</ul>
</center>
</div>

<div class="slide pre">
<h1>研究目的と背景</h1>
<font size="6"><sup><b>高度な並列性を持つゲームマシンの性能を生かすために<br>プログラムの並列度を向上させる</b></sup></font>
<ul style="line-height: 1.2;">
<li>当研究室では、学生実験で PlayStation 3 上でゲームプログラミングを行っている。
  <ul style="line-height: 1.2;">
    <li>ゲーム中の一つの場面を構成するオブジェクトやその振る舞い<br>ゲームのルールの集合である SceneGraph を導入した。
    <li>SceneGraph の動作や衝突判定を一つの CPU で処理している。
    <li>プログラムの並列化率が低ければその性能を生かすことができない
  </ul>
</ul>
<center>
<font size="6"><sup><b>本研究では SceneGraph を<br>複数 CPU を用いて並列処理することを目的とする</b></sup></font>
</center>
</div>

<div class="slide pre">
<h1>発表の流れ</h1>
<ul style="line-height: 1.2;">
  <li>SceneGraph とは</li>
  <li>動作と描画の処理</li>
  <li>Property の導入</li>
  <li>Property を用いた例題</li>
  <li>評価</li>
  <li>今後の課題
</ul>
<br>
</ul>
</div>

<div class="slide pre">
<h1>SceneGraph とは</h1>
SceneGraph とはゲーム中の全てのオブジェクトを表す Tree 構造である。
<!--ゲーム中の一つの場面を構成するオブジェクトやその振る舞い、ゲームのルールの集合です。
 SceneGraph は Tree 構造です。<br>-->
<br>
<center>
<img src="image/SceneGraph.jpg" width="500">
</center>
<br>
ゲーム内のオブジェクトは個別に SceneGraphNode に分けられているので、ノードを別個に処理すると自然と並列度がでてくる。
</div>

<div class="slide pre">
<h1>SceneGraph とは(Con't)</h1>
SceneGraph の内部構造
<!--
<h3>ゲーム中の1つの場面(Scene)を構成するオブジェクトやその振る舞い、ゲームのルールの集合</h3>
<center>
<img src="image/SceneGraph.png" width="500">
</center>
-->
<font size="4">
<table>
  <tr>
    <td>データ</td>
    <td>説明</td>
  </tr>
  <tr>
    <td>Vertex</td>
    <td>ポリゴンオブジェクトの頂点座標</td>
  </tr>
  <tr>
    <td>Texture</td>
    <td>ポリゴンオブジェクトのテクスチャ座標</td>
  </tr>
  <tr>
    <td>TextureImage</td>
    <td>テクスチャイメージ</td>
  </tr>
  <tr>
    <td>TransMatrix</td>
    <td>ポリゴンオブジェクトの変換行列</td>
  </tr>
  <tr>
    <td>Coordinates</td>
    <td>オブジェクトの座標</td>
  </tr>
  <tr>
    <td>Angle</td>
    <td>オブジェクトの角度</td>
  </tr>
  <tr>
    <td><font color=red>Property</font></td>
    <td>オブジェクトの内部情報</td>
  </tr>
</table>
<table>
  <tr>
    <td>動作</td>
    <td>説明</td>
  </tr>
  <tr>
    <td>Move</td>
    <td>自律的なオブジェクトの動き</td>
  </tr>
  <tr>
    <td>Collision</td>
    <td>他のノードとの衝突判定</td>
  </tr>
</table>
</font>
</div>

<div class="slide pre">
<h1>ゲームの流れ</h1>
<font size="6"><b>オブジェクトが描画されるまでの流れ</b></font>
<ul>
<li>オブジェクトの動作を Move 関数、Collision 関数として定義する</li>
<li>SceneGraph に Move, Collision をセットする</li>
<li>全ての SceneGraph の Move, Collision が実行される</li>
<li>Move, Collision によって SceneGraph の値が変更される</li>
<li>変更された SceneGraph を用いて描画処理を行う</li>
</ul>
</div>

<div class="slide pre">
<h1>動作と描画の処理</h1>
<!--
<font size="5">
<sup>
 SceneGraph の親子関係に沿って TransMatrix を計算し、Move, Collision を実行することで SceneGraph 内のオブジェクトが変化する。<br>
 Collision によって Move が変更され、Move によって Coordinates, Angle が変更される。これらをどのように変更させていくかがゲームのルールとなる。
</sup>
</font>
-->
<font size="6"><sup>
現在、画面の描画とオブジェクトの動作は逐次的に行われている。<br>
</font></sup>
<ul>
  <li>Cellは1基の制御系のプロセッサコアPPEと、8基の演算系プロセッサコアSPEで構成される
  <li>現在、オブジェクトの動作は PPE で実行されている
  <li>しかし、PPE よりも SPE の方が演算処理に優れている
  <li>また SPE を用いることで並列に実行できる
  <!--<li>オブジェクトの動作を SPE で処理することで演算速度の向上が見込める-->
</ul>
<br>
<font size="6">
そこで、オブジェクトの動作を SPE で行うことにより、画面の描画と<font color="red">並列</font>に実行する。
</font>
</div>

<div class="slide pre">
<h1>Property の導入</h1>
<ul style="line-height: 1.2;">
  <li>SPE で処理するには PPE からデータを送り込む必要がある。</li>
  <!--<li>オブジェクトの動作には SceneGraph を用いていたので Polygon や Texture などの不要なデータが含まれている。</li>-->
  <li>SceneGraph はオブジェクトの動作と描画処理の両方で用いられているので Polygon や Texture などの不要なデータが含まれている。
  <li>しかし、SPE の Local Store は 256KB しかないので、SceneGraph を全て転送すると容量を超えてしまう可能性がある。</li>
</ul>
<br>
<font size="6">
<sup>
SceneGraph の代わりにゲームに必要な内部状態を保持した構造体 <font color=red>Property</font> を用いる。
</sup>
</font>
</div>

<div class="slide pre">
<h1>Property の導入(Con't)</h1>
Property には以下のパラメータが含まれている
<ul style="line-height: 1.2;">
<li>オブジェクトの動作に必要な Coordinates, Angle</li>
<li>Tree を構成するための親子関係の情報</li>
<li>SceneGraph を生成するための固有ID</li>
</ul>
<br>
Property はゲームごとに定義されている
</div>

<div class="slide pre">
<h1>Property の処理</h1>
<ul style="line-height: 1.2;">
<li>Property を SPE に転送し、SPE 上でオブジェクトの動作を行い Property を更新する。<br>
<li>更新されて返された Property を元に SceneGraphTree を生成する。
</ul>
<center>
<img src="image/Property.jpg" width="350">
<center>
</div>

<div class="slide pre">
<h1>Property を用いた例題</h1>
Property を用いた例題として鎖のシミュレーション chain を使用した<br>
この例題では Move の処理のみを行っており、Collision の処理は行っていない
<br>
<br>
<center>
<img src="image/chain.png" width="300">
</center>
</div>

<div class="slide pre">
<h1>実行速度比較</h1>
chain の Move を SPE で処理した場合と PPE で処理した場合の実行速度の比較を以下に示す。
<center>
<table>
  <tr>
    <td></td>
    <td>FPS(Frame Par Second)</td>
  </tr>
  <tr>
    <td>PPE</td>
    <td align="center">2.708696</td>
  </tr>
  <tr>
    <td><font color="blue">SPE</font></td>
    <td align="center"><font color="blue">2.893348</font></td>
  </tr>
</table>
</center>
<br>
Move を SPE で処理したことで<font color="red">約0.2FPS</font>の速度向上がみられた<br><br>
Move は SPE 上にあるので、SIMD 演算を用いて、速度の向上が期待できる。
</div>

<div class="slide pre">
<h1>今後の課題</h1>
<ul style="line-height: 1.2;">
<li>複数 SPE に均等に処理を割り振る例題の作成
<li>Collision を SPE で処理する例題の作成
<li>Property から SceneGraphTree を構築する部分において、SceneGraph の新規生成と削除を考慮した設計を行う
</ul>
</div>

<div class="slide pre">
<h1></h1>
ご清聴ありがとうございました
</div>

<div class="slide pre">
<h1>Cellとは</h1>

<big>Cell</big>とはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ。 <br><br>
Cellは1基の制御系のプロセッサコアPPEと、8基の演算系プロセッサコアSPEで構成される。
(Ceriumで扱えるSPEの数は6基)それぞれ高速なバスで接続されている<br><br>

<img src="image/cell1.png" style="width: 45%%">
</div>

<div class="slide pre">
<h1>Ceriumとは</h1>
<big>Cerium</big>とは当研究室で開発したゲーム開発用フレームワーク<br><br>

<u>Task Manager</u><br>
 タスクと呼ばれる分割されたプログラムを管理する<br>

<u>Scene Graph</u><br>
 ゲーム中のオブジェクトの振る舞いや、ルールを管理する。<br>
<u>Rendering Engine</u><br>
 Cerium独自に開発した描画用のエンジン

<br><br>
の3つの要素から構成される。<br><br>
Ceriumは PS3/Cell、linux, macosx 上で動作する。

</div>

<div class="slide pre">
<h1>SIMD 演算とは</h1>
<font size="6">
<sup>
SIMD 演算とは1つの命令で複数のデータに対して処理を行う演算方式<br>
Cellでは、SPEに実装されている128ビットレジスタを用いてSIMDを行うことができる<br>
</sup>
</font>
</div>
</body>
</html>