PS2のDSPプログラムを記述する言語に関する研究

氏名:佐渡山 陽
学籍番号:985727D
指導教官:河野 真治
メールアドレス:
j98027@ie.u-ryukyu.ac.jp
contents


1 研究課題

Sonyの家庭用ゲームマシンであるPS2は、 EEと呼ばれる 300MHzのMIPS Core, 2つのVUと呼ばれるDSPなどから構成される 密結合並列計算器である。 高度な演算処理能力を有するPS2だが、 その能力を生かすためのプログラミングが難しい。 その要因の一つとなっているのが、VU(ベクターユニット)である。

CからVUへのコンパイラは存在するが、高度なパイプライン構成と、 水平マイクロプログラムに似た並列実行機能を持つVUの能力を フルに発揮することは出来ない。

しかし、VU独自のアセンブラを直接プログラムすることは、 非常に難しく、記述性も低い。

そこで、本研究室で開発中のCの下位言語であるCbC(Continuation based C)を用いて、記述性とVUの能力表現を両立させる手法に付いての 研究を行う。


2 CbCとは

CbCとは、状態遷移単位での処理の記述を行う言語である。

インタフェースと呼ばれる構造体に、状態遷移を管理するための情報を格納し、 codeというCbCの実行単位(状態遷移)へ引き渡す。 codeでは、引き渡されたインタフェースをもとに現在の状態を判定し、 それに伴う処理を行う。 処理後、状態に変化があれば、それをインタフェースへと反映させてから、 次のcodeへと引き渡す。

つまり、code(状態遷移)の集まりと、 状態を表すインタフェースからなる記述法が、CbCである。


3 VUとは

VU(ベクターユニット)とは、PS2のメインプロセッサであるEEを構成する ユニットの一つである、VPUのコアとなる部分の事である。 VUは、EEのメインCPU(EE Core)とは独立して動作するベクトル演算専用のユニットで、 そのためのプログラムメモリとデータメモリを内部に持っている。 VUをいかに効率的に使うかが、EEの能力を最大限に引き出すポイントである。 (VUの詳細解説)


4 CbCとVUの関係

4.1 CbC によるシミュレーション実行

VUのプログラムをCbCによって記述する事により、 プログラム実行時のVUの動作を状態遷移単位でシミュレーション出来る。

また、CbCによるシミュレーションは、かならずしもPS2上で行う必要が無い。 ハイスペックなPC上でシミュレーションを行えば、 そのスペックの分の能力を発揮出来る。 更に、C言語と互換性を持っているため、デバッグが容易である。

4.2 CbC からVUへのコンパイル

CbCのステイトメントは、VUの命令を更に細かく分解した表現と言える。 つまり、CbCで記述したVUのアセンブラをコンパイルする事により、 Cをアセンブラにコンパイルした場合や、アセンブラで直接プログラミングを 行った場合よりも、更に高度な最適化を行う事が出来る。


5 VUプログラミングにおけるCbCの利点

5.1 C言語との互換性

CbCによるVUプログラムの記述は、 プログラマーの視点から見るとC言語に近い形式であり、 アセンブラでプログラミングを行うよりも断然容易である。

5.2 レジスタへのデータ展開

CbCは、インタフェースを通して、飛び先へ状態を伝える。 そして、そのインタフェースの値は、全てレジスタに展開される。 一方、VUにおける演算処理でも、使用するデータを 全てメモリからレジスタに格納してから行う。 という事は、VUとCbCのレジスタに関する仕様が一致しており都合が良い。

5.3 最適化への貢献

CbCのソースは、見た目はC言語に近いが、 Cよりも低レベルで、実際の最適化はアセンブラレベルに近い所で行われる。 通常、C等に代表される高等言語上での最適化より、 アセンブラレベルでの最適化を行った方が、より大きな効果を得られる。 つまり、CbCを使用したVUプログラミングでは、 高等言語的な人が理解し易いプログラミング形式でありながら、 アセンブラレベルでの最適化が得られる、という成果を期待出来る。


6 CbC記述の実例

ここで、アセンブラをCbCで書くとどうなるのか、実例を示す。 ある処理を行うプログラムを、C・アセンブラ・CbC、 それぞれについてを記述した。

■プログラムソース


7 これから

CbCで記述されたプログラムからVUのアセンブラを出力するコンパイラを 実際に作成する。


参考文献


Contents

1 研究課題

2 CbCとは

3 VUとは

3 CbCとVUの関係/h3>

4.1 CbC によるシミュレーション実行

4.2 CbC からVUへのコンパイル

5 VUプログラミングにおけるCbCの利点

5.1 C言語との互換性

5.2 レジスタへのデータ展開

5.3 最適化への貢献

6 CbC記述の実例

7 これから

参考文献