comparison presen/presen.html @ 14:06fe904e1951

fix
author Yutaka_Kinjyo
date Wed, 13 Apr 2011 17:26:26 +0900
parents 083c7035b2cf
children 413e772d6cea
comparison
equal deleted inserted replaced
13:083c7035b2cf 14:06fe904e1951
91 </div> 91 </div>
92 92
93 <div class="slide"> 93 <div class="slide">
94 <h1>概要</h1> 94 <h1>概要</h1>
95 95
96 ゲームフレームワーク Cerium TaskManager を開発しました。 96 ゲームフレームワーク Cerium TaskManager を開発した。
97 97 <ul>
98 <ul> 98 <li>琉球大学の学生実験で使用している</li>
99 <li>動作環境:MacOSX, Linux, PS3/Cell</li> 99 <li>短期間でPS3/Cell上で並列処理されるゲーム開発が可能</li>
100 <li>主にCellに特化している。</li> 100 </ul>
101 <li>SceneGraphを用いて、ゲームを記述する</li> 101
102 102 <p class="ex2">Ceriumの改良を行いOpenGLと比べ、2.9倍の性能向上を達成した(Cell上)</p>
103 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center">
104 <tr>
105 <th></th>
106 <th>OpenGL</th>
107 <th>Cerium</th>
108 <th>性能差</th>
109 </tr>
110 <tr align="center">
111 <td>dandy</td>
112 <td>17.5FPS</td>
113 <td>49.5FPS</td>
114 <td>2.9倍</td>
115 </tr>
116 </table>
117 FPS(Frames Per Second)
118 </div>
119
120 <div class="slide">
121 <h1>概要</h1>
122
123 Amdahlの法則より<br>
124  プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。<br><br>
125
126 <u>SPEの稼働率を落とさない為の改良点</u>
127
128 <ul>
129 <li>PPEとSPE間の通信回数を削減、タイミングを変更</li>
130 <li>Taskのパイプライン化</li>
131 <li>テクスチャをSPE内でキャッシュ</li>
103 </ul><br> 132 </ul><br>
104 133
105 琉球大学の学生実験で使用している。 134 以上の改良により、FPSが5〜10倍程度性能向上がありました
106 135
107 </div> 136 <!--以上の改良により、OpenGL-->
108 137
109 138 </div>
110 <div class="slide"> 139
111 <h1>Cell</h1> 140
141
142
143 <div class="slide">
144 <h1>概要</h1>
145
146 Amdahlの法則より<br>
147  プログラム全体の並列化率が低ければ、マルチコアの性能を活かすことはできない。<br><br>
148
149
150 <u>SPEの稼働率を落とさない為の改良点</u>
151
152 <ul>
153 <li>PPEとSPE間の通信回数を削減、タイミングを変更</li>
154 <li>Taskのパイプライン化</li>
155 <li>テクスチャをSPE内でキャッシュ</li>
156 </ul><br>
157
158 Ceriumの改良点を紹介していく。
159
160 </div>
161
162 <div class="slide">
163 <h1>Cellの構成</h1>
112 Cell Broadband Engine 164 Cell Broadband Engine
113 165
166 <img src="gazo/cell_arch.jpg" style="display:block; width:50%; float: right; margin-top:0%">
167
114 <ul> 168 <ul>
115 <li>ソニー・コンピュータエンタテインメント、ソニー、IBM , 東芝によって開発されたマルチコア CPU である</li> 169 <li>ソニー・コンピュータエンタテインメント、ソニー、IBM , 東芝によって開発されたマルチコア CPU である</li>
116 <li>1基の制御系プロセッサコアPPE(PowerPC Processor Element)</li> 170 <li>1個のPPEと8個のSPEがリングバスで構成されている</li>
117 <li>8基の演算系プロセッサコアSPE(Synergistic Processor Element)</li> 171 <li>SPEは256KBのLocalStore(LS)を持つ</li>
118 <li>各コアはEIB(Element Interconnect Bus)とうバスで接続されている</li> 172 <li>SPEからメインメモリへは直接アクセスできない</li>
173 <ul>
174 <li>SPEが持つMFC(Memroy Flow Controller)へDMA命令を送ることで行う</li>
175 </ul>
119 </ul><br> 176 </ul><br>
120 177
121 </div> 178
122 179 </div>
123 <div class="slide"> 180
124 <h1>Cell</h1> 181 <div class="slide">
125 Cell Broadband Engine 182 <h1>Cellの基本機能</h1>
126 183 <u>DMA</u>
127 <table height="100%" width="100%" border="0"> 184 <ul>
128 <tr><td align="center" valign="middle"> 185 <li>メインメモリとLS間でデータが転送される</li>
129 <img src="gazo/cell_arch.jpg" style="width: 50%%"></td></tr> 186 </ul>
130 </table> 187 <u>Mailbox</u>
131 188 <ul>
132 189 <li>SPEのMFC内にあるFIFOキュー</li>
133 PPEは直接メインメモリアクセスできるが、SPEはそれぞれのLSにしかアクセスできない<br> 190 <li>PPEとSPE間で32bitメッセージの交換に用いられる</li>
134 DMA転送を用いてメインメモリからのデータを明示的に取得する 191 </ul>
135 192 </div>
136 </div> 193
137
138 <div class="slide">
139 <h1>Cell</h1>
140 Cell のプログラミングスタイル
141
142 <ul>
143 <li>PPEがデータと仕事を分割し、各SPEへ割り当てる</li>
144 </ul><br>
145
146 Ceriumでは関数をTaskとして定義。Taskを各SPEへ割り当てる。<br>
147 一つのTaskにはinput,output,param,等のデータを持たせる<br>
148
149
150 </div>
151 194
152 <div class="slide"> 195 <div class="slide">
153 <h1>Ceriumの構成</h1> 196 <h1>Ceriumの構成</h1>
154 197
155 Ceriumの構成 198 Ceriumの構成
199
200 <img src="gazo/cerium.png" style="display:block; width:50%; float: right; margin-top:0%">
156 201
157 <ul> 202 <ul>
158 <li>TaskManager</li> 203 <li>TaskManager</li>
159 <ul> 204 <ul>
160 <li>ユーザが定義したTaskを管理し、各コアに割り当てる</li> 205 <li>ユーザが定義したTaskを管理し、各コアに割り当てる</li>
173 <li>OpenSceneGraphのようなもの</li> 218 <li>OpenSceneGraphのようなもの</li>
174 </ul> 219 </ul>
175 220
176 </ul><br> 221 </ul><br>
177 222
178 223 </div>
179 224
180 </div> 225 <div class="slide">
181 226 <h1>TaskManager</h1>
182 <div class="slide"> 227
183 <h1>Ceriumの構成</h1> 228 TaskManager は、Taskと呼ばれる分割された各プログラムを管理する。Task の単位
229 はサブルーチンである。Task 同士の依存関係を考慮しながら実行していく。</p>
230 <p>Task を生成する際に、以下のような要素が設定可能である</p>
231
232 <ul>
233 <li><b>input data, output data, parameter</b><br>
234  これらは関数でいうところの引数に価する</li>
235 <li><b>cpu type</b><br>
236  Task を PPE または SPE のどちらで実行するのかを示している</li>
237 <li><b>dependency</b></li>
238  他の Task との依存関係を示している
239 </li>
240 </ul>
241
242 </div>
243
244
245 <div class="slide">
246 <h1>RenderingEngineの構成</h1>
247 RenderingEngineの構成
248
249 <img src="gazo/renderingengine1.png" style="display:block; width:40%; float: right; margin-top:0%">
250
251 <ul>
252 <li>CreatePolygon</li>
253 <ul>
254 <li>モデリングデータからポリゴンを生成する(PPE)</li>
255 </ul>
256 <li>CreateSpan</li>
257 <ul>
258 <li>ポリゴンをSpanと呼ばれる水平な線に分ける(SPE)</li>
259 </ul>
260 <li>DrawSpan</li>
261 <ul>
262 <li>Spanを実際にディスプレイに描画する(SPE)</li>
263 </ul>
264 </ul><br>
265
266 </div>
267
268
269 <div class="slide">
270 <h1>改良前RenderingEngine</h1>
271
272 <img src="gazo/universe.png" style="display:block; width:50%; float: right; margin-top:0%">
273
274 <u>改良前のRenderingEngineの例題</u><br>
275 地球と月の例題
276
277 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
278 <tr>
279 <th></th>
280 <th>FPS</th>
281 <th>mail待ちの割合</th>
282 <th>SPE稼働率</th>
283 <!--<th>Mac(Core2Duo)</th>-->
284 </tr>
285 <tr align="center">
286 <td>universe</td>
287 <td>17FPS</td>
288 <td>53.6%</td>
289 <td>45.4%</td>
290 </tr>
291 </table><br>
292
293 処理全体の45%時間がmail待ちになっている.
294
295 </div>
296
297 <div class="slide">
298 <h1>Mail待ちについて</h1>
299
300 <u>mail待ちが起こるタイミング</u>
301
302 <ul>
303 <li>SPEが次のTaskのリストを待つとき</li>
304 <ul>
305 <li>Taskのパイプライン化で削減</li>
306 </ul>
307 <li>SPEがTaskの完了を書きこむとき</li>
308 <ul>
309 <li>MailQueueで削減</li>
310 <li>TaskArrayで削減</li>
311 </ul>
312 </ul>
313
314 </div>
315
316
317 <div class="slide">
318 <h1>Mailbox機能</h1>
184 319
185 <table height="100%" width="100%" border="0"> 320 <table height="100%" width="100%" border="0">
186 <tr><td align="center" valign="middle"> 321 <tr><td align="center" valign="middle">
187 <img src="gazo/cerium.png" style="width: 50%%"></td></tr> 322 <img src="gazo/mailbox.png" style="width: 60%%"></td></tr>
188 </table> 323 </table>
189 324
190 </div> 325 </div>
191 326
192 <div class="slide">
193 <h1>TaskManager</h1>
194
195 TaskManager
196
197 <ul>
198 <li>Taskは関数単位</li>
199 <li>定義されたTaskは依存関係に沿って実行される</li>
200 <li>Taskはある程度の数が揃った上で、TaskListにまとめられSPEに送られる。</li>
201 <li>Taskはread,exec,write それぞれパイプライン化されて動く</li>
202 <li>Taskに必要なデータはDMA転送で送られる。転送時間はパイプライン化によって隠される</li>
203 <li>Taskの中にDMA転送命令を書くと自動ではパイプライン化されない</li>
204 </ul>
205
206 </div>
207
208 <div class="slide">
209 <h1>TaskMangerを使った例題</h1>
210
211 CeriumのTaskManager を使ったSortの例題<br>
212 10万個のランダムな値をクイックソートでソートする<br>
213 ソートする関数をTaskにして各SPEで実行<br><br>
214
215 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
216 <caption>Sortの例題</caption>
217 <tr>
218 <th></th>
219 <th>PPEのみ</th>
220 <th>SPE 1つ</th>
221 <th>SPE 6つ</th>
222 <!--<th>Mac(Core2Duo)</th>-->
223 <th>SPE稼働率</th>
224 </tr>
225 <tr align="center">
226 <td>QuickSort</td>
227 <td>5.60s</td>
228 <td>6.22s</td>
229 <td>1.07s</td>
230 <td>97%</td>
231 <!--<td>1.76s</td>-->
232 </tr>
233 </table>
234
235 <!-- 2.13GHz -->
236 </div>
237
238
239 <div class="slide">
240 <h1>アムダール則</h1>
241
242 プログラムの全体に対する並列化した部分の割合が低いと、マルチコアの性能がでない
243 <!--プログラムの8割を並列化すると、6CPUでは3倍の性能向上しか得られない-->
244
245 <table height="100%" width="100%" border="0">
246 <tr><td align="center" valign="middle">
247 <img src="gazo/amdahl.jpg" style="width: 55%%"></td></tr>
248 </table>
249
250 </div>
251
252 <div class="slide">
253 <h1>RenderingEngine</h1>
254
255 RenderingEngineの例題<br>
256 地球と月の例題
257
258 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
259 <tr>
260 <th></th>
261 <th>FPS</th>
262 <th>mail待ちに割合</th>
263 <th>SPE稼働率</th>
264 <!--<th>Mac(Core2Duo)</th>-->
265 </tr>
266 <tr align="center">
267 <td>universe</td>
268 <td>17FPS</td>
269 <td>72.6%</td>
270 <td>25.4%</td>
271 </tr>
272 </table>
273
274
275 </div>
276
277
278 <div class="slide">
279 <h1>RenderingEngine</h1>
280
281 SortとRenderingEngineの違い
282
283 <ul>
284 <li>三種類のTaskから構成されている</li>
285 <li>三つのTaskはバリア同期を行っている</li>
286 <li>すべてのTaskは一度に作られない</li>
287 <li>PPEにもTaskが割り振られている</li>
288 <li>大量のデータを扱う(ポリゴン、テクスチャ)</li>
289 </ul>
290
291 </div>
292
293
294 <div class="slide">
295 <h1>RenderingEngine</h1>
296
297 RenderingEngienの場合の問題点
298
299 <ul>
300 <li>SPEの待ちが入る(SPEの稼働率の低下、処理性能の低下)</li>
301 <ul>
302 <li>MailをPPEが読み込みのを待つ</li>
303 <li>他のSPEを待つ</li>
304 <li>次のTaskListを待つ</li>
305 </ul>
306 <li>Taskはバリア同期している</li>
307 </ul>
308
309 </div>
310 327
311 <div class="slide"> 328 <div class="slide">
312 <h1>バリア同期</h1> 329 <h1>バリア同期</h1>
313 <table height="100%" width="100%" border="0"> 330 <table height="100%" width="100%" border="0">
314 <tr><td align="center" valign="middle"> 331 <tr><td align="center" valign="middle">
317 334
318 RenderingEngineのTaskは、3つそれぞれバリア同期をしている。 335 RenderingEngineのTaskは、3つそれぞれバリア同期をしている。
319 336
320 </div> 337 </div>
321 338
322 <div class="slide">
323 <h1>バリア同期</h1>
324 バリア同期には二つの待ちがある
325 <ul>
326 <li>SPEが他のSPEを待つ時間</li>
327 <li>バリア同期が完了し、PPE側で次のTaskが作られる時間</li>
328 </ul><br>
329
330
331 </div>
332
333 <div class="slide">
334 <h1>バリア同期</h1>
335 <table height="100%" width="100%" border="0">
336 <tr><td align="center" valign="middle">
337 <img src="gazo/renderingengine2.png" style="width: 45%%"></td></tr>
338 </table>
339
340 この待ちを解消するためにTaskのパイプライン化を行った。
341
342 </div>
343
344
345
346 <div class="slide">
347 <h1>RenderingEngineの構成</h1>
348 RenderingEngineの構成
349 <ul>
350 <li>CreatePolygon</li>
351 <ul>
352 <li>モデリングデータからポリゴンを生成する(PPE)</li>
353 </ul>
354 <li>CreateSpan</li>
355 <ul>
356 <li>ポリゴンをSpanと呼ばれる水平な線に分ける(SPE)</li>
357 </ul>
358 <li>DrawSpan</li>
359 <ul>
360 <li>Spanを実際にディスプレイに描画する(SPE)</li>
361 </ul>
362 </ul><br>
363
364 RenderingEngineは3種類のTaskから構成されている
365
366 </div>
367 339
368 340
369 <div class="slide"> 341 <div class="slide">
370 <h1>パイプライン化</h1> 342 <h1>パイプライン化</h1>
371 343
450 <li>テクスチャのデータはハッシュで管理する</li> 422 <li>テクスチャのデータはハッシュで管理する</li>
451 </ul> 423 </ul>
452 424
453 </div> 425 </div>
454 426
455
456
457 <div class="slide"> 427 <div class="slide">
458 <h1>SPEのキャッシュ効果</h1> 428 <h1>SPEのキャッシュ効果</h1>
459 429
460 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> 430 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
461 <caption>SPEのキャッシュの効果</caption> 431 <caption>SPEのキャッシュの効果</caption>
538 508
539 ball_bound は扱うテクスチャが少なく、小さい 509 ball_bound は扱うテクスチャが少なく、小さい
540 510
541 </div> 511 </div>
542 512
543
544 <div class="slide">
545 <h1>Mailbox機能</h1>
546 CellのMailbox機能<br>
547
548 <ul>
549 <li>PPEとSPEとの間を双方向で32bitのデータを受け渡す</li>
550 <li>FIFO キュー構造</li>
551 </ul><br>
552 Mailboxの種類
553 <ul>
554 <li>Inbount Mailbox(PPE->SPE 4つ)</li>
555 <li>Outbount Mailbox(SPE->PPE 一つ)</li>
556 <li>Outbount interrupt Mailbox(SPE->PPE 一つ)</li>
557 </ul>
558
559 </div>
560
561 <div class="slide">
562 <h1>Mailbox機能</h1>
563
564 <table height="100%" width="100%" border="0">
565 <tr><td align="center" valign="middle">
566 <img src="gazo/mailbox.png" style="width: 60%%"></td></tr>
567 </table>
568
569 </div>
570
571 <div class="slide">
572 <h1>Mailbox機能</h1>
573 SPE側からTaskが一つ実行完了する度に、実行完了のMailをOutboxに書きこむ<br>
574
575 <ul>
576 <li>Outboxに既にMailが書きこまれている場合に、PPE側から読み込まれるまで、SPEは待つ(Cellの仕様)</li>
577 <li>PPE側のMailチェックが追いつかない場合がある。</li>
578 <li>その間、SPEは何もしないので、処理速度の低下につながる</li>
579 </ul><br>
580
581 そこで、Outboxに既に読み込まれていないMailがあった場合に、いったん、別のキューに追加する。(MailQueue)
582
583
584 </div>
585
586 <div class="slide">
587 <h1>MailQueue</h1>
588
589 <ul>
590 <li>TaskListを消化し、次のTaskListを要求する時に、MailQueueにMailが残っている場合はそれを先に書きだす</li>
591 <li>PPE側はMailのチェックをMailが無くなるまでループする</li>
592 <li>PPEはMailがない場合に、自分の仕事に戻る。</li>
593 <li>今のPPEのMailチェックの仕様には、一度にMailを書きだすのが向いている</li>
594 </ul>
595
596 </ul>
597
598 </div>
599
600 <div class="slide"> 513 <div class="slide">
601 <h1>MailQueueの効果</h1> 514 <h1>MailQueueの効果</h1>
602 515
603 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center"> 516 <table border="1" cellspacing="0" cellspacing="2" cellpadding="10" align="center">
604 <caption>MailQueueの効果</caption> 517 <caption>MailQueueの効果</caption>
617 </table> 530 </table>
618 531
619 地球と月を表示する例題を使って計測した。 532 地球と月を表示する例題を使って計測した。
620 533
621 </div> 534 </div>
622 <!--
623 <div class="slide">
624 <h1>Ceriumの改良点の概要</h1>
625
626 Ceriumの改良点の概要
627
628 <ul>
629 <li>TaskManager</li>
630 <ul>
631 <li>Taskの同期にはCellのMail機能を使う</li>
632 <li>Mailの同期するタイミングの改良</li>
633 <ul>
634 <li><s>MailQueue</s></li>
635 <li>TaskArray</li>
636 </ul>
637 </ul>
638
639 <li>RenderingEngine</li>
640 <ul>
641 <li>Taskのパイプライン化</li>
642 <li>扱う画像をSPE側でキャッシュする</li>
643 </ul>
644
645 </ul>
646
647 </div>
648 -->
649 535
650 <div class="slide"> 536 <div class="slide">
651 <h1>TaskArray</h1> 537 <h1>TaskArray</h1>
652 Task毎のMailは、Task同士の依存関係を解決するために用いている。 538 Task毎のMailは、Task同士の依存関係を解決するために用いている。
653 539
752 コア一つを使用するOpenGLに比べ、Cerium では2.9倍の性能向上が見られた。 638 コア一つを使用するOpenGLに比べ、Cerium では2.9倍の性能向上が見られた。
753 SPEを活用、待ち時間の短縮を行い、性能向上がみれた。 639 SPEを活用、待ち時間の短縮を行い、性能向上がみれた。
754 640
755 </div> 641 </div>
756 642
757 <div class="slide"> 643
758 <h1>まとめ</h1>
759
760 本研究ではゲームフレームワーク Cerium TaskManager の改良を行った。
761 特にCell上において、SPEの稼働率に注意する必要があった。
762
763 SPE、PPE間のデータのやり取りにMail通知を用いている。SPEはMailの書き込みの際に待ちが発生する
764
765 <ul>
766 <li>MailQueue</li>
767 <li>TaskArray</li>
768 </ul><br>
769
770 で待ち時間の削減ができる
771
772 </div>
773
774 <div class="slide">
775 <h1>まとめ</h1>
776
777 RenderingEngineにおいて、Taskがバリア同期をしている。バリア同期にも待ちが発生する
778
779 <ul>
780 <li>Task実行をパイプライン化</li>
781 </ul><br>
782
783 SPEの待ち時間を解消できる。頻繁に扱うデータはSPE内でキャッシュするのがよい
784
785 </div>
786
787
788 <div class="slide">
789 <h1>依存関係の話</h1>
790 稼働率を維持するためにパイプライン化がある
791
792 <ul>
793 <li>扱うデータの依存性から、Pipelineを自動で生成できるはず</li>
794 <li>TaskArrayもデータから自動でできるはず。</li>
795 <li>データはSegmentとして扱う</li>
796 </ui>
797
798 </div>
799
800 <div class="slide">
801 <h1>Codeload</h1>
802
803 Taskを事前に全部ロードしてる
804
805 <ul>
806 <li>SPEのLSは256KB</li>
807 <li>大量のコードを入れるといっぱいになる</li>
808 <li>必要な時に必要な分を予測してSPEにロードするのがよい</li>
809 </ul>
810
811 </div>
812
813 <div class="slide">
814 <h1>Segment</h1>
815
816 データはすべてSegmentという形にして、SPEに必要な分を予測、読み込みするのがよい。<br>
817 テクスチャのように頻繁に扱うデータはキャッシュする<br>
818
819 </div>
820 644
821 645
822 646
823 <div class="slide"> 647 <div class="slide">
824 <h1>END</h1> 648 <h1>END</h1>