view presen/presen.html @ 10:e5f74d4de3ad

add file
author Yutaka_Kinjyo
date Wed, 08 Sep 2010 01:05:10 +0900
parents
children c770f569a801
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">
現在 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: 60%%"></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>TaskArray</h1>
<big><u>TaskArray</u></big><br>
<ul>
<li>Task毎にMail通知を行う、、今日はここまで・・続きまた頑張りまっす。</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>今週</h1>

<table border="3" style="width:100%;">
<tr>
<th></th>
<th>real_time</th>
<th>wait_time</th>
<th>mail_time</th>
<th>busy_ratio</th>
</tr>
<tr>
<th>all</th>
<td align="center">58s</td>
<td align="center">77%</td>
<td align="center">17%</td>
<td align="center">5.5%</td>


</tr>
<tr>
<th>compatibility</th>
<td align="center">31s</td>
<td align="center">50%</td>
<td align="center">39%</td>
<td align="center">10%</td>

</tr>
<tr>
<th>taskarray</th>
<td align="center">34s</td>
<td align="center">35%</td>
<td align="center">55%</td>
<td align="center">9%</td>
</tr>

<caption>速度比較</caption>

</table><br>

しかし、これは、RUN_TASK_BLOCKS_TASK を1つだけ生成した場合でした・・二つにしてみると・・

</div>

<div class="slide">
<h1>今週</h1>

<table border="3" style="width:100%;">
<tr>
<th></th>
<th>real_time</th>
<th>wait_time</th>
<th>mail_time</th>
<th>busy_ratio</th>
</tr>
<tr>
<th>all</th>
<td align="center">58s</td>
<td align="center">77%</td>
<td align="center">17%</td>
<td align="center">5.5%</td>


</tr>
<tr>
<th>compatibility</th>
<td align="center">31s</td>
<td align="center">50%</td>
<td align="center">39%</td>
<td align="center">10%</td>

</tr>
<tr>
<th>taskarray</th>
<td align="center">34s</td>
<td align="center">35%</td>
<td align="center">55%</td>
<td align="center">9%</td>
</tr>

<caption>速度比較(RUN_TASK_BLOCK を1つ生成)</caption>

</table><br>

<table border="3" style="width:100%;">
<tr>
<th></th>
<th>real_time</th>
<th>wait_time</th>
<th>mail_time</th>
<th>busy_ratio</th>
</tr>
<tr>
<th>all</th>
<td align="center">58s</td>
<td align="center">62%</td>
<td align="center">32%</td>
<td align="center">5.5%</td>


</tr>
<tr>
<th>compatibility</th>
<td align="center">24s</td>
<td align="center">79%</td>
<td align="center">17%</td>
<td align="center">13%<font color="red">(+3)</font></td>

</tr>
<tr>
<th>taskarray</th>
<td align="center">28s</td>
<td align="center">66%</td>
<td align="center">22%</td>
<td align="center">11%<font color="red">(+2)</font></td>
</tr>

<caption>速度比較(RUN_TASK_BLOCK を二つ生成)</caption>

</table><br>

なるほど、次のTask生成までの時間ロスが減るので、少し速くなりますね。

</div>



<div class="slide">
<h1>DrawSpan</h1>
DrawSpanのTaskがTaskArray有無の場合<br><br>

例題はball_bound<br><br>

compatibility -> 4.073888 FPS<br>
TaskArray -> 4.339242 FPS<br>

</div>



<div class="slide">
<h1>論文をどうまとめるか</h1>
<ul>
論文ちゃんの内容
<li>Taskが大量の場合一度に全て生成するより、incrementalに生成したほうがよい</li>
<li>TaskArrayはうーん。うーん。もう少し考えてみます。</li>

</ul>
</div>

<div class="slide">
<h1>end</h1>
<ul>
/*end*/
<br><br>

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

<table border="3" style="width:100%;">
<tr>
<th></th>
<th>real_time</th>
<th>wait_time</th>
<th>mail_time</th>
<th>busy_ratio</th>
</tr>
<tr>
<th>all</th>
<td align="center">58s(-0)</td>
<td align="center">62(-15)%</td>
<td align="center">32%(+15)</td>
<td align="center">5.5%(-0)</td>


</tr>
<tr>
<th>compatibility</th>
<td align="center">24s(-7)</td>
<td align="center">79%(+19)</td>
<td align="center">17%(-22)</td>
<td align="center">13%(+3)</td>

</tr>
<tr>
<th>taskarray</th>
<td align="center">28s(-6)</td>
<td align="center">66%(+31)</td>
<td align="center">22%(-33)</td>
<td align="center">11%(+2)</td>
</tr>

<caption>速度比較(RUN_TASK_BLOCK を二つ生成)</caption>

</table><br>


</div>


<div class="slide">
<h1>Mandelbort</h1>
<ul>
<br>

MandelbrotをCeriumに実装<br>

こっちも、まだセグメンテーションエラーです。<br>
バグとり間に合わず。

</div>

<div class="slide">
<h1>バグとり</h1>
<ul>
<br>

というわけで、WordCountのTaskArray,ネックの検証<br>
MandelbrotのCerium実装<br>
引き続きもうちょっと頑張ります。

</div>

<div class="slide">
<h1>end</h1>
<ul>
/*end*/
<br><br>
</div>

<div class="slide">
<h1>ダブルバッファリング</h1>

<img src="gazo/doublebuffering.png" width="670" height="200">
<br>
TaskListしたので、ダブルバッファリングしやすかった。次のタスクのアドレスがわかるので、
現Taskを処理している間に次のTaskをdma_get,前のTaskのoutputをdma_putする。

</div>

<div class="slide">
<h1>例題</h1>
<br>

という実装をしたところで、マンデルブロー集合を計算してみました。demoあり

</div>

<div class="slide">
<h1>今後</h1>
<br>

現在、SPE側のrun関数が決め打ちで動き、それがtaskという事になっている。
Cerium/TaskManager のように複数のTaskから指定して動くようにしたい。あとTaskの依存関係も。

MemorySegment!やります!

</div>


<div class="slide">
<h1>end</h1>
<ul>
/*end*/
<br><br>


</ul>

<div class="handout">
[any material that should appear in print but not on the slide]
</div>
</div>


</div>

</body>
</html>