view finalutf8.tex @ 1:c148a8712ac0

change
author e065725@kinjyo.cr.ie.u-ryukyu.ac.jp
date Thu, 29 Oct 2009 18:27:21 +0900
parents 8ccd555a6930
children b4f2c2305557
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvips]{graphicx}

\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.eps}}琉球大学主催 工学部情報工学科 卒業研究発表会}
\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{ソフトウェアRenderingEngineの高機能化と高速化}
\author{065725F 金城裕 {}{} 指導教員 : 河野真治}
\date{}
\maketitle
\thispagestyle{fancy}

\section{概要}
近年、CPUの消費電力増加や、クロック周波数対効果の停滞により、 CPUコア数は増加傾向にある。コア数の増加にともない処理速度の向上が見込める。
しかし、 CPUのコア数が増加すると、コア数に見合った並列プログラミングを行う必要がある。

並列プログラミングを行う際、Amdahl則より、並列化を意識してプログラミングしなければならない。しかし、並列化を問題毎に毎回考えるのは手間がかかる。そこで並列プログラミングを裏でサポートしてくれるソフトウェアを開発する。

研究では、Cellの並列プログラミングサポートフレームワークを開発する。当研究室で開発したCeriumは現在十分な並列化、実行速度、機能をサポートできていない。Cerium、特にRenderingEngine部分を改良し、信頼できる並列化サポートフレームワークを目指す。

\vspace{-5mm}
\section{Cell}
Cellは「ヘテロジニアス・マルチコアプロセッサ構成」を採用し、1基の制御系プロセッサコア (PPE:PowerPc Processor ELement) と8基の演算系プロセッサコア (SPE:Synergistic Processor Element) で構成される。各プロセッサコアは、EIB (Element Interconnect Bus) と呼ばれる高速なバスで接続されている。また、EIBはメインメモリや外部入出力デバイスとも接続されていて、各プロセッサコアはEIBを経由してデータアクセスをおこなう。

この2種類のCPUをプログラマ自身が用途に合わせて適切に使い分けるように考慮する必要がある。

\vspace{0mm}
\begin{figure}[htbp]
  \begin{center}
    \includegraphics[scale=0.6]{pic/cell1.eps}
    \caption{Cellプロセッサの構成} \label{cell1}
  \end{center}
\end{figure}

\vspace{-6mm}
\section{Cerium}
当研究室ではCeriumと呼ばれるゲーム開発フレームワークがあり、以下の3つの要素から構成されている。\\

\vspace{-6mm}
\begin{itemize}
\item SceneGraph
\vspace{-3mm}
\item Rendering Engine
\vspace{-3mm}
\item Task Manager
\end{itemize}
 
Ceriumは独自にRenderingEngineを持つ。ゲーム中のオブジャクトの振る舞いやルールはSceneGraphで管理し、それらの動きやレンダリングの処理を動的にSPEに割り振るカーネルとして、TaskMnagerが用いられる。
TaskManagerは、Taskと呼ばれる、分割された各プログラムを管理する。Taskの単位はサブルーチンまたは関数とし、Task同士の依存関係を考慮しながら実行していく。
現在Ceriumはlinux,macosx上で動作し、コンパイル方法によってCellのspeを使うかどうかを選択できる。

\vspace{-5mm}
\section{TaskManagerを使った例題}
TaskMangerを使った例題としてWordCountを実装した。inputされたfileをmmapでメモリにマッピングし、そのdataを分割。各SPEに、WordCountのTaskと分割されたdataを渡す。SPEは渡されたdataをwordcountし、指定されたoutput領域に書き込む。全てのwordcountが実行し終えるとその結果をppe側で集計し、結果を出力する。その流れを以下に示す。

\vspace{0mm}
\begin{figure}[htbp]
  \begin{center}
    \includegraphics[scale=0.3]{pic/wc_graf3.eps}
    \caption{WordCountのTask生成、実行の流れ} \label{wordcount}
  \end{center}
\end{figure}


\section{RenderingEngine}
RenderingEngineでは、SceneGraphから、実際に表示するポリゴンの抽出、ポリゴンからSpanの生成、SpanにRGBをマッピングし描画する部分と3つに分ける事ができる。ここでいうSpanとは、ポリゴンに対するある特定のY座標に関するデータを抜き出したものである。
\subsection{高機能化}
RenderingEngineの高機能化に関して、以下のような案を提案する。
\vspace{-3mm}
\subsubsection{光源}
RenderingEngineで、未実装だった光源の計算を実装した。各オブジェクトには自身の座標や親子関係などの情報を持っており、その中に法線がある。法線と光のベクトルとの内積をrgbにかけ算することにより光の計算を行っている。以下に光源の計算をした画像を示す。

\vspace{0mm}
\begin{figure}[htbp]
  \begin{center}
    \includegraphics[scale=0.4]{pic/ball.eps}
    \caption{光源計算をした描画画像} \label{ball}
  \end{center}
\end{figure}


現在、光源はppeだけを使ったfifo形式のみに実装されている。

\subsection{高速化}
RenderingEngineの高速化に関して、以下のような案を提案する。
\vspace{-3mm}
\subsubsection{描画ルーチン}
CeriumのRenderingEngineは描画する対象がない部分も毎フレーム描画計算をしている。それでは計算する必要のない部分も計算してしまい、無駄な時間が生じる。そこで、描画する対象がない部分の計算は行わないようにすれば高速化が望める。
また画面に背景を描画する場合は、オブジェクトとは別に背景専用のルーチンを設け高速化を計る。さらにオブジャクトが重なり描画する必要のない部分は描画計算を行わない。

\newpage

\vspace{0mm}
\begin{figure}[htbp]
  \begin{center}
    \includegraphics[scale=0.45]{pic/rendering1.eps}
    \caption{描画計算の範囲} \label{rendering1}
  \end{center}
\end{figure}

\vspace{-7mm}
\subsubsection{SceneGraphからSpanを作るまで}
CeriumではSceneGraphからRenderingに至るまでに以下の図で示すような流れがある。

\vspace{0mm}
\begin{figure}[htbp]
  \begin{center}
    \includegraphics[scale=0.4]{pic/rendering2.eps}
    \caption{SceneGraphからRenderingするまでの流れ} \label{rendering2}
  \end{center}
\end{figure}

以上の工程でそれぞれSPEにTaskを渡し、処理を行っているが、Taskは一つにまとめられて複数のSPEは使われていない。この部分のTaskを複数に分割、SPEに割当て並列処理を行うことによって高速化を計る。


\thispagestyle{fancy}
\begin{thebibliography}{9}

\bibitem{1} 宮國渡 "Implementation of Fine-grain Task Manager for Cell" 平成20年度 学位論文(修士)

\bibitem{2} 多賀野海人 "並列プログラミングを用いたゲームフレームワークの設計と実装" 2008年 卒業研究中間報告資料

\bibitem{3} fixstars:
http://cell.fixstars.com/ps3linux/index.php/メインページ

\end{thebibliography}
\end{document}