# HG changeset patch # User aaa # Date 1256800199 -32400 # Node ID 224fa99e11d0830957fd3157a0b5c37388dea54f # Parent b365717191e463b4e32cbf554bcca75987c35bf3 fix diff -r b365717191e4 -r 224fa99e11d0 resume/A-6-1-065746.tex --- a/resume/A-6-1-065746.tex Thu Oct 29 15:17:07 2009 +0900 +++ b/resume/A-6-1-065746.tex Thu Oct 29 16:09:59 2009 +0900 @@ -1,1 +1,1 @@ -\documentclass[twocolumn,twoside,9.5pt]{jarticle} % \usepackage[dvips]{graphicx} \usepackage[dvipdfm]{graphicx} \usepackage{fancyhdr,picins} \pagestyle{fancy} \lhead{\parpic{ \includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.pdf}} 琉球大学主催 工学部情報工学科 卒業研究発表会} \rhead{} \cfoot{} \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}} \setlength{\headheight}{0mm} \setlength{\headsep}{5mm} \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}} \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}} \setlength{\textwidth}{181mm} \setlength{\textheight}{261mm} \setlength{\footskip}{0mm} \pagestyle{empty} \begin{document} \title{SceneGraph を用いた\\マルチコア CPU 向けゲームの処理} \author{065746J 仲宗根広樹 指導教員 : 河野真治} \date{\today} \maketitle \thispagestyle{fancy} \section{SceneGraph を使ったゲーム作成} SceneGraph の処理を SPE を用いて処理させて SPE を常に busy 状態にすることを目標とする。 SceneGraph とはゲーム中の1つの場面(Scene) を構成するオブジェクトやその振る舞い、ゲームのルールの集合のことである。SceneGraph のノードは親子関係を持つ tree で構成される(図\ref{fig:SceneGraph})。 SceneGraph ノード は以下のようなデータと動作を持つ。 \begin{itemize} \item データ \begin{enumerate} \item Vertex :ポリゴンオブジェクトの頂点座標 \item Texture:ポリゴンオブジェクトのテクスチャ座標 \item TextureImage:テクスチャイメージ \item TransMatrix :ポリゴンオブジェクトの変換行列 \item Coordinates :オブジェクトの座標 \item Angle:オブジェクトの角度 \end{enumerate} \item 動作 \begin{enumerate} \item Move:自律的なオブジェクトの動き \item Collision:他のノードとの衝突判定をする \end{enumerate} \end{itemize} 現在はゲームの main loop (PPE) で SceneGraph ノードのリストを辿り、シーケンシャルに Move, Collision を実行している。 Move, Collision はノードの数だけ実行されるので、ゲームの規模が大きくなればそれに比例して増大する。制御系プロセッサ PPE に膨大な量の演算をさせるのは好ましくない。 そこで、Move, Collision の処理を6基の SPE に割り振り並列に実行させる。 \begin{figure}[htb] \begin{center} \includegraphics[scale=0.4]{image/SceneGraph.pdf} \caption{SceneGraph} \label{fig:SceneGraph} \end{center} \end{figure} %Cerium の並列度の向上を計り、プレイヤーが満足できるゲームの処理速度を実現させる。 %家庭用ゲーム機 PlayStation 3 には Cell というヘテロジニアスマルチコアプロセッサが搭載されている。 %当研究室では Cell 上でゲームプログラミングができる Cell Task Manager Cerium を開発した。 %Cerium は TaskManager, SceneGraph, Rendering Engine の3つの機能に分けられる。 %Cerium の並列度の向上を計り、プレイヤーが満足できる処理速度を実現させる %当研究室では家庭用ゲーム機 PlayStation 3 上でゲームプログラミングができる Cell Task Manager Cerium を開発した。 %現在、PlayStation 3 の GPU にアクセスする API は公開されていないため Cerium は独自に Rendering Engine を持っている。 %Cerium は TaskManager, Rendering, SceneGraph の三つで構成されている。 \section{Cell Broadband Engine} \label{sec:cell} Cell\cite{cell} は1基の PowerPC Processor Element (PPE) と8基の Synergistic Processor Element (SPE) で構成されるヘテロジニアスマルチコアプロセッサである。各プロセッサは高速バスで接続されている。本研究では6基の SPE が使用可能となっている。 PPE は汎用プロセッサでありオペレーティングシステムやアプリケーションの実行、SPE を制御する役割を持っている。SPE は演算を繰り返すマルチメディア系の処理を得意とする演算系プロセッサである。SPE は 演算処理を行う SPU、256 KByte の Local Store、メインメモリや他の SPE とデータをやり取りする Memory Flow Controller の3つで構成されている。 \section{Cerium} Cerium とは当研究室で開発した Cell 上で動作するゲームフレームワークである。 Cerium は SceneGraph、OSMesa に代表される Rendering Engine、そしてそれらの実行単位を Task とし、動的に全てのコアが動作する様な割り振りを行うカーネル TaskManager で構成されている。 %ゲーム内で使用するオブジェクトは Cerium 独自の xml 形式で書かれており、xml ファイルを読込んで SceneGraph を生成する。 %Rendering に関しては処理を Task 単位に分割して SPE に投入して処理しているが、SceneGraph の処理は PPE 1つで行っている。 %SceneGraph の move, collision の処理は PPE で行っている。しかし PPE に単純な演算の繰り返しをさせるのは好ましくない。 %そこで、SceneGraph の処理も Task に分割して SPE に投入し、Rendering と並行に走らせる事で処理速度の向上を計る。 \section{SPE を用いた SceneGraph の処理} SPE を用いた SceneGraph の処理の例題として、学生実験で作成されたゲーム vacuum を使用する。 vacuum には自機と吸収ブロック、敵ブロックの3種類のオブジェクトがあり、自機を上下左右に移動させ、ボタンを押している間は自機の周りのブロックを引き寄せ、うまく吸収ブロックだけを自機と衝突させるゲームである。 vaccum の Collision は自機と吸収ブロック(Collision A)、自機と敵ブロック(Collision B)の二つがある。 Collision の種類毎に SPE で動作する Collision Task を作成する。Collision A Task は自機のノードと吸収ブロックのノードを渡す。Collision B Task には自機のノードと敵ブロックのノードを渡す。 しかし、SceneGraph ノードにはポリゴンを形成するための点やテクスチャの座標等が含まれている。これらの情報を全て SPE に送ると Local Store に入りきらないので、Move、Collision に必要な Coordinates, Angle, 親子関係の情報、生成消滅の情報を持つ Property の配列を作成する。Property は例題毎に用意して適宜要素を変更する。 Property は各ノードと1対1で対応している。SceneGraph の処理と Rendering を並行に実行するため Property の配列と SceneGraph の tree は2つ用意する。 \if0 \begin{figure}[htb] \begin{center} \includegraphics[scale=0.43]{image/pipe.pdf} \caption{SceneGraph と Rendering の並列処理} \label{fig:pipe} \end{center} \end{figure} \fi \begin{figure}[htb] \begin{center} \includegraphics[scale=0.43]{image/sgToSPE.pdf} \caption{Move, Collision を各 SPE に渡す} \label{fig:sgToSPE} \end{center} \end{figure} \if0 \begin{figure}[htb] \begin{center} \includegraphics[scale=0.4]{image/SceneGraphTask.pdf} \caption{各 SPE に投入する SceneGraphTask} \label{fig:SceneGraphTask} \end{center} \end{figure} \fi SPE には Property の配列を渡して move, collision の処理を行わせ、PPE 側では返されてきた Property の情報を元に SceneGraph 生成し Tree を再構成して Rendering に渡す。図\ref{fig:SceneGraphTask} SceneGraph と Rendering を並行に実行するために、Property と SceneGraph のバッファは二つ用意しておき、一方は Rendering に、一方は SceneGraph の処理に使う。 Change では Move Collision と Rendering の処理を待ち合わせて同期をとり、バッファの入れ替えを行っている。図 \section{まとめと今後の課題} \begin{itemize} \item 現在は SPE 1基で SceneGraph を処理する例題の作成途中なので、複数 SPE に均等に処理を割り振る例題の作成。 \item Property から SceneGraph を生成し tree を構築する部分において、SceneGraph の新規生成と削除を考慮した設計を行う。 \item xml から作成された SceneGraph はオリジナルとして配列に順次格納されている。現在は SceneGraph を create する場合はオリジナルの配列をリニアサーチしてきた物をコピーしている。このオリジナルの配列を Texture を管理している hash テーブルを用いてまとめて管理できるようにする。 \end{itemize} \thispagestyle{fancy} \begin{thebibliography}{9} \bibitem{cell}Sony Corporation. Cell BroadbandEngine \texttrademark アーキテクチャ, 2006 \bibitem{cerium} SourceForge.JP: Cerium Rendering Engine \verb|https//sourceforge.jp/projects/cerium/| \bibitem{wataru} Wataru MIYAGUNI. Cell 用の Fine-Grain Task Manager の実装, 2009 \end{thebibliography} \end{document} \ No newline at end of file +\documentclass[twocolumn,twoside,9.5pt]{jarticle} % \usepackage[dvips]{graphicx} \usepackage[dvipdfm]{graphicx} \usepackage{fancyhdr,picins} \pagestyle{fancy} \lhead{\parpic{ \includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.pdf}} 琉球大学主催 工学部情報工学科 卒業研究発表会} \rhead{} \cfoot{} \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}} \setlength{\headheight}{0mm} \setlength{\headsep}{5mm} \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}} \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}} \setlength{\textwidth}{181mm} \setlength{\textheight}{261mm} \setlength{\footskip}{0mm} \pagestyle{empty} \begin{document} \title{SceneGraph を用いた\\マルチコア CPU 向けゲームの処理} \author{065746J 仲宗根広樹 指導教員 : 河野真治} \date{\today} \maketitle \thispagestyle{fancy} \section{概要} ゲームプログラミングにおける並列処理は、データが処理される順番を把握することができないので出力結果などが特定しづらく、デバッグが困難である。データ転送やタスクの生成、管理等のこれまで学んだことのない技術が多く存在する。短期間の学生実験では新しい技術を習得することに時間を割かれ、ゲームの完成度を上げることが難しくなる。 本研究では、PlayStation3 上でゲームプログラミングを行う際に、Cell の性能を活かしながら、アーキテクチャに依存する記述を排除した、汎用的な並列プログラミングを目的としている 。 \section{SceneGraph を使ったゲーム作成} SceneGraph とはゲーム中の1つの場面(Scene) を構成するオブジェクトやその振る舞い、ゲームのルールの集合のことである。SceneGraph のノードは親子関係を持つ tree で構成される(図\ref{fig:SceneGraph})。 SceneGraph ノード は以下のようなデータと動作を持つ。 \begin{itemize} \item データ \begin{enumerate} \item Vertex :ポリゴンオブジェクトの頂点座標 \item Texture:ポリゴンオブジェクトのテクスチャ座標 \item TextureImage:テクスチャイメージ \item TransMatrix :ポリゴンオブジェクトの変換行列 \item Coordinates :オブジェクトの座標 \item Angle:オブジェクトの角度 \end{enumerate} \item 動作 \begin{enumerate} \item Move:自律的なオブジェクトの動き \item Collision:他のノードとの衝突判定をする \end{enumerate} \end{itemize} %現在はゲームの main loop (PPE) で SceneGraph ノードのリストを辿り、シーケンシャルに Move, Collision を実行している。 ゲームは各ノードの Move, Collision を実行して SceneGraph の描画を繰り返す事で進行する。 %Move, Collision はノードの数だけ実行されるので、ゲームの規模が大きくなればそれに比例して増大する。制御系プロセッサ PPE に膨大な量の演算をさせるのは好ましくない。 %本研究では Move, Collision の処理を複数のコアを用いて処理させて全てのコアが常に busy 状態になることを目標とする。 \begin{figure}[htb] \begin{center} \includegraphics[scale=0.4]{image/SceneGraph.pdf} \caption{SceneGraph} \label{fig:SceneGraph} \end{center} \end{figure} %Cerium の並列度の向上を計り、プレイヤーが満足できるゲームの処理速度を実現させる。 %家庭用ゲーム機 PlayStation 3 には Cell というヘテロジニアスマルチコアプロセッサが搭載されている。 %当研究室では Cell 上でゲームプログラミングができる Cell Task Manager Cerium を開発した。 %Cerium は TaskManager, SceneGraph, Rendering Engine の3つの機能に分けられる。 %Cerium の並列度の向上を計り、プレイヤーが満足できる処理速度を実現させる %当研究室では家庭用ゲーム機 PlayStation 3 上でゲームプログラミングができる Cell Task Manager Cerium を開発した。 %現在、PlayStation 3 の GPU にアクセスする API は公開されていないため Cerium は独自に Rendering Engine を持っている。 %Cerium は TaskManager, Rendering, SceneGraph の三つで構成されている。 \section{Cell Broadband Engine} \label{sec:cell} Cell\cite{cell} は1基の PowerPC Processor Element (PPE) と8基の Synergistic Processor Element (SPE) で構成されるヘテロジニアスマルチコアプロセッサである。各プロセッサは高速バスで接続されている。本研究では6基の SPE が使用可能となっている。 PPE は汎用プロセッサでありオペレーティングシステムやアプリケーションの実行、SPE を制御する役割を持っている。SPE は演算を繰り返すマルチメディア系の処理を得意とする演算系プロセッサである。SPE は 演算処理を行う SPU、256 KByte の Local Store、メインメモリや他の SPE とデータをやり取りする Memory Flow Controller の3つで構成されている。 \section{Cerium} Cerium とは当研究室で開発した Cell 上で動作するゲームフレームワークである。 Cerium は SceneGraph、OSMesa に代表される Rendering Engine、そしてそれらの実行単位を Task とし、動的に全てのコアが動作する様な割り振りを行うカーネル TaskManager で構成されている。 %ゲーム内で使用するオブジェクトは Cerium 独自の xml 形式で書かれており、xml ファイルを読込んで SceneGraph を生成する。 %Rendering に関しては処理を Task 単位に分割して SPE に投入して処理しているが、SceneGraph の処理は PPE 1つで行っている。 %SceneGraph の move, collision の処理は PPE で行っている。しかし PPE に単純な演算の繰り返しをさせるのは好ましくない。 %そこで、SceneGraph の処理も Task に分割して SPE に投入し、Rendering と並行に走らせる事で処理速度の向上を計る。 \section{SceneGraph の並列処理} \subsection{vacuum} 6基の SPE を用いたSceneGraph の処理の例題として、学生実験で作成されたゲーム vacuum を使用する。 vacuum には自機と吸収ブロック、敵ブロックの3種類のオブジェクトがあり、自機を上下左右に移動させ、ボタンを押している間は自機の周りのブロックを引き寄せ、うまく吸収ブロックだけを自機と衝突させるゲームである。 \subsection{Move} vacuum のオブジェクトは全て独立して動くので \subsection{Collision} vaccum の Collision は自機と吸収ブロック(Collision A)、自機と敵ブロック(Collision B)の二つがある。 Collision の種類毎に SPE で動作する Collision Task を作成する。Collision A Task は自機のノードと吸収ブロックのノードを渡す。Collision B Task には自機のノードと敵ブロックのノードを渡す。 しかし、SceneGraph ノードにはポリゴンを形成するための点やテクスチャの座標等が含まれている。これらの情報を全て SPE に送ると Local Store に入りきらないので、Move、Collision に必要な Coordinates, Angle, 親子関係の情報、生成消滅の情報を持つ Property の配列を作成する。Property は例題毎に用意して適宜要素を変更する。 Property は各ノードと1対1で対応している。SceneGraph の処理と Rendering を並行に実行するため Property の配列と SceneGraph の tree は2つ用意する。 \if0 \begin{figure}[htb] \begin{center} \includegraphics[scale=0.43]{image/pipe.pdf} \caption{SceneGraph と Rendering の並列処理} \label{fig:pipe} \end{center} \end{figure} \fi \begin{figure}[htb] \begin{center} \includegraphics[scale=0.43]{image/sgToSPE.pdf} \caption{Move, Collision Task を各 SPE に渡す} \label{fig:sgToSPE} \end{center} \end{figure} All Move が実行されると \if0 \begin{figure}[htb] \begin{center} \includegraphics[scale=0.4]{image/SceneGraphTask.pdf} \caption{各 SPE に投入する SceneGraphTask} \label{fig:SceneGraphTask} \end{center} \end{figure} \fi SPE は受け取った Property を用いて Move, Collision の処理を行い、Property の値を更新してPPE に返す、PPE 側では返されてきた Property の情報を元に SceneGraph し Tree を再構成して Rendering に渡す。 \section{まとめと今後の課題} \begin{itemize} \item 現在は SPE 1基で SceneGraph を処理する例題の作成途中なので、複数 SPE に均等に処理を割り振る例題の作成。 \item Property から SceneGraph を生成し tree を構築する部分において、SceneGraph の新規生成と削除を考慮した設計を行う。 \item xml から作成された SceneGraph はオリジナルとして配列に順次格納されている。現在は SceneGraph を create する場合はオリジナルの配列をリニアサーチしてきた物をコピーしている。このオリジナルの配列を Texture を管理している hash テーブルを用いてまとめて管理できるようにする。 \end{itemize} \thispagestyle{fancy} \begin{thebibliography}{9} \bibitem{cell}Sony Corporation. Cell BroadbandEngine \texttrademark アーキテクチャ, 2006 \bibitem{cerium} SourceForge.JP: Cerium Rendering Engine \verb|https//sourceforge.jp/projects/cerium/| \bibitem{wataru} Wataru MIYAGUNI. Cell 用の Fine-Grain Task Manager の実装, 2009 \end{thebibliography} \end{document} \ No newline at end of file