Mercurial > hg > Papers > 2012 > yutaka-master
comparison presen/presen1.html @ 24:716f0a413687 draft
add file
author | Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 13 Feb 2012 11:55:11 +0900 |
parents | 02067287fac3 |
children | fa8b52588f67 |
comparison
equal
deleted
inserted
replaced
23:02067287fac3 | 24:716f0a413687 |
---|---|
77 <h4>琉球大学理工学研究科情報工学専攻</h4> | 77 <h4>琉球大学理工学研究科情報工学専攻</h4> |
78 <div class="handout"></div> | 78 <div class="handout"></div> |
79 </li> | 79 </li> |
80 | 80 |
81 <li class="slide"> | 81 <li class="slide"> |
82 <h1>研究背景と目的(1/2)</h1> | 82 <h1>研究背景と目的</h1> |
83 <font size="5"> | 83 <font size="5"> |
84 当研究室では、マルチコアCPU上での開発を支援するたの、並列プログラミングフレームワーク Cerium を開発し、学生実験で使用している。本研究では | 84 <u>本研究では並列プログラムフレームワーク Cerium の改良を行い、並列処理の並列度向上とCell以外のマルチコアCPUへの対応に成功した。</u><br> |
85 Cerium の信頼性の向上を目的とし、改良を行った (信頼性 = 仕様通りに動作する)<br> | 85 |
86 | 86 <img src="pix/amdahl.jpg" style="display:block; width:50%; float: right; margin-top:0%"> |
87 マルチコア上の並列プログラミングでは | 87 |
88 <ul> | 88 <ul> |
89 <li>並列処理部分の特定や同期処理を適切に行わなければ、台数効果は得られない。</li> | 89 <li>アムダールの法則より、プログラム全体の並列化率が低ければマルチコアの性能を活かすことができない</li> |
90 <li>再現性ないバグなどが発生する可能性がある</li> | 90 <li>現在の Cerium を用いたプログラムの開発では、高い並列度が保証されない</li> |
91 <li>アーキテクチャを理解し最適なプログラムを書く必要がある</li> | 91 <li>Cerium はPS3/Cell での並列処理を行えるが、当初はCell向けに作られた為、他の汎用マルチコアCPU に対応していない</li> |
92 </ul><br> | 92 </ul><br> |
93 | 93 |
94 など信頼性のあるプログラムを開発するには逐次プログラミングよりも技術と手間がかかる問題がある<br> | 94 Cerium の他CPUへの対応と、自明な並列度があるレンダリングとゲーム処理を例題に、高い並列度の維持を目的とする |
95 Cell上でのゲーム作成を行う学生実験でも、講義期間中に作品が一定のレベルに達しない問題が生じた。そこで学生実験での使用を考慮した フレームワーク Cerium を開発した<br> | 95 |
96 | 96 </font> |
97 </font> | 97 |
98 | |
99 <li class="slide"> | |
100 <h1>研究背景と目的(2/2)</h1> | |
101 <font size="5"> | |
102 Cerium を用いて 期間中のゲームの作成が可能になった。しかし学生実験での使用や、例題の実装を行い Cerium の信頼性が十分でない点が明らかになった。 | |
103 <ul> | |
104 <li>仕様通りの稼働率がでない</li> | |
105 <li>アーキテクチャ依存の記述が含まれている</li> | |
106 </ul><br> | |
107 以上の問題点を解決するため | |
108 <ul> | |
109 <li>ソフトウェアMailQueueの実装</li> | |
110 <li>TaskをグルーピングするTaskArrayの実装</li> | |
111 <li>明示的なDMAロードを隠蔽するMemorySegmentのAPIの実装</li> | |
112 </ul><br> | |
113 などの改良を行い、信頼性のある並列プログラミングフレームワークを目指す。 | |
114 </font> | |
115 | 98 |
116 <li class="slide"> | 99 <li class="slide"> |
117 <h1>発表構成</h1> | 100 <h1>発表構成</h1> |
118 <ul> | 101 <ul> |
119 <li>Cellの機能</li> | 102 <li>Cellの機能</li> |
120 <li>Ceriumの構成</li> | 103 <li>Ceriumの構成</li> |
121 <li>Ceriumに行った改良とその効果</li> | 104 <li>Cerium の問題点1(Mail の待ち時間)</li> |
122 <ul> | 105 <ul> |
123 <li>TaskArrayの実装(Mailの待ち時間の削減)</li> | 106 <li>TaskArray での改良と効果</li> |
124 <li>ソフトウェアMailQueueの実装(Mailの待ち時間の削減)</li> | 107 <li>MailQueue での改良と効果</li> |
125 <li>MemorySegmentの実装(アーキテクチャ依存記述の隠蔽)</li> | 108 </ul> |
109 <li>Cerium の問題点2(アーキテクチャ依存の記述)</li> | |
110 <ul> | |
111 <li>MemorySegmentでの改良と効果</li> | |
126 </ul> | 112 </ul> |
127 <li>まとめ</li> | 113 <li>まとめ</li> |
114 <li>OpenGLとの比較</li> | |
128 <li>今後の課題</li> | 115 <li>今後の課題</li> |
129 </ul> | 116 </ul> |
130 | 117 |
131 <li class="slide"> | 118 <li class="slide"> |
132 <h1>Cell Broadband Engine</h1> | 119 <h1>Cell Broadband Engine</h1> |
133 <font size="5"> | 120 <font size="5"> |
134 | 121 |
135 研究、実験の題材となった Cell Broadband Engine とは、 | 122 研究、実験の題材となった Cell Broadband Engine とは、 |
136 <ul> | 123 |
137 <li>ソニー、SCE、 IBM、 東芝によって開発されたプロセッサ</li> | 124 <img src="pix/cell.png" style="display:block; width:50%; float: right; margin-top:0%"> |
138 <li>マルチコアで、9つのコアを持つ</li> | 125 |
139 <ul> | 126 <ul> |
140 <li>制御用コア PorwerPC Processor Element 1基</li> | 127 <li>1基のPPEと8基のSPEがリングバス(EIB)で構成されている。動作クロックは3.2GHz(実験で使えるSPEの数は6基)</li> |
141 <li>演算用コア Synergistic Processor Element 8基 (実験で使用できるのは6基)</li> | 128 <li>リングバスのデータ帯域幅は1サイクルあたり最大96byte(3.2GHz駆動時には307.2GB/sec)</li> |
142 <li>各コアは Element Interconnect Bus を経由してデータアクセスを行う</li> | 129 <li>SPEは256KBのLocalStore(LS)を持つ</li> |
143 </ul> | 130 <li>SPEからメインメモリへは直接アクセスできない</li> |
144 </ul> | 131 <ul> |
145 | 132 <li>SPEが持つMFC(Memory Flow Controller)へDMA命令を送ることで行う</li> |
146 <p style="text-align: center;"> | 133 </ul> |
147 <img class="scale" src="pix/cell.png" alt="" title="At a Glance" /> | 134 </ul> |
148 </p> | 135 |
149 | 136 </font> |
150 </font> | 137 |
151 | 138 <li class="slide"> |
152 <li class="slide"> | 139 <h1>Cellの機能</h1> |
153 <h1>Cellの機能(DMA転送)</h1> | |
154 <font size="6"> | 140 <font size="6"> |
155 Cell の SPE は直接 MainMemory にアクセスできない。 明示的な DMA 転送命令を用いてデータにアクセスする。転送するデータの条件として | 141 |
156 | 142 <u>Mailbox</u> |
157 <ul> | 143 |
158 <li>16アラインメントに揃える</li> | 144 <ul> |
159 <li>16byte の倍数のサイズでなければならない</li> | 145 <li>SPEのMFC内にあるFIFOキュー</li> |
160 <li>一度の転送は16KB の大きさまでできる</li> | 146 <li>PPE と SPE 間で32ビットメッセージの交換ができる</li> |
147 <li>Mail の Queue の種類</li> | |
148 <ul> | |
149 <li>SPU inbound Mailbox: PPE -> SPE (キューのサイズは4)</li> | |
150 <li>SPU Outbound Mailbox: SPE -> PPE (キューのサイズは1)</li> | |
151 </ul> | |
161 </ul><br> | 152 </ul><br> |
162 | 153 |
163 プログラムが明示的にDMA命令を発行して、データ転送を行う | 154 Outbound Mailbox へ Mail を書き込む際、キューがいっぱいの時は、PPE 側から読み込まれるまで待つ。 |
164 </font> | 155 |
165 | 156 </font> |
166 <li class="slide"> | 157 <li class="slide"> |
167 <h1>Cellの機能(Mailbox)</h1> | 158 <h1>Cerium</h1> |
159 <font size="5"> | |
160 Cerium の構成 | |
161 | |
162 <img src="pix/cerium.png" style="display:block; width:50%; float: right; margin-top:0%"> | |
163 | |
164 <ul> | |
165 <li>TaskManager</li> | |
166 <ul> | |
167 <li><font size="5">ユーザが定義したTaskを管理し、各コアに割り当てる</font></li> | |
168 </ul> | |
169 | |
170 <li>RenderingEngine</li> | |
171 <ul> | |
172 <li><font size="5">オブジェクトを画面に描画する</font></li> | |
173 <li><font size="5">3種類のTaskから構成される</font></li> | |
174 </ul> | |
175 | |
176 <li>SceneGraph</li> | |
177 <ul> | |
178 <li><font size="5">ゲームのシーンを作成し、それを切り替えながらゲームを進行する</font></li> | |
179 <li><font size="5">OpenSceneGraphのようなもの</font></li> | |
180 </ul> | |
181 | |
182 </ul><br> | |
183 | |
184 </font> | |
185 | |
186 <li class="slide"> | |
187 <h1>TaskManager</h1> | |
188 <font size="5"> | |
189 TaskManager は、Taskと呼ばれる分割された各プログラムを管理する。Task の単位 | |
190 はサブルーチンである。Task 同士の依存関係を考慮しながら実行していく。</p> | |
191 <p>Task を生成する際に、以下のような要素が設定可能である</p> | |
192 | |
193 <ul> | |
194 <li><b>input data, output data, parameter</b><br> | |
195 これらは関数でいうところの引数に価する</li> | |
196 <li><b>cpu type</b><br> | |
197 Task を PPE または SPE のどちらで実行するのかを示している</li> | |
198 <li><b>dependency</b></li> | |
199 他の Task との依存関係を示している | |
200 </li> | |
201 </ul> | |
202 | |
203 </font> | |
204 | |
205 <li class="slide"> | |
206 <h1>TaskManager</h1> | |
207 <font size="5"> | |
208 | |
209 <img src="pix/scheduler1.png" style="display:block; width:50%; float: right; margin-top:0%"> | |
210 | |
211 <ul> | |
212 <li>生成された Task は TaskList としてまとめられ SPE で実行される</li> | |
213 <li>SPE 側では受け取った TaskList から Task を受け取り、パイプライン的に実行していく</li> | |
214 </ul> | |
215 | |
216 </font> | |
217 | |
218 | |
219 <li class="slide"> | |
220 <h1>Mailのやり取り</h1> | |
168 <font size="6"> | 221 <font size="6"> |
169 | 222 <ul> |
170 PPE と SPE の通信には Mailbox を用いる | 223 <li>SPE と PPE 間の同期は Mail のやり取りを行う</li> |
171 | 224 <br> |
172 <ul> | 225 <li>Mailのタイミング</li> |
173 <li>PPE と SPE 間で32ビットメッセージの交換ができる</li> | 226 <br> |
174 <li>Mail の Queue は3種類</li> | 227 <font color="red">SPE -> PPE</font> |
175 <ul> | 228 <ul> |
176 <li>SPU inbound Mailbox: PPE -> SPE</li> | 229 <li>タスクの終了(Taskの依存関係の解決のため)</li> |
177 <li>SPU Outbound Mailbox: SPE -> PPE</li> | 230 <li>新しい TaskList のリクエスト</li> |
178 <li>SPU Outbound interrupt Mailbox: SPE -> PPE (割り込み)</li> | 231 </ul> |
179 </ul> | 232 <br> |
180 </ul><br> | 233 <font color="red">PPE -> SPE</font> |
181 | 234 <ul> |
182 | 235 <li>新しい TaskList の送信</li> |
183 </font> | 236 </ul> |
184 <li class="slide"> | 237 </ul> |
185 <h1>Cerium</h1> | 238 |
186 <font size="6"> | 239 </font> |
187 Cerium とは | 240 |
188 | 241 <li class="slide"> |
189 <ul> | 242 <h1>PPEとSPEで行われるパイプライン処理</h1> |
190 <li>並列プログラミング用のフレームワーク</li> | 243 <font size="5"> |
191 <li>学生実験での使用を考慮して PS3/Cell, Linux, MacOSX で動作する</li> | 244 PPEとSPE 間で Mail を介して Task の実行をパイプライン化している。 |
192 <li>Ceriumの構成</li> | 245 Mail の受け取りは PPE 側から定期的にポーリングするしかなく、PPE のMain ループで定期的に チェックしている。<br> |
193 <ul> | 246 <u>パイプラインがうまく動作する例</u> |
194 <li>TaskManager</li> | 247 <img src="pix/mailsched1.png" style="display:block; width:60%; float: center; margin-top:0%"> |
195 <li>RenderingEngine</li> | 248 |
196 <li>SceneGraph</li> | 249 当初はこれでうまくパイプラインが実行されていると思われていたが、うまくいかないパターンが存在することが明らかになった。 |
197 </ul> | 250 |
198 </ul> | 251 |
199 </font> | 252 </font> |
200 | 253 |
201 <li class="slide"> | 254 <li class="slide"> |
202 <h1>TaskManager</h1> | 255 <h1>PPEとSPEで行われるパイプライン処理</h1> |
203 TaskManager とは Task のスケジューラ | 256 <font size="5"> |
204 | 257 PPE 側で実行される Task の処理が多い時に、Mail チェックの頻度が少なくなる。 |
205 <ul> | 258 Outbound Mailbox がひとつの Mail で占有される時間が長くなり、SPE 側の終了した Task の終了Mail が書き出せなくなる。 |
206 <li>Task とよばれるデータ構造を提供</li> | 259 そのため、書き込み待ちが発生し、SPE に待ち時間が発生する。<br> |
207 <li>ユーザは処理(単位は関数に近い)を Task で記述していく</li> | 260 <u>パイプラインが崩れてしまう例</u> |
208 <li>定義されたTask は、Task 情報に沿って各コアに処理を割り振られる</li> | 261 <img src="pix/mailsched2.png" style="display:block; width:57%; float: center; margin-top:0%"> |
209 </ul><br> | 262 |
210 | 263 これが並列度の低下を招いている。 |
211 Task で記述された部分の、自動的な並列処理スケジューリングを行う。 | 264 </font> |
212 | 265 |
213 <li class="slide"> | 266 |
214 <h1>RenderingEngine(1/2)</h1> | 267 <li class="slide"> |
215 PS3 では Graphics Engine の仕様が公開されていないので、独自の RenderingEngine を開発した。 | 268 <h1>PPEとSPEで行われるパイプライン処理</h1> |
216 Task で記述され、主に3つの Task から構成される | 269 <font size="5"> |
217 <ul> | 270 そこで、その問題を解決するため、一つ目のアプローチとして Outbound Mailbox と Task の終了処理の間に ソフトウェア MailQueue を導入した。 |
218 <li>CreatePolygonTask</li> | 271 Outbound Mailbox がいっぱいの場合その Queue に Task 終了 Mail を挿入し、次の Task が実行されるようになった<br> |
219 <ul> | 272 |
220 <li>モデリングデータを、三角形のポリゴンに変換する</li> | 273 <u>MailQueueを導入によりパイプラインが正常に動作している例</u> |
221 </ul> | 274 <img src="pix/mailsched3.png" style="display:block; width:55%; float: center; margin-top:0%"> |
222 <li>CreateSpanTask</li> | 275 |
223 <ul> | 276 そのため、SPE の待ち時間が無くなり、並列度が向上した。<br> |
224 <li>ポリゴンを水平な線(Span)に分割する</li> | 277 </font> |
225 </ul> | 278 |
226 <li>DrawSpanTask</li> | 279 <li class="slide"> |
227 <ul> | 280 <h1>PPEとSPEで行われるパイプライン処理</h1> |
228 <li>Span を Texture とマッピングし画面に出力する</li> | 281 <font size="5"> |
229 </ul> | 282 二つ目のアプローチとして、複数の Task を TaskArray としてグルーピングする 方法を考えた。 |
230 </ul> | 283 依存関係が線形である Task は TaskArray としてまとめることにより、Task 終了のメールを減らすことが出来る。 |
231 | 284 <img src="pix/taskarray3.png" style="display:block; width:60%; float: center; margin-top:0%"> |
232 <li class="slide"> | 285 TaskArrayを導入することによって、wait time が削減された。 |
233 <h1>RenderingEngine(2/2)</h1> | 286 <img src="pix/taskarray2.png" style="display:block; width:60%; float: center; margin-top:0%"> |
234 | 287 これにより、並列度が向上した。 |
235 例: Cube のモデリングデータの場合には、以下のように Task が働く。 | 288 </font> |
236 | 289 |
237 <p style="text-align: center;"> | 290 <li class="slide"> |
238 <img class="scale" src="pix/rendering3.png" width="50%" alt="" title="At a Glance" /> | 291 <h1>改良効果の測定</h1> |
239 </p> | 292 RenderingEngine を用いて、効果を計測した。レンダリングの例題として、ball bound と panelを用いた。<br> |
240 | 293 ball bound は赤いボールが跳ねる例題である。描画領域が画面の中でボールの部分だけであり、描画領域が狭いと言える。<br> |
241 <li class="slide"> | 294 panel は画面一面に画像を描画する例題である。描画領域が最大である。<br> |
242 <h1>SceneGraph</h1> | 295 <img src="pix/ball_bound1.png" style="display:block; width:30%; float: left; margin-top:0%"> |
243 ゲームのシーンを構成する木構造のグラフ。各 Node がゲームのオブジェクトになる。オブジェクトには Move 関数と collision 関数が設定でき、ステイトパターンで入れ替える。 | 296 <img src="pix/panel1.png" style="display:block; width:30%; float: right; margin:5% 20% 0% 20%"> |
244 | 297 |
245 <p style="text-align: center;"> | 298 </font> |
246 <img class="scale" src="pix/scenegraph1.png" width="30%" alt="" title="At a Glance" /> | 299 |
247 </p> | 300 <li class="slide"> |
248 | 301 <h1>改良効果の測定</h1> |
249 | 302 <font size="5"> |
250 <li class="slide"> | |
251 <h1>Cerium の改良(Mailの待ち時間)</h1> | |
252 <font size="5"> | |
253 RenderingEngine を用いた例題で、ball bound, panel がある。(FPS = Frame per second) | |
254 | 303 |
255 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> | 304 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> |
256 <tr> | 305 <caption>ballbound</caption> |
257 <th></th> | 306 |
307 <tr> | |
308 <th>改良項目</th> | |
258 <th>FPS</th> | 309 <th>FPS</th> |
259 <th>DMA転送待ち割合</th> | 310 <th>mail待ちの割合</th> |
260 <th>mail待ち割合</th> | |
261 <th>SPE稼働率</th> | 311 <th>SPE稼働率</th> |
262 </tr> | 312 <th>SPE稼働率の差分</th> |
263 <tr> | 313 </tr> |
264 <th>ball bound</th> | 314 |
315 <tr> | |
316 <th>改良なし</th> | |
265 <th>30.2</th> | 317 <th>30.2</th> |
266 <th>1.8%</th> | |
267 <th>74.3%</th> | 318 <th>74.3%</th> |
268 <th>23.7%</th> | 319 <th>23.7%</th> |
269 </tr> | 320 <th>-</th> |
270 <tr> | 321 </tr> |
271 <th>panel</th> | 322 |
323 <tr> | |
324 <th>TaskArray適用後</th> | |
325 <th>32.2</th> | |
326 <th>66.7%</th> | |
327 <th>30.8%</th> | |
328 <th><font color="red">+7.1%</font></th> | |
329 </tr> | |
330 | |
331 <tr> | |
332 <th>MailQueue適用後</th> | |
333 <th>41.7</th> | |
334 <th>56.8%</th> | |
335 <th>40.0%</th> | |
336 <th><font color="red">+10.8%</font></th> | |
337 </tr> | |
338 | |
339 | |
340 </table> | |
341 | |
342 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> | |
343 <caption>panel</caption> | |
344 | |
345 <tr> | |
346 <th>改良項目</th> | |
347 <th>FPS</th> | |
348 <th>mail待ちの割合</th> | |
349 <th>SPE稼働率</th> | |
350 <th>SPE稼働率の差分</th> | |
351 </tr> | |
352 | |
353 <th>改良なし</th> | |
272 <th>4.0</th> | 354 <th>4.0</th> |
273 <th>21.3%</th> | |
274 <th>11.1%</th> | 355 <th>11.1%</th> |
275 <th>67.6%</th> | 356 <th>67.6%</th> |
276 </tr> | 357 <th>-</th> |
277 </table> | 358 </tr> |
278 | 359 |
279 <ul> | 360 <tr> |
280 <li>panel</li> | 361 <th>TaskArray適用後</th> |
281 <ul> | |
282 <li>解像度1980x1080の一枚の画像の描画行う。</li> | |
283 </ul> | |
284 <li>ball bound</li> | |
285 <ul> | |
286 <li>球が跳ねる例題。</li> | |
287 </ul> | |
288 </ul> | |
289 | |
290 ball bound では Mail 待ちが約70%、稼働率23%と十分な稼働率ではない。(panel は ball bound より描画の処理が重く、その分稼働率が高くなっている)<br> | |
291 アムダールの法則より稼働率がでないとマルチコアの性能は発揮されない。フレームワークとしての信頼性が十分でない問題がある | |
292 </font> | |
293 | |
294 <li class="slide"> | |
295 <h1>Mail 通知のスケジューリング</h1> | |
296 稼働率を向上させるために、Mail の待ち時間を削減する。<br><br> | |
297 Cerium では SPE が Mail で 待ち時間が発生するタイミングは2つ | |
298 | |
299 <ul> | |
300 <li>TaskList を待つ場合</li> | |
301 <li>SPE から Mailbox へ書き込む際の待ち</li> | |
302 </ul> | |
303 | |
304 <li class="slide"> | |
305 <h1>TaskListのMail待ち</h1> | |
306 TaskList は処理する Task の List である。PPE で生成され SPE へ Mail で通知される | |
307 | |
308 <p style="text-align: center;"> | |
309 <img class="scale" src="pix/tasklistmail1.png" width="80%" alt="" title="At a Glance" /> | |
310 </p> | |
311 | |
312 TaskList が生成され SPE に通知されるまで、SPE に待ち時間が発生する。 | |
313 | |
314 <li class="slide"> | |
315 <h1>Mail の書き込み待ち</h1> | |
316 Task が終了した際と TaskList が終了した際に SPE が Mailbox へ書き込みを行う(依存関係解決のため)。Outbound Mailbox はサイズが1なので、他のMailが書き込まれている場合、それが PPE側から読み込まれるまで、待つ。 | |
317 | |
318 <p style="text-align: center;"> | |
319 <img class="scale" src="pix/mailschedule2.png" width="80%" alt="" title="At a Glance" /> | |
320 </p> | |
321 | |
322 TaskList が生成され SPE に通知されるまで、SPE に待ち時間が発生する。 | |
323 | |
324 | |
325 <li class="slide"> | |
326 <h1>TaskArray(1/3)</h1> | |
327 <font size="5"> | |
328 Task毎に依存関係の解決のため、Mail を通知する。バリア同期など複数の Task が同じ Task を待つ場合にはグルーピングできる。 | |
329 Task のグルーピングを可能にするために TaskArray を実装した。 | |
330 | |
331 <p style="text-align: center;"> | |
332 <img class="scale" src="pix/taskarray1.png" width="80%" alt="" title="At a Glance" /> | |
333 </p> | |
334 | |
335 </font> | |
336 | |
337 <li class="slide"> | |
338 <h1>TaskArray(2/3)</h1> | |
339 例えば TaskListのサイズが4, TaskArray のサイズが4の場合、Task が8個の場合 | |
340 | |
341 <p style="text-align: center;"> | |
342 <img class="scale" src="pix/taskarray2.png" width="80%" alt="" title="At a Glance" /> | |
343 </p> | |
344 | |
345 グルーピングされるため Task 毎の Mail 回数が減る。TaskList の要求回数が減る。そのため Mail の待ち時間が入る箇所が削減され、Mail の待ち時間自体の削減につながる。 | |
346 | |
347 <li class="slide"> | |
348 <h1>TaskArray(3/3)</h1> | |
349 <font size="5"> | |
350 TaskArray の効果を示す | |
351 | |
352 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> | |
353 <caption>ballbound</caption> | |
354 <tr> | |
355 <th>TaskArray</th> | |
356 <th>FPS</th> | |
357 <th>DMA転送待ち時間</th> | |
358 <th>mail待ちの割合</th> | |
359 <th>SPE稼働率</th> | |
360 </tr> | |
361 <tr> | |
362 <th> なし </th> | |
363 <th>30.2</th> | |
364 <th>1.8%</th> | |
365 <th>74.3%</th> | |
366 <th>23.7%</th> | |
367 </tr> | |
368 <tr> | |
369 | |
370 <tr> | |
371 <th> あり </th> | |
372 <th>32.2</th> | |
373 <th>2.5%</th> | |
374 <th>66.7%</th> | |
375 <th>30.8%</th> | |
376 </tr> | |
377 | |
378 </table> | |
379 | |
380 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> | |
381 <caption>panel</caption> | |
382 <tr> | |
383 <th>TaskArray</th> | |
384 <th>FPS</th> | |
385 <th>DMA転送待ち時間</th> | |
386 <th>mail待ちの割合</th> | |
387 <th>SPE稼働率</th> | |
388 </tr> | |
389 | |
390 <th>なし</th> | |
391 <th>4.0</th> | |
392 <th>21.3%</th> | |
393 <th>11.1%</th> | |
394 <th>67.6%</th> | |
395 </tr> | |
396 | |
397 <tr> | |
398 <th>あり</th> | |
399 <th>4.2</th> | 362 <th>4.2</th> |
400 <th>22.5%</th> | |
401 <th>5.7%</th> | 363 <th>5.7%</th> |
402 <th>71.8%</th> | 364 <th>71.8%</th> |
403 </tr> | 365 <th><font color="red">+4.2%</font></th> |
404 </table> | 366 </tr> |
405 | 367 |
406 TaskArray を ball bound, panel の DrawSpanTask に適応。FPS、稼働率の向上。Mail 待ちの時間が削減された | 368 <tr> |
407 | 369 <th>MailQueue適用後</th> |
408 </font> | |
409 | |
410 <li class="slide"> | |
411 <h1>MailQueue(1/3)</h1> | |
412 Task 毎の Mail 書き込み時の待ち時間を削減するため、MailQueue を実装した。 | |
413 | |
414 <ul> | |
415 <li>SPE から Mailbox に書き出せない場合に MailQueue へと書きだす</li> | |
416 <li>MailQueue に Mail がある場合は、MailQueue から Mailbox へ書き出す</li> | |
417 <li>MailQueue に残っている Mail は TaskList のTask を消化した時点で、すべて書き出す処理を挟む</li> | |
418 </ul> | |
419 | |
420 <li class="slide"> | |
421 <h1>MailQueue(2/3)</h1> | |
422 | |
423 Mailbox に書き込めない場合は、MailQueue に書き込む例 | |
424 | |
425 <p style="text-align: center;"> | |
426 <img class="scale" src="pix/mailqueue1.png" width="70%" alt="" title="At a Glance" /> | |
427 </p> | |
428 | |
429 <li class="slide"> | |
430 <h1>MailQueue(3/3)</h1> | |
431 <font size="5"> | |
432 MailQeueuの効果 | |
433 | |
434 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> | |
435 <caption>ball bound</caption> | |
436 <tr> | |
437 <th>MailQueue</th> | |
438 <th>FPS</th> | |
439 <th>DMA転送待ち時間</th> | |
440 <th>mail待ちの割合</th> | |
441 <th>SPE稼働率</th> | |
442 </tr> | |
443 <tr> | |
444 <th> なし </th> | |
445 <th>32.2</th> | |
446 <th>2.5%</th> | |
447 <th>66.7%</th> | |
448 <th>30.8%</th> | |
449 </tr> | |
450 <tr> | |
451 | |
452 <tr> | |
453 <th> あり </th> | |
454 <th>41.7</th> | |
455 <th>3.3%</th> | |
456 <th>56.8%</th> | |
457 <th>40.0%</th> | |
458 </tr> | |
459 | |
460 </table> | |
461 | |
462 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> | |
463 <caption>panel</caption> | |
464 <tr> | |
465 <th>MailQueue</th> | |
466 <th>FPS</th> | |
467 <th>DMA転送待ち時間</th> | |
468 <th>mail待ちの割合</th> | |
469 <th>SPE稼働率</th> | |
470 </tr> | |
471 | |
472 <tr> | |
473 <th>なし</th> | |
474 <th>4.2</th> | 370 <th>4.2</th> |
475 <th>22.5%</th> | |
476 <th>5.7%</th> | |
477 <th>71.8%</th> | |
478 </tr> | |
479 | |
480 <th>あり</th> | |
481 <th>4.2</th> | |
482 <th>23.7%</th> | |
483 <th>4.1%</th> | 371 <th>4.1%</th> |
484 <th>72.3%</th> | 372 <th>72.3%</th> |
485 </tr> | 373 <th><font color="red">+0.5%</font></th> |
486 | 374 </tr> |
487 </table> | 375 </table> |
488 </font> | 376 |
489 | 377 改良を加え 各例題 の<u>FPS、稼働率の向上。Mail 待ちの時間が削減され、並列度が向上したといえる</u> |
490 ball bound , panel ともに Mail 待ち時間が削減され、稼働率、FPS の向上につながった。 | 378 |
491 | 379 </font> |
492 | 380 |
493 <li class="slide"> | 381 <li class="slide"> |
494 <h1>Ceriumの改良(アーキテクチャ依存記述の隠蔽)</h1> | 382 <h1>他のアーキテクチャへの対応</h1> |
495 RenderingEngine の Task内 では明示的にDMA転送命令を記述している。 | 383 PS3 が Linux をサポートしなくなっため、これ以上のCell上での実験が困難になってきている。<br> |
496 | 384 <ul> |
497 <ul> | 385 <li>これまでアーキテクチャ依存を排除して MacOSX,Linux などの上でも動作する設計を行なっていたため他のアーキテクチャでも動作はする。</li> |
498 <li>処理するデータ構造上の理由、Task内でのデータロードが必要</li> | 386 <li>しかし並列実行はサポートしておらず、FIFOを用いた 逐次処理のみをサポートしていた。 </li> |
499 <li>DMA転送命令は Cell アーキテクチャ依存の記述</li> | 387 </ul> |
500 <li>他のアーキテクチャなどでは不要</li> | 388 |
501 </ul><br> | 389 そこで、汎用マルチコア向けのパラレルタスクのサポートを行った。 |
502 | 390 |
503 フレームワークとしての汎用性に欠ける。 | 391 <li class="slide"> |
504 アーキテクチャ依存の記述を隠蔽できるAPIが必要になった。 | 392 <h1>他のアーキテクチャへの対応</h1> |
505 | 393 |
506 <li class="slide"> | 394 異なるアーキテクチャで動作させるにあたり、アーキテクチャの依存を吸収できるインターフェイスが望ましい。<br> |
507 <h1>MemorySegment(1/6)</h1> | 395 現在のSPEからのメモリアクセスは直接DMA転送を行うのではなく、MemorySegment API を用いて記述している。 |
396 MemorySegment API は、読み込んだデータの LSへのLRU方式のキャッシュをサポートする。そのため無駄なデータの転送が | |
397 削減された。 | |
398 このAPIを用いる前は、Task内部で直接DMA転送を行っており、一度LSに読み込んだデータを再利用する機構がなかった。 | |
399 このMemorySegmentのAPIには MainMemory のアドレスが用いられており、Cell 以外のアーキテクチャでも問題なく動作する。 | |
400 | |
401 | |
402 | |
403 <li class="slide"> | |
404 <h1>Ceriumの改良-MemorySegment(1/6)</h1> | |
508 明示的なDMA転送命令を隠蔽するため MemorySegment を実装した | 405 明示的なDMA転送命令を隠蔽するため MemorySegment を実装した |
509 MemorySegemnt はデータ構造。LS 内のデータを管理する。 | 406 MemorySegemnt はデータ構造。LS 内のデータを管理する。 |
510 <ul> | 407 <ul> |
511 <li>一定のメモリを確保し、ハッシュで管理(LRU方式)</li> | 408 <li>一定のメモリを確保し、ハッシュで管理(LRU方式)</li> |
512 <li>API 内部で自動的なキャッシュを行う (サイズは任意に設定できる)</li> | 409 <li>API 内部で自動的なキャッシュを行う (サイズは任意に設定できる)</li> |
517 <li>dma_wait -> wait_segment</li> | 414 <li>dma_wait -> wait_segment</li> |
518 </ul> | 415 </ul> |
519 </ul> | 416 </ul> |
520 | 417 |
521 <li class="slide"> | 418 <li class="slide"> |
522 <h1>MemorySegment(2/6)</h1> | 419 <h1>Ceriumの改良-MemorySegment(2/6)</h1> |
523 | 420 |
524 <p style="text-align: center;"> | 421 <p style="text-align: center;"> |
525 <img class="scale" src="pix/getsegment1.png" width="50%" alt="" title="At a Glance" /> | 422 <img class="scale" src="pix/getsegment1.png" width="50%" alt="" title="At a Glance" /> |
526 </p> | 423 </p> |
527 | 424 |
528 | 425 |
529 <li class="slide"> | 426 <li class="slide"> |
530 <h1>MemorySegment(3/6)</h1> | 427 <h1>Ceriumの改良-MemorySegment(3/6)</h1> |
531 | 428 |
532 <p style="text-align: center;"> | 429 <p style="text-align: center;"> |
533 <img class="scale" src="pix/putsegment1.png" width="50%" alt="" title="At a Glance" /> | 430 <img class="scale" src="pix/putsegment1.png" width="50%" alt="" title="At a Glance" /> |
534 </p> | 431 </p> |
535 | 432 |
536 | 433 <li class="slide"> |
537 <li class="slide"> | 434 <h1>Ceriumの改良-MemorySegment(6/6)</h1> |
538 <h1>MemorySegment(4/6)</h1> | 435 MemorySegment を導入し、 |
539 明示的に記述したDMA転送命令の例 | |
540 <pre> | |
541 loop() { | |
542 | |
543 tmp_data = get_data; | |
544 get_data = send_data; | |
545 send_data = tmp_data; | |
546 | |
547 dma_wait(WAIT_STORE); | |
548 | |
549 dma_store(send_data, send_addr, data_size, WAIT_STORE); | |
550 dma_load(get_data, get_addr, data_size, WAIT_LOAD); | |
551 | |
552 dma_wait(WAIT_LOAD); | |
553 | |
554 calc(get_data); | |
555 | |
556 } | |
557 </pre> | |
558 | |
559 <li class="slide"> | |
560 <h1>MemorySegment(5/6)</h1> | |
561 MemorySegment を適応させた例 | |
562 <pre> | |
563 loop() { | |
564 | |
565 wait_segment(put_ms); | |
566 | |
567 put_ms = get_ms; | |
568 | |
569 put_segment(put_ms); | |
570 get_ms = get_segment(get_addr, ml); | |
571 | |
572 wait_segment(get_ms); | |
573 get_data = get_ms->data; | |
574 | |
575 calc(get_data); | |
576 } | |
577 </pre> | |
578 | |
579 <li class="slide"> | |
580 <h1>MemorySegment(6/6)</h1> | |
581 MemorySemgment を導入 | |
582 | 436 |
583 <ul> | 437 <ul> |
584 <li>アーキテクチャ依存の記述を隠蔽することに成功した</li> | 438 <li>アーキテクチャ依存の記述を隠蔽することに成功した</li> |
585 <li>汎用的な Task 内でのデータ転送APIとして使用でき</li> | 439 <li>汎用的な Task 内でのデータ転送APIとして使用でき</li> |
586 <li>Core i7, Xeon などの汎用のメニーコアにも対応可能</li> | 440 <li>Core i7, Xeon などの汎用のマルチコアにも対応可能</li> |
587 </ul> | 441 </ul> |
588 | 442 |
589 <li class="slide"> | 443 <li class="slide"> |
590 <h1>まとめ(1/2)</h1> | 444 <h1>まとめ</h1> |
591 並列プログラミングフレームワーク Cerium の改良を行った。 | 445 並列プログラミングフレームワーク Cerium の改良を行った。 |
592 | 446 |
593 <ul> | 447 <ul> |
594 <li>MailQeueu, TaskArry を実装、導入した。その結果 Mail の待ち時間の削減、稼働率と FPS の向上に成功した</li> | 448 <li>MailQeueu, TaskArry を実装、導入した。その結果 Mail の待ち時間の削減、稼働率と FPS の向上に成功した</li> |
595 <li>MemorySegment を実装し、汎用的なデータ転送APIが利用できるようになった。Cell アーキテクチャ依存の記述の隠蔽に成功</li> | 449 <li>MemorySegmentを適応し、汎用的なデータ転送APIが利用できるようになった。</li> |
596 </ul><br> | 450 </ul><br> |
597 | 451 |
598 以上の改良を行い、稼働率の向上、アーキテクチャ依存のコードの排除に成功し、フレームワークとしての信頼性が向上した。 | 452 以上の改良を行い、稼働率の向上、Cellのみでなく、他の汎用マルチコアCPUへの対応にも成功した。 |
599 | |
600 <li class="slide"> | |
601 <h1>まとめ(2/2)</h1> | |
602 | |
603 改良の効果を示す | |
604 | |
605 <font size="5"> | |
606 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> | |
607 <caption>ball bound</caption> | |
608 <tr> | |
609 <th></th> | |
610 <th>FPS</th> | |
611 <th>DMA転送待ち時間</th> | |
612 <th>mail待ちの割合</th> | |
613 <th>SPE稼働率</th> | |
614 </tr> | |
615 <tr> | |
616 <th>改良前</th> | |
617 <th>30.2</th> | |
618 <th>1.8%</th> | |
619 <th>74.3%</th> | |
620 <th>23.7%</th> | |
621 </tr> | |
622 <tr> | |
623 | |
624 <tr> | |
625 <th>改良後</th> | |
626 <th>41.7</th> | |
627 <th>3.3%</th> | |
628 <th>56.8%</th> | |
629 <th>40.0%</th> | |
630 </tr> | |
631 </table> | |
632 | |
633 <table border="1" cellspacing="0" cellspacing="2" cellpadding="5" align="center"> | |
634 <caption>panel</caption> | |
635 <tr> | |
636 <th></th> | |
637 <th>FPS</th> | |
638 <th>DMA転送待ち時間</th> | |
639 <th>mail待ちの割合</th> | |
640 <th>SPE稼働率</th> | |
641 </tr> | |
642 | |
643 <tr> | |
644 <th>改良前</th> | |
645 <th>4.0</th> | |
646 <th>21.3%</th> | |
647 <th>11.1%</th> | |
648 <th>67.6%</th> | |
649 </tr> | |
650 | |
651 <th>改良後</th> | |
652 <th>4.2</th> | |
653 <th>23.7%</th> | |
654 <th>4.1%</th> | |
655 <th>72.3%</th> | |
656 </tr> | |
657 | |
658 </table> | |
659 </font> | |
660 | 453 |
661 <li class="slide"> | 454 <li class="slide"> |
662 <h1>OpenGL との比較</h1> | 455 <h1>OpenGL との比較</h1> |
663 学生実験で作成された シューティングゲーム「SuperDandy」 を例題に OpenGL と比較。OpenGL は PPE 1基のみを使用。Cerium は | 456 学生実験で作成された シューティングゲーム「SuperDandy」 を例題に OpenGL と比較。OpenGL は PPE 1基のみを使用。Cerium は |
664 SPE6基+PPE1基を使用した。 | 457 SPE6基+PPE1基を使用した。 |
693 <li>自動的な依存関係の解決</li> | 486 <li>自動的な依存関係の解決</li> |
694 <ul> | 487 <ul> |
695 <li>扱うデータから Task の依存関係がわかる</li> | 488 <li>扱うデータから Task の依存関係がわかる</li> |
696 <li>ユーザが複雑な依存関係を設定しない</li> | 489 <li>ユーザが複雑な依存関係を設定しない</li> |
697 </ul> | 490 </ul> |
698 <li>プログラムとデータの On demand Load</li> | 491 <li>DataSegment</li> |
699 <ul> | 492 <ul> |
700 <li>プログラムコードはすべて LS に置いている</li> | 493 <li>プログラムコードはすべて LS に置いている</li> |
701 <li>LS の容量を圧迫しプログラムが動作しなくなる</li> | 494 <li>LS の容量を圧迫しプログラムが動作しなくなる</li> |
702 <li>すべてのデータを扱う包括的なデータ構造が必要</li> | 495 <li>すべてのデータを扱う包括的なデータ構造が必要</li> |
703 </ul> | 496 </ul> |