changeset 6:1fee918f11e1

3 Texture -> Rendering
author tkaito@nw0534.st.ie.u-ryukyu.ac.jp
date Tue, 24 Feb 2009 23:50:54 +0900
parents a01ad0165bde
children eb4928357210
files resume/A-6-1-055734.aux resume/A-6-1-055734.dvi resume/A-6-1-055734.log resume/A-6-1-055734.pdf resume/A-6-1-055734.tex
diffstat 5 files changed, 12 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/resume/A-6-1-055734.aux	Tue Feb 24 23:00:31 2009 +0900
+++ b/resume/A-6-1-055734.aux	Tue Feb 24 23:50:54 2009 +0900
@@ -1,19 +1,17 @@
 \relax 
 \citation{cell}
 \citation{cerium}
-\citation{blender}
 \@writefile{toc}{\contentsline {section}{\numberline {1}はじめに}{1}}
 \@writefile{toc}{\contentsline {section}{\numberline {2}Cell、SPEの問題点}{1}}
 \newlabel{sec:cell}{{2}{1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Cell の構成要素}}{1}}
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Cerium の構成要素}}{1}}
 \newlabel{fig:cerium}{{1}{1}}
-\@writefile{toc}{\contentsline {section}{\numberline {3}Texture}{1}}
 \citation{wataru}
 \citation{wataru}
 \bibcite{cell}{1}
 \bibcite{cerium}{2}
 \bibcite{wataru}{3}
-\bibcite{blender}{4}
+\@writefile{toc}{\contentsline {section}{\numberline {3}Rendering}{2}}
 \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Texture の分割 (Tile) }}{2}}
 \newlabel{fig:texture_split}{{2}{2}}
 \@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Scale を用いることによる実行速度の比較}}{2}}
Binary file resume/A-6-1-055734.dvi has changed
--- a/resume/A-6-1-055734.log	Tue Feb 24 23:00:31 2009 +0900
+++ b/resume/A-6-1-055734.log	Tue Feb 24 23:50:54 2009 +0900
@@ -1,4 +1,4 @@
-This is pTeX, Version 3.141592-p3.1.10 (utf8.euc) (Web2C 7.5.4) (format=platex-euc 2009.2.10)  24 FEB 2009 23:00
+This is pTeX, Version 3.141592-p3.1.10 (utf8.euc) (Web2C 7.5.4) (format=platex-euc 2009.2.10)  24 FEB 2009 23:49
 **A-6-1-055734
 (./A-6-1-055734.tex
 pLaTeX2e <2006/11/10>+0 (based on LaTeX2e <2003/12/01> patch level 0)
@@ -158,23 +158,23 @@
 ]
 File: image/cerium_rendering_tile.pdf Graphic file (type eps)
  <image/cerium_rendering_tile.pdf>
-Overfull \hbox (3.4588pt too wide) in paragraph at lines 100--101
+Overfull \hbox (3.4588pt too wide) in paragraph at lines 107--108
  [] 
  []
 
 LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <7> on input line 121.
+(Font)              <7> on input line 128.
 LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <5> on input line 121.
+(Font)              <5> on input line 128.
 File: pic/emblem-bitmap.pdf Graphic file (type eps)
 <pic/emblem-bitmap.pdf> [2] (./A-6-1-055734.aux) ) 
 Here is how much of TeX's memory you used:
- 826 strings out of 95542
- 9088 string characters out of 1190860
+ 825 strings out of 95542
+ 9079 string characters out of 1190860
  64165 words of memory out of 1500000
- 4012 multiletter control sequences out of 10000+50000
+ 4011 multiletter control sequences out of 10000+50000
  13256 words of font info for 52 fonts, out of 1200000 for 2000
  14 hyphenation exceptions out of 8191
- 27i,16n,43p,213b,573s stack positions out of 5000i,500n,6000p,200000b,5000s
+ 27i,15n,43p,213b,573s stack positions out of 5000i,500n,6000p,200000b,5000s
 
-Output written on A-6-1-055734.dvi (2 pages, 10392 bytes).
+Output written on A-6-1-055734.dvi (2 pages, 10812 bytes).
Binary file resume/A-6-1-055734.pdf has changed
--- a/resume/A-6-1-055734.tex	Tue Feb 24 23:00:31 2009 +0900
+++ b/resume/A-6-1-055734.tex	Tue Feb 24 23:50:54 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{並列プログラミングを用いた \\\ ゲームフレームワークの設計と実装}
\author{055734A 多賀野海人 指導教員 : 河野真治}
\date{}
\maketitle
\thispagestyle{fancy}

\section{はじめに}
我々はこれまで、PlayStation2,PlayStation3等の家庭用ゲーム機を用いたゲームプログラミングを、
リアルタイムプログラム、ユーザインターフェイスの学生実験の一環として行ってきた。

しかし、Cell を用いる場合、データの転送やタスクの生成等のこれまで学んだことのない技術が多く存在する。
これにより、学生実験の短期間では新しい技術を学ぶことに多くの時間を取られ、ゲームの完成度が向上が困難である。

本研究では、PlayStation3上でゲームプログラミングを行う際に、Cellの性能を活かしながら、
アーキテクチャに依存する記述を排除した、並列プログラミングを目的としている。

\section{Cell、SPEの問題点} \label{sec:cell}
Cell\cite{cell}はメインプロセッサである 1基の PowerPC Processor Element (PPE) 
と8基のデータ処理プロセッサアーキテクチャー Synergistic Processor Element (SPE)
からなる非対称なマルチコアプロセッサであり、高速リングバスで構成されている。

PPE は 複数の SPU をコアプロセッサとして使用することができる汎用プロセッサである。
SPE は、 PPE のような複雑なプログラム制御よりも、計算を単純に繰り返すマルチメディア系の処理を得意とする
演算系プロセッサである。LS (Local Store) という256KBのメモリを持つ。
本研究で用いた PS3Linux では、6個の SPE を制御することができる。

SPE には 256KB しか搭載されていないという問題点がある。これは SPE 内で動作させるコードなども含めて
である。メインメモリからデータを持ってくることも可能だが、SPE が直接メインメモリにアクセスすることはできず、
メインメモリにアクセスするには DMA を用いる。

DMA (Direct Memory Access) 転送とは、CPU を介さずに周辺装置と
メモリとの間でデータ転送ことで、Cell の場合は
メインメモリと LS 間でデータの転送を行う。手順としては以下の様になる。

\begin{enumerate}
  \item SPE プログラムが MFC (Memory Flow Controller) に対して
    DMA 転送命令を発行する。
  \item MFC が DMA Controller を介して DMA 転送を開始。
    この間、SPE プログラムは停止しない。
  \item DMA 転送の終了を待つ場合、SPE プログラム内で転送の完了を待つ。
\end{enumerate}

SPE が直接メインメモリにアクセスできないことと、DMA 転送の待ち時間が
SPE でプログラミングを行う際の大きな問題となる。

% \subsection{Cerium Rendering Engine の提案}

Cell 用いたゲームプログラミングを行うために、我々の研究室では Cerium を用意した。
Cerium\cite{cerium} は、オブジェクトのデータやその振る舞い、
またはゲームのルールなどゲームを構成する場面 (Scene) を木構造で持つ
Scene Graph、OSMesa に代表される Rendering Engine、
そしてそれらの実行単位を Task とし、
動的に全てのコアが動作する様な割り振りを行うカーネル
TaskManager で構成されている。

\begin{figure}[hbp]
  \begin{center}
    \includegraphics[scale=0.5]{image/Cerium.pdf}
    \caption{Cell の構成要素}
    \label{fig:cerium}
  \end{center}
\end{figure}

ゲーム内で使用するオブジェクトの生成は Blender \cite{blender}というフリーの
3D モデリングツールを使用し、Cerium 独自の xml 形式で出力する。

\section{Texture}

SPE を用いて計算を行う場合には、その処理(ソースコード)とデータを SPE の LS に転送して行う。
しかし、SPE の LS は 256KB しかないので、一度に Texture データを転送すると容量を超えてしまう可能性がある。

そこで、描画に必要な Texture データを分割して転送するという手法を用いる。
分割したデータを Tile とし、分割単位は 8 x 8 pixel とする。図\ref{fig:texture_split}
\cite{wataru}

\begin{figure}[htb]
  \begin{center}
    \includegraphics[scale=0.5]{image/cerium_rendering_tile.pdf}
    \caption{Texture の分割 (Tile) }
    \label{fig:texture_split}
  \end{center}
\end{figure}

図\ref{fig:cerium}の SpanPack に含まれる Texture のアドレスはこの配列を
指している。描画に必要な Tile を計算し、メインメモリから DMA 転送し、pixel の
情報を取り出す。

また、描画されるオブジェクトが遠くにある場合、そのままの大きさの Texture は必要ないので、
縮小サイズの Texture (Scale) を用意し、Span の長さによって描画に必要な Texture を取捨選択することにする。
これにより、DMA 転送の待ち時間が減少し、ゲームの実行速度が向上すると考えられる。
 \\

以下に分割、Scale 作成のプログラムの一部と実行速度の比較を示す。

\begin{table}[htb]
  \begin{center}
    \caption{Scale を用いることによる実行速度の比較}
    \hbox to\hsize{\hfil
      \begin{tabular}{c|l|l} \hline \hline
         & Scaleなし(FPS) & Scaleあり (FPS)\\ \hline
        \hline
        Playstation 3 & 10.8 & 13.5 \\ \hline
        Mac OSX & 7.0 & 8.5\\ \hline
      \end{tabular}\hfil}
    \label{tb:scale}
  \end{center}
\end{table}
{\scriptsize* FPS とは Frame Per Second の略で、1秒間に何回画面を書き換えたかを表している。}

表\ref{tb:scale}から、Texture の Scale 選択により Playstation 3 上では 30% ほど
実行速度が向上していることが分かる。MacOSX 上でほとんど効果が見られないのは、
 PPU 1つでゲームの処理を行っているからである。

\section{まとめと今後の課題}

現在 Cerium は SPE を 6 個使う場合と 1 つしか使わない場合で約 3.5 倍の上昇が見られる。\cite{wataru}


\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

\bibitem{blender} blender.org

\verb|http://www.blender.org/|

\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{並列プログラミングを用いた \\\ ゲームフレームワークの設計と実装}
\author{055734A 多賀野海人 指導教員 : 河野真治}
\date{}
\maketitle
\thispagestyle{fancy}

\section{はじめに}
我々はこれまで、PlayStation2,PlayStation3等の家庭用ゲーム機を用いたゲームプログラミングを、
リアルタイムプログラム、ユーザインターフェイスの学生実験の一環として行ってきた。

しかし、Cell を用いる場合、データの転送やタスクの生成等のこれまで学んだことのない技術が多く存在する。
これにより、学生実験の短期間では新しい技術を学ぶことに多くの時間を取られ、ゲームの完成度が向上が困難である。

本研究では、PlayStation3上でゲームプログラミングを行う際に、Cellの性能を活かしながら、
アーキテクチャに依存する記述を排除した、並列プログラミングを目的としている。

\section{Cell、SPEの問題点} \label{sec:cell}
Cell\cite{cell}はメインプロセッサである 1基の PowerPC Processor Element (PPE) 
と8基のデータ処理プロセッサアーキテクチャー Synergistic Processor Element (SPE)
からなる非対称なマルチコアプロセッサであり、高速リングバスで構成されている。

PPE は 複数の SPU をコアプロセッサとして使用することができる汎用プロセッサである。
SPE は、 PPE のような複雑なプログラム制御よりも、計算を単純に繰り返すマルチメディア系の処理を得意とする
演算系プロセッサである。LS (Local Store) という256KBのメモリを持つ。
本研究で用いた PS3Linux では、6個の SPE を制御することができる。

SPE には 256KB しか搭載されていないという問題点がある。これは SPE 内で動作させるコードなども含めて
である。メインメモリからデータを持ってくることも可能だが、SPE が直接メインメモリにアクセスすることはできず、
メインメモリにアクセスするには DMA を用いる。

DMA (Direct Memory Access) 転送とは、CPU を介さずに周辺装置と
メモリとの間でデータ転送ことで、Cell の場合は
メインメモリと LS 間でデータの転送を行う。手順としては以下の様になる。

\begin{enumerate}
  \item SPE プログラムが MFC (Memory Flow Controller) に対して
    DMA 転送命令を発行する。
  \item MFC が DMA Controller を介して DMA 転送を開始。
    この間、SPE プログラムは停止しない。
  \item DMA 転送の終了を待つ場合、SPE プログラム内で転送の完了を待つ。
\end{enumerate}

SPE が直接メインメモリにアクセスできないことと、DMA 転送の待ち時間が
SPE でプログラミングを行う際の大きな問題となる。

% \subsection{Cerium Rendering Engine の提案}

Cell 用いたゲームプログラミングを行うために、我々の研究室では Cerium を用意した。
Cerium\cite{cerium} は、オブジェクトのデータやその振る舞い、
またはゲームのルールなどゲームを構成する場面 (Scene) を木構造で持つ
Scene Graph、OSMesa に代表される Rendering Engine、
そしてそれらの実行単位を Task とし、
動的に全てのコアが動作する様な割り振りを行うカーネル
TaskManager で構成されている。

\begin{figure}[hbp]
  \begin{center}
    \includegraphics[scale=0.5]{image/Cerium.pdf}
    \caption{Cerium の構成要素}
    \label{fig:cerium}
  \end{center}
\end{figure}

%ゲーム内で使用するオブジェクトの生成は Blender \cite{blender}というフリーの
%3D モデリングツールを使用し、Cerium 独自の xml 形式で出力する。
Rendering Engine では、SceneGraph から実際に表示するポリゴンの抽出、
ポリゴンから Span の生成、 Span に RGB をマッピングし描画する部分と3つに分けることが出来る。

Span とはポリゴンに対するある特定の Y 座標に関するデータを抜き出したものである。図\ref{fig:cerium}

Cerium では Span の生成、描画に必要な Texture の計算などあらゆる処理を SPE で並列実行できるように
設計されている。

\section{Rendering}

SPE を用いて計算を行う場合には、その処理(ソースコード)とデータを SPE の LS に転送して行う。
しかし、SPE の LS は 256KB しかないので、一度に Texture データを転送すると容量を超えてしまう可能性がある。

そこで、描画に必要な Texture データを分割して転送するという手法を用いる。
分割したデータを Tile とし、分割単位は 8 x 8 pixel とする。図\ref{fig:texture_split}
\cite{wataru}

\begin{figure}[htb]
  \begin{center}
    \includegraphics[scale=0.5]{image/cerium_rendering_tile.pdf}
    \caption{Texture の分割 (Tile) }
    \label{fig:texture_split}
  \end{center}
\end{figure}

図\ref{fig:cerium}の SpanPack に含まれる Texture のアドレスはこの配列を
指している。描画に必要な Tile を計算し、メインメモリから DMA 転送し、pixel の
情報を取り出す。

また、描画されるオブジェクトが遠くにある場合、そのままの大きさの Texture は必要ないので、
縮小サイズの Texture (Scale) を用意し、Span の長さによって描画に必要な Texture を取捨選択することにする。
これにより、DMA 転送の待ち時間が減少し、ゲームの実行速度が向上すると考えられる。
 \\

以下に分割、Scale 作成のプログラムの一部と実行速度の比較を示す。

\begin{table}[htb]
  \begin{center}
    \caption{Scale を用いることによる実行速度の比較}
    \hbox to\hsize{\hfil
      \begin{tabular}{c|l|l} \hline \hline
         & Scaleなし(FPS) & Scaleあり (FPS)\\ \hline
        \hline
        Playstation 3 & 10.8 & 13.5 \\ \hline
        Mac OSX & 7.0 & 8.5\\ \hline
      \end{tabular}\hfil}
    \label{tb:scale}
  \end{center}
\end{table}
{\scriptsize* FPS とは Frame Per Second の略で、1秒間に何回画面を書き換えたかを表している。}

表\ref{tb:scale}から、Texture の Scale 選択により Playstation 3 上では 30% ほど
実行速度が向上していることが分かる。MacOSX 上でほとんど効果が見られないのは、
 PPU 1つでゲームの処理を行っているからである。

\section{まとめと今後の課題}

現在 Cerium は SPE を 6 個使う場合と 1 つしか使わない場合で約 3.5 倍の上昇が見られる。\cite{wataru}


\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