view presen/presen.html @ 20:90ec4863ce00

fix
author Yutaka_Kinjyo
date Sun, 12 Sep 2010 17:03:20 +0900
parents a614fe775dd1
children c4fdeadf42dd
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>金城裕</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>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>
<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">レンダリングエンジンのTaskと、WordCountの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>dma wait : dma転送の待ち時間の割合</li>
<li>mail wait : mailの待ち時間の割合</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チェックがおくれることがあるので、<font color="red">TaskArrayを用いてMailを減らすことは効果がある</font></li>
  </ul>

</div>

<div class="slide">
<h1>レンダリングエンジン</h1>

今後のMail待ち時間削減<br>


  <ul>
    <li>PPE側のTaskをSPEに任せ、PPEの負担をへらす</li>
    <li>別スレッドでMailを監視する</li>
    <li>他のTaskもTaskArray化する</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>

計測条件

<ul>
  <li>TaskArrayのサイズは64</li>
  <li>Word count対象は166Mのテキスト</li>
  <li>TaskArrayの適応の有無を比較</li>
</ul>

</div>



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

time : 実行時間
<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(+5)%</td>

</tr>
<tr>
<th>mail wait</th>
<td align="center">7%</td>
<td align="center">2(-5)%</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>
</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>まとめ</h1>


<ul>

  <li>複数のTaskをまとめるTaskArrayを提案、実装した。</li>
  <li>PPE側が忙しい場合、<font color="red">Mail待ち時間の削減にTaskArrayの効果がよりみられる</font></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>