view handout/handout.tex @ 22:860456c67c8d

Initial revision
author akira
date Wed, 20 Feb 2008 13:57:28 +0900
parents
children 7b2e873965d2
line wrap: on
line source

%これはちょっとマジで書きかけたものです.
%気にしないで,使ってください.
%minru

\documentclass[twocolumn, a4j, twoside]{jarticle}
\usepackage{master_proc}
\usepackage[dvipdfm]{graphicx}

% dvipdfm を使って PDF ファイルに日本語の栞をつける
% \usepackage[dvipdfm]{color}
% \usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,%
% bookmarkstype=toc]{hyperref}

\jtitle{Cellを用いたゲームフレームワークの提案}		%和文タイトル
\etitle{An implementation of Game Framework on Cell Broadband Engine}	%英文タイトル
\author{神里 晃}	%著者名
\studentid{068504G}	%学籍番号
\teacher{河野 真治}	%指導教官

\begin{document}
  \maketitle
  \section{はじめに}
我々は家庭用ゲーム機向けのゲームプログラムのオープンな開発フレームワークの研究を行ってきた。家庭用ゲーム機の多くは特殊なアーキテクチャであり、アーキテクチャに即したプログラミングが求められる。そのようなプログラミングスタイルは学生実験で使用すると、経験的にアーキテクチャの理解に実験の時間の約2/3をとられてしまう。そこで我々はPS3Linux上でのゲームプログラミングのために新たなフレームワークを提案する。
本研究ではMesaのフレームバッファ用のドライバであるOSMesaの問題点をあげ、Cellに最適なレンダリングエンジンを提案し、評価する。
\section{マルチコアアーキテクチャ}
マルチコアアーキテクチャとしてIntelが開発している次世代CPUとしてTkwsila、SunのUltra Sparc T2などが挙げられる。これらのマルチコアでは単純にプログラムを記述し、動かすだけではCPUの性能を生かすことができない。マルチコアの種類や並列化を考慮しいたアルゴリズムが求められる。


\section{Cellの構造}
\begin{figure}[htb]
\begin{center}
\includegraphics[width=7cm,height=4cm]{./fig/cell.eps}
\end{center}
\caption{Cellの構成図}
\label{fig:cell}
\end{figure}
Cellは一つのPowerProcessorUnit(PPU)と呼ばれる制御コアとPPUからアクセスすることができるメインメモリ、六つのデータ処理演算コアSynergistic Processor Unit(SPU)からこうせいされており、これらはElement Interface Busと呼ばれる非常に高速なリングバスで接続されている。
\begin{figure}[htb]
\begin{center}
\includegraphics[width=7cm,height=4cm]{./fig/Mailbox.eps}
\end{center}
\caption{SPEの構造}
\label{fig:spe}
\end{figure}
SPEはSynergisitic Processor Unit(SPU)とMemory Flow Controller(MFC)から構成される。各SPUは256kbのLocal Store(LS)と呼ばれるメモリを持ち、各SPUから参照できる唯一のメモリとして存在する。MFCはメインメモリや他のSPEなどとデータをやりとりするためのユニットで、チャネルというインターフェースを介してMFCに対してデータ転送などを依頼し、それぞれのSPUが持つLSにメインメモリ上のデータなどを転送を行う。
Mailboxは32ビットキューを保持しており、SPU⇔PPU間でdデータのやり取りを行い、イアkのような使い方ができる。\\
\begin{enumerate}
\item PPUがSPUへ実行すべきタスクを教える
\item SPUがPPUへタスクが終了したことを教える
\item SPUがPPUへ委託したい処理を教える
\end{enumerate}
DMA転送はSPU⇔PPU間のデータをやり取りするために使われま、メインメモリに直接アクセスすることができないため、SPUで使うデータ(タスク、入力、出力、プログラム)はすべてDMAで行う必要がある。
\section{OSMesa}
PS3では以前我々が扱っていたPS2Linuxと違ってGDPに直接アクセスすることができない。しかし、フレームバッファは扱うことができる。そこで我々はMesaのフレームバッファ用ドライバであるOSMesaを用いて、移植開発を行った。しかし、PPUのみで動作するOSMesaとSDLを用いて我々が独自に作ったゲームSuper Dandy(s-dandy)は約10FPSしかでず、そのスピードは不十分である。そこでOSMesaの一部の機能をSPUを使用して高速化を行った。
OSMesaはSPANとZバッファを持っている。SPANとはポリゴンと呼ばれる三角形の頂点からY座標毎に抜き出した1ラインのデータ構造である。(図\ref{fig:span}の左のポリゴンの線の部分)Zバッファとは図\ref{fig:span}のようにポリゴンが重なったとき、zの値が描画されているポリゴンのzと比較し、カメラからみて手前にあるのかおくにあるのかを判断するときに用いられるzのメモリ領域である。
\begin{figure}[htb]
\begin{center}
\includegraphics[width=7cm,height=4cm]{./fig/span.eps}
\end{center}
\caption{SPANとZバッファ}
\label{fig:span}
\end{figure}
高速化はSPAN情報からZバッファをみながら描画されるRGB情報を生成する部分を行った。生成されたSPANをY座標を64毎に区切り、さらにそれをY毎に区切った。実際にSPUが受け取るのはY座標毎のSPANのリストである。そうすることで、SPUは1ライン分のZバッファとRGBを書き込むメモリ領域だけを保持すればよい。1ライン分の計算を行った後はメインメモリにマップされたフレームバッファにDMAでかきこむことができる。今回の並列化ではZバッファとRGB情報の分割が肝である。
表\ref{table:exectime}はPPUのみの速度と今回のSPUを用いて並列化を行った速度を示す。
\begin{table}[htb]
\begin{center}
\begin{tabular}{|c|c|}
\hline
SDL1.2+OSMesa6.5.2 & 18FPS \\ \hline
SDL1.2+OSMesa6.5.2 with SPU & 24FPS \\ \hline
SDL1.2.13+OSMesa7.0.2 with SPU & 43FPS \\ \hline
\end{tabular}
\end{center}
\caption{実行速度}
\label{table:exectime}
\end{table}
\section{我々が提案するレンダリングエンジン}
我々はOSMesaが分割しにくいことやコピーが多いことなどの理由から独自のレンダリングエンジンCeirumを持つことにした。Ceriumはシーングラフ、レンダリングエンジン、タスクマネージャから構成される。 

シーングラフはゲームの中の一場面を構成するオブジェクトやその振る舞い、ゲームのルールの集合である。我々はBlender3Dモデリングツールから生成するスクリプトを持っている。三角形の頂点ポリゴンやテクスチャの相対比、エンコードされたテクスチャ情報があるxmlをパースし、親子関係などを構築したうえで、回転や拡大・縮小などの演算を行い、演算結果をレンダリングエンジンに渡すことがシーングラフの主な役目となる。

レンダリングエンジンはシーングラフによって生成されたポリゴンからSPANを生成することとSPANにマッピングされるテクスチャを計算し、フレームバッファに描画する部分とに分けることができる。
SPUでのテクスチャのマッピング処理はテクスチャを分割しておく必要がある。大きなサイズのテクスチャをもってくると、LSに入りきらない。そこで、テクスチャはPPUで8ピクセルx8ピクセルに分割しておく。それに伴い、Y座標別に生成してきたSPANもテクスチャにそうように細かく分割する。そうすることにより、SPANが必要とする分だけ8ピクセルx8ピクセルのテクスチャがSPUにロードされるだけで済む。

タスクマネージャはPPU上と各SPU上で動作し、関数毎に分割された実行プログラムを異存関係を考慮しながらそれぞれのコアで実行させる。PPU上ではタスクと呼ばれる分割された各プログラムをメモリ上にマッピングし、SPUではそのプログラムをDMAによりろーどする。
\section{比較}
他のシーングラフとCeriumのシーングラフの比較を行う。Java 3DはXML形式のシーングラフやオブジェクトやトランスフォーメーションなどの機能を持っている。VRMLはヘッダ、コメント、ノードから形成された、ポリゴンやテクスチャを指定することができ、直接編集することが可能なXML形式でないシーングラフである。libps2はps2linux用のライブラリでPS2のGPUと128ビットのレジスタのVector Unitが搭載されたEmotion Engineを用いたライブラリ群になっている。XMLシーングラフを持っている。これらのシーングラフと比較してCeriumで実装されているシーングラフは比較的シンプルな構造を持っており、テクスチャの埋め込みが可能なのでネットワーク上の転送が容易であるといえる。また、Blenderの親子関係をそのまま反映しているシーングラフである。
\section{まとめと課題}
Cellを用いてOSMesaのSPANから描画の部分を並列化させて評価した。
Cellを用いたゲームフレームワークとしてシーングラフとレンダリングエンジン、タスクマネージャから構成されるCeriumを提案した。Ceriumができることにより、PS3Linux上でのゲームはblenderから3Dモデルのシーングラフを作成し、シーングラフ上のオブジェクトの動作を設計・実装することで、PS3Linuxの6個のSPU上でゲームプログラムと3Dレンダリングを行い、高速なHi-vision表示が可能となり、ゲーム班はアーキテクチャを考慮しながらゲーム作成を行うことができるようになる。

今後の課題としてCell版の完成、SPUで行うテクスチャのロードの実装、SPU用のSIMD命令の使用、Alpha blending、Z sort、カメラの移動などがあげられる。

{\small
  \begin{thebibliography}{9}
\bibitem{globalid}John D.Owens,William J. Dally ,Ujval J. Kapasi, Scott Rixner,Peter Mattson, Ben Mowery. EuroGraphics/SIGGRAPH workshop,2000
  \end{thebibliography}
}

\end{document}