view presen/presen.html @ 13:87b8bb4d104c

fix
author Yutaka_Kinjyo
date Fri, 10 Sep 2010 10:00:23 +0900
parents c770f569a801
children ca231fdd013c
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>108574D 金城裕</h3>
<h3>指導教官:河野真治</h3>
<h4>琉球大学大学院理工学研究科情報工学専攻並列信頼研</h4>
</div>


<div class="slide">
<h1>研究目的 と 背景</h1>
<p class="ex1">
CPUのクロック周波数の増加は、発熱や消費電力の増大により難しくなっている
</p>
<ul>
<li>
クロック周波数を上げる代わりに、CPUコア数を増やす傾向になった。
</li>
<br>
<li>マルチコアにあったプログラミングが必要になる</li>
</ul>

<p><font color="red">そこで、プログラミングを支援するフレームワークが必要になってくる</font></p>

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

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

</div>

<div class="slide">
<h1>CeriumにおけるTask</h1>
<big><u>Output data</u></big>
<ul>
<li>Onput data にはTaskが処理したデータの書き出し先アドレスとサイズを指定する。</li>
<li>SPE側でそのアドレスをもとにDMA転送を用いて実際のデータをメインメモリに書き出す。</li>
</ul>

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

</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の実行完了を待つ例を紹介する。</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>Dependency</u></big><br>
<ul>
<li>はじめTaskBは待つTaskがないので、すぐにActiveQueueに入る。</li>
<li>TaskAはTaskBを待つのでWaitQueueに入る。</li>
</ul>

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

</div>

<div class="slide">
<h1>CeriumにおけるTask</h1>
<big><u>Dependency</u></big><br>
<ul>
<li>ActiveQueueにあるTaskBはSPEに送られ実行される。</li>
<li>TaskAはWaitQueueでTaskBを待つ。</li>
</ul>

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

</div>


<div class="slide">
<h1>CeriumにおけるTask</h1>
<big><u>Dependency</u></big><br>
<ul>
<li>TaskBが完了するとMailで通知される。</li>
<li>TaskAは待つTaskがなくなるので、ActiveQueueに移る。</li>
</ul>

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

</div>


<div class="slide">
<h1>CeriumにおけるTask</h1>
<big><u>Dependency</u></big><br>
<ul>
<li>TaskBが完了するとMailで通知される。</li>
<li>TaskAは待つTaskがなくなるので、ActiveQueueに移る。</li>
</ul>

<table height="100%" width="100%" border="0">
<tr><td align="center" valign="middle">
<img src="gazo/dependency5.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を通知する</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>Mail通知</h1>

<ul>
<li>SPEからPPEへのMail送信ボックスはキューになっている</li>
<li>キューのサイズは1</li>
<li>書き込む際にキューがいっぱいの場合はPPEから呼び出されるまで待つ</li>
<li>PPEからのMail呼び出しがないと、SPEは待ち続ける</li>
<li>SPEの待ち時間が増えると、処理速度の低下につながる</li>
</ul>

</div>

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

<font color="red">SPEの待ちを解消するためにTaskArrayを提案、実装した</font>

<ul>
<li>TaskArrayは複数のTaskを1つにまとめることができる</li>
<li>Task毎のMail通知がTaskArray毎のMail通知になる</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">WordCountのTaskと、レンダリングエンジンのTaskの一部をTaskArray化した。
その結果を報告する</font><br><br>

それぞれのTask内容

<ul>
  <li>WordCount</li>
  <ul>
    <li>WordCountTask(<font color="red">TaskArray化</font>)</li>
    <li>PrintTask</li>
  </ul>

  <li>レンダリングエンジン</li>
  <ul>
    <li>CreatePolygonTask</li>
    <li>CreateSpanTask</li>
    <li>DrawSpanTask(<font color="red">TaskArray化</font>)</li>
  </ul>

</ul>

</div>

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

構成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>

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

<ul>
  <li>time : 実行時間</li>
  <li>dma wait : dma転送待ちの割合</li>
  <li>mail wait : mail待ちの割合</li>
</ul>

<br>

<table border="3" style="width:100%;">
<tr>
<th></th>
<th>Task</th>
<th>TaskArray</th>
</tr>
<tr>
<th>time</th>
<td align="center">2.184s</td>
<td align="center">2.109s</td>

</tr>
<tr>
<th>dma wait</th>
<td align="center">18%</td>
<td align="center">12%</td>

</tr>
<tr>
<th>mail wait</th>
<td align="center">5%</td>
<td align="center">8%</td>
</tr>

<caption></caption>

</table><br>

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

<ul>
  <li>あまり効果は見られなかった</li>
  <li>PPE側のTaskがないので、あまりmail待ちが入らない</li>
  <li>ファイルのサイズが大きいのでメモリアクセスで時間がかかる</li>
</ul>

<br>

<table border="3" style="width:100%;">
<tr>
<th></th>
<th>Task</th>
<th>TaskArray</th>
</tr>
<tr>
<th>time</th>
<td align="center">2.184s</td>
<td align="center">2.109s</td>

</tr>
<tr>
<th>dma wait</th>
<td align="center">18%</td>
<td align="center">12%</td>

</tr>
<tr>
<th>mail wait</th>
<td align="center">5%</td>
<td align="center">8%</td>
</tr>

<caption></caption>

</table><br>

</div>

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

改善策

<ul>
  <li>一度にファイルマッピングをしない</li>
  <li>同じ領域を切り替えて、何度かに分けてマッピングする</li>
  <li>スワップを減らし、アクセス時間を短縮できる</li>
  <li>dma wait の割合が減る</li>
</ul>

</div>


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

構成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>

<br>
DrawSpanTask : Taskの数が多いDrawSpanTaskをTaskArray化した。地球と月を表示する
例題を対象に計測した。

</div>

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

  <ul>
    <li>FPS : 一秒間に表示できるFrame数</li>
  </ul>

<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%</td>
</tr>

<caption></caption>

</table><br>

  <ul>
    <li>mail wait 割合が減少した</li>
    <li>レンダリングエンジンの場合、PPE側で実行するTaskがあるので、
    mailチェックが遅れ気味になっている</li>
  </ul>

</div>

<div class="slide">
<h1>まとめ</h1>


<ul>
  <li>複数のTaskをまとめるTaskArrayを提案、実装した。</li>
  <li>PPE側が忙しく、mailチェックが遅れる場合に効果がある</li>
  <li>PPE側にTaskがない場合は、mailチェックは間に合う</li>
  <li>WordCountはdma転送がネックになっている</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>