Fine grain Task Manager Cerium のチューニング
108574D 金城裕
指導教官:河野真治
琉球大学大学院理工学研究科情報工学専攻並列信頼研
研究目的 と 背景
現在 Cell/PS3またはMac OS X上で動作するOpen CL 的なFine Grain Task Manager である Cerium Task Manager を開発中である。
-
ソフトウェアレンダリングエンジンとWord countを例題として、Task Manager の実装時の問題を洗い出している。
- メインメモリ上の Task を各 Core が受け取る際や、その終了を通知する際に待ち時間が生じる。
本研究ではその待ち時間を削減するTask arrayを提案し実装した。その効果について報告する
発表の流れ
- Cellとは
- Ceriumとは
- CeriumにおけるTask
- TaskArray
- WordCountのTaskArray化
- レンダリングエンジンのTaskArray化
- 結果
- まとめ
Cellとは
Cell(Cell Broadband Engine)とはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ
Cellは1基の制御系のプロセッサコア
PPEと、8基の演算系プロセッサコア
SPE
で構成される(Ceriumで扱えるSPEの数は6基)。
Ceriumとは
Ceriumとは、当研究室で開発したPS3/Cell、Mac OS X、Linux 上で動作するゲームフレームワーク。
以下の3つの要素から構成されている。
- TaskManager
- レンダリングエンジン
- SceneGraph
Ceriumとは
Ceriumとは、当研究室で開発したPS3/Cell、Mac OS X、Linux 上で動作するゲームフレームワーク。
以下の3つの要素から構成されている。
- TaskManager
- レンダリングエンジン
- SceneGraph
TaskManager
- TaskManagerは、Taskと呼ばれる、分割された各プログラムを管理する
- Task同士の依存関係を考慮
- 実行可能になったTaskをSPEに渡す
CeriumにおけるTask
TaskはTaskManagerを使って生成する。Taskを生成する際に以下のような要素が
設定可能である。
- Input data
- Output data
- Paramater
- CPU type
- Dependency
CeriumにおけるTask
Input data
- Input data にはTaskの処理対象データのアドレスとサイズを指定する。
- SPE側でそのアドレスをもとにDMA転送を用いて実際のデータをメインメモリから取得する。
CeriumにおけるTask
Output data
- Onput data にはTaskが処理したデータの書き出し先アドレスとサイズを指定する。
- SPE側でそのアドレスをもとにDMA転送を用いて実際のデータをメインメモリに書き出す。
CeriumにおけるTask
Paramater
- Input data とは別にデータを与えたい場合に使用する。
- 32bitの値を指定する。
CPU type
- TaskがどのCoreで実行されるかを指定する。
- PPEもしくは、6基のSPEのいづれかを選択できる。
CeriumにおけるTask
Dependency
- Dependencyは他のTaskとの依存関係を示す。
- 例えばTaskAがTaskBの実行完了を待つ例を紹介する。
CeriumにおけるTask
Dependency
- はじめTaskBは待つTaskがないので、すぐにActiveQueueに入る。
- TaskAはTaskBを待つのでWaitQueueに入る。
CeriumにおけるTask
Dependency
- ActiveQueueにあるTaskBはSPEに送られ実行される。
- TaskAはWaitQueueでTaskBを待つ。
CeriumにおけるTask
Dependency
- TaskBが完了するとMailで通知される。
- TaskAは待つTaskがなくなるので、ActiveQueueに移る。
CeriumにおけるTask
Dependency
- TaskBが完了するとMailで通知される。
- TaskAは待つTaskがなくなるので、ActiveQueueに移る。
Taskの送信
- Taskは1つ毎にSPEには送らない
- いくつかのTaskをまとめTaskListとして送る
- TaskListをすべて完了すると、SPEからPPEにMail通知が送られる
- PPE側がMailをチェックし次のTaskListを通知する
Mail通知
- SPEからPPEへのMail送信ボックスはキューになっている
- キューのサイズは1
- 書き込む際にキューがいっぱいの場合はPPEから呼び出されるまで待つ
- PPEからのMail呼び出しがないと、SPEは待ち続ける
TaskArray
SPEの待ちを解消するためにTaskArrayを提案、実装した
- TaskArrayは複数のTaskを1つにまとめることができる
- Task毎のMail通知がTaskArray毎のMail通知になる
TaskArray
期待される効果
- Mailの数が減り、SPEのMail待ちのタイミングが減る
- Mail待ちが減るので、SPEの稼働率が向上する
- また、PPE側のMailチェックの時間も減る
- 結果、処理速度が向上する
TaskArray
WordCountのTaskと、レンダリングエンジンのTaskの一部をTaskArray化した。
その結果を報告する
それぞれのTask内容
- WordCount
- WordCountTask(TaskArray化)
- PrintTask
- レンダリングエンジン
- CreatePolygonTask
- CreateSpanTask
- DrawSpanTask(TaskArray化)
WordCount
- wcするfileをマッピングし、Taskに割り振る
- WordCountTaskの終了をまって、PrintTaskが実行される
WordCount
- TaskArrayのサイズは64
- WC対象は166Mのテキスト
- TaskArrayの適応の有無を比較
WordCount
- time : 実行時間
- dma wait : dma転送待ちの割合
- time wait : mail待ちの割合
|
Task |
TaskArray |
time |
2.184s |
2.109s |
dma wait |
18% |
12% |
mail wait |
5% |
8% |
WordCount
- あまり効果は見られなかった
- PPE側のTaskがないので、あまりmail待ちが入らない
- ファイルのサイズが大きいのでメモリアクセスで時間がかかる
|
Task |
TaskArray |
time |
2.184s |
2.109s |
dma wait |
18% |
12% |
mail wait |
5% |
8% |
WordCount
改善策
- 一度にファイルマッピングをしない
- 何度かに分けてマッピングする
- 同じ領域を切り替えて使う
- スワップを減らし、アクセス時間を短縮する
- dma wait の割合が減る
レンダリングエンジン
構成Task
- CreatePolygonTask
- CreateSpanTask
- DrawSpanTask(TaskArray化)
DrawSpanTask : Taskの数が多いDrawSpanTaskをTaskArray化した。地球と月を表示する
例題を対象に計測した。
レンダリングエンジン
|
Task |
TaskArray |
FPS |
3.94 |
4.32 |
dma wait |
0.06% |
0.07% |
mail wait |
55% |
42% |
- mail wait 割合が減った
- レンダリングエンジンの場合、PPE側で実行するTaskがあるので、
mailチェックが遅れ気味
まとめ
- 複数のTaskをまとめるTaskArrayを提案、実装した。
- PPE側が忙しく、mailチェックが遅れる場合に効果的
- PPE側にTaskがない場合は、mailチェックは間に合う
- WordCountはdma転送がネックになっている
- マッピングの方法、Taskのスケジューリングを工夫して、dma転送時間を削減できる