# HG changeset patch # User tkaito@nw0534.st.ie.u-ryukyu.ac.jp # Date 1235472701 -32400 # Node ID cb9d83f4dbb937984169c2bbff7e92547022b802 # Parent f13ec8d07bbbaec4d0e7d426bfc2f67fe25d8ea0 thesis commit diff -r f13ec8d07bbb -r cb9d83f4dbb9 paper/GEN_FONT.BAT --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/GEN_FONT.BAT Tue Feb 24 19:51:41 2009 +0900 @@ -0,0 +1,1 @@ +C:\tex\bin\mktexpk.exe --dpi 432 --bdpi 300 --mag 1+132/300 cmr17 \ No newline at end of file diff -r f13ec8d07bbb -r cb9d83f4dbb9 paper/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/Makefile Tue Feb 24 19:51:41 2009 +0900 @@ -0,0 +1,77 @@ +TARGET = thesis_main + +LATEX = /opt/local/bin/platex-utf8 +#LATEX = platex +BIBTEX = jbibtex +DVIPS = dvips +DVIPDFM = dvipdfmx +RM = rm -f +EBB = ebb + +# Option definitions +DVIPDFMOPT = +DVIPSOPT = -D 720 -mode esphi -O 0mm,0mm -N0 + +# Suffixes definitions +.SUFFIXES: .tex .dvi + +# Recipes +all: pdf# $(TARGET).ps + open $(TARGET).pdf + +dvi: + @echo "----------- make dvi file ($(TARGET).dvi) ----------" + $(LATEX) $(TARGET) + $(BIBTEX) $(TARGET) + $(LATEX) $(TARGET) + $(LATEX) $(TARGET) +pdf: dvi + $(DVIPDFM) $(DVIPDFMOPT) $(TARGET) + +clean: + $(RM) *~ \#* + @if [ -f $(TARGET).aux ];\ + then $(RM) $(TARGET).aux;\ + fi + @if [ -f $(TARGET).log ];\ + then $(RM) $(TARGET).log;\ + fi + @if [ -f $(TARGET).toc ];\ + then $(RM) $(TARGET).toc;\ + fi + @if [ -f $(TARGET).lof ];\ + then $(RM) $(TARGET).lof;\ + fi + @if [ -f $(TARGET).lot ];\ + then $(RM) $(TARGET).lot;\ + fi + @if [ -f $(TARGET).big ];\ + then $(RM) $(TARGET).big;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).ilg ];\ + then $(RM) $(TARGET).ilg;\ + fi + @if [ -f $(TARGET).idx ];\ + then $(RM) $(TARGET).idx;\ + fi + @if [ -f $(TARGET).ind ];\ + then $(RM) $(TARGET).ind;\ + fi + @if [ -f $(TARGET).dvi ];\ + then $(RM) $(TARGET).dvi;\ + fi + @if [ -f $(TARGET).pdf ];\ + then $(RM) $(TARGET).pdf;\ + fi + @if [ -f $(TARGET).out ];\ + then $(RM) $(TARGET).out;\ + fi + @if [ -f $(TARGET).bbl ];\ + then $(RM) $(TARGET).bbl;\ + fi + @if [ -f $(TARGET).blg ];\ + then $(RM) $(TARGET).blg;\ + fi diff -r f13ec8d07bbb -r cb9d83f4dbb9 paper/bibliography.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/bibliography.tex Tue Feb 24 19:51:41 2009 +0900 @@ -0,0 +1,15 @@ +\begin{thebibliography}{9} +\bibitem{b1} +小林 英雄,福原 忠行,袁 浩,武内 良夫,``適応変調を用いたシングルキャリアOFDM通信方式に関する検討," IEICE RCS,vol.102,no. 550,pp. 89--94,2003. +\bibitem{b2} +Hyung G. Myung, Junsung Lim, and David J. Goodman, ``Single Carrier FDMA to Uplink Wireless transmission," IEEE Vehicular Technology Magazine, vol. 1, no. 3, pp. 30--38, 2006. +\bibitem{b3} +伊丹 誠,``~ディジタル放送/移動通信のための~OFDM変調技術",株式会社トリケップス,東京, 2003. +\bibitem{b4} +H. G. Myung, J. Lim, and D. J. Goodman, ``Peak-to-Average Power Ratio of Single Carrier FDMA Signals with Pulse Shaping," Proc. IEEE PIMRC '06, 2006. +\bibitem{b5} +石井 聡,``無線通信とディジタル変復調技術”,CQ出版社,東京,2005. +\bibitem{b6} +PHS MoU Group,``Next Generation PHS Specifications (Revision3) '', ARIB, Tokyo, 2007. + +\end{thebibliography} diff -r f13ec8d07bbb -r cb9d83f4dbb9 paper/chapter1.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/chapter1.tex Tue Feb 24 19:51:41 2009 +0900 @@ -0,0 +1,22 @@ +\chapter{序論} +\label{chap:chapter1} + +\pagenumbering{arabic} + +\section{研究背景} +我々はこれまで、PlayStation2,PlayStation3等の家庭用ゲーム機を用いたゲームプログラミングを、 +リアルタイムプログラム、ユーザインターフェイスの学生実験の一環として行ってきた。 + +PlayStation3はCellというマルチコアCPUを持っているので、ゲームプログラミングの際には並列処理を +行い計算効率の上昇を図っている。 + +しかし、ゲームプログラミングにおける並列処理は、データが処理される順番を把握することができないので +出力結果などが特定しづらく、デバッグが難しい。データ転送やタスクの生成等のこれまで学んだことのない技術が多く存在する。 + +\section{研究目的} +本研究では、PlayStation3上でゲームプログラミングを行う際に、Cellの性能を活かしながら、 +アーキテクチャに依存する記述を排除した、並列プログラミングを目的としている。 + +現在我々は、研究室で開発を行っているCeriumというレンダリングエンジンを用い、Cellを用いた +並列プログラミングを行っている。更に多体問題という例題を元に、並列プログラミングを用いた +限定的なゲームフレームワークの作成することによって、ゲーム作成にかかる作業時間の短縮を目指す。 diff -r f13ec8d07bbb -r cb9d83f4dbb9 paper/chapter2.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/chapter2.tex Tue Feb 24 19:51:41 2009 +0900 @@ -0,0 +1,202 @@ +\chapter{CELL BROADBAND ENGINE} +\label{chap:chapter2} + +\pagenumbering{arabic} + +\section{Cellとは} + +Cell\cite{cell}は、マルチコアCPUの1つで、構成は「ヘテロジニアス・マルチコアプロセッサ構成」です。 +汎用的な用途に対応した1種類のコアを用意するのではなく、制御系プロセッサコア(PPE)と演算系プロセッサコア(SPE)という異なる +コアを用意しています。 + +\subsection{Cellの構成} + +Cellはメインプロセッサである 1基の PowerPC Processor Element (PPE) と8基のデータ処理プロセッサアーキテクチャー Synergistic Processor Element (SPE) +からなる非対称なマルチコアプロセッサであり、高速リングバスで構成されている。\cite{cell} + +\begin{figure}[hbp] + \begin{center} + % \vskip -\lastskip \vskip -370pt + \includegraphics[scale=0.7]{image/Cell-main2.pdf} + \caption{Cell の構成要素} + \label{fig:cell-main} + \end{center} +\end{figure} + +\subsection{PPE} + +PPE は 複数の SPU をコアプロセッサとして使用することができる汎用プロセッサである。 +オペレーティングシステムの役割であるメインメモリや外部でバイスへの入出力制御に加えて、 +SPEを制御する役割も担っている。 +PPU (PowerPC Processor Unit) は、PPEの演算処理をおこなう核となるユニットで、 +PowerPCアーキテクチャをベースとした命令セットを持つ。 +PPSS (PowerPC Processor Storage Subsystem) は、PPUからメインメモリへの +データアクセスを制御するユニットである。 + +本研究で用いた PS3Linux では、6個の SPU を制御することができる。 + +\begin{figure}[hbp] + \begin{center} + \vskip -\lastskip \vskip -10pt + \includegraphics[scale=0.43]{image/PPE.pdf} + \caption{PowerPC Processor Element (PPE) の構成要素} + \label{fig:ppe} + \end{center} +\end{figure} + +\subsection{SPE} + +SPE は、 PPE のような複雑なプログラム制御よりも、計算を単純に繰り返すマルチメディア系の処理を得意とする +演算系プロセッサである。 +SPU (Synergistic Processor Unit) は、SPEの演算処理をおこなう核となるユニットで、 +各SPE上に搭載されている。SPUは、PPUとは異なる独自の命令セットを持つ。また、 +LS (Local Store) という256KBのメモリを持ち、メインメモリへのアクセスはMFC (Memory Flow Controller) へ +チャンネルを介して DMA (Direct Memory Access) 命令を送ることで行われる。SPU は直接メインメモリへアクセス +することはできない + +\begin{figure}[hbp] + \begin{center} + \vskip -\lastskip \vskip -10pt + \includegraphics[scale=0.43]{image/SPE.pdf} + \caption{Synergistic Processor Element (SPE) の構成要素} + \label{fig:spe} + \end{center} +\end{figure} + +\section{Cellの基本機能} +\subsection{SIMD (Single Instruction Multiple Data)} + +Cell は基本的にあらゆるものを並列的に計算できるような構造になっている。 +SPU に実装されている 128 ビットレジスタも SIMD を行う為に設計されている。 +SIMD 演算とは 1 つの命令で複数のデータに対して処理をおこなう演算方式である。 +以下にスカラ演算と SIMD 演算を図で示す。 + +\begin{figure}[hbp] + \begin{center} + % \vskip -\lastskip \vskip -10pt + \includegraphics[scale=0.7]{image/SIMD.pdf} + \caption{スカラ演算とSIMD演算} + \label{fig:simd} + \end{center} +\end{figure} + +スカラ演算では、4 個の処理結果を得るために 4 回の加算命令を逐次的に実行しなければならない。 +一方、SIMD 演算では、1 回の加算命令で 4 個の処理結果を得ることができる。このように SIMD 演算は +スカラ演算に比べて同じ処理を少ない命令で実行することができる。 +SIMD 演算が行えるのは複数のデータに対して同じ処理の場合である。 +以下のようなデータによって処理が異なる場合には SIMD 演算を行うことができない。 + +\begin{figure}[hbp] + \begin{center} + \includegraphics[scale=0.7]{image/SIMD_no.pdf} + \caption{SIMD 演算を行えない場合} + \label{fig:simd_no} + \end{center} +\end{figure} + +\subsection{Mailbox} + +Mailbox は、PPE と SPE 間で通信するための機構の一つである。DMA 転送はメインメモリ +と LS との間で最大 16KB の大きなデータの受け渡しを行う。それに対し、Mailbox はステータスの変化などの +小さなデータの受け渡し向けで、PPE と SPE との間で双方向のデータの受け渡しが可能で、FIFO キュー構造になっており、 +3 つの振る舞いができるように設計されている。\cite{akira} + +\begin{figure}[hbp] + \begin{center} + \includegraphics[scale=0.75]{image/Mailbox.pdf} + \caption{Mailbox} + \label{fig:mailbox} + \end{center} +\end{figure} + +\begin{enumerate} + +\item SPU Inbound Mailbox + +PPE から SPE へデータを渡すためのキューで、最大 4 個までのデータを蓄積できる。もし、 +SPE がキューを読むときにキューにデータがない場合は、キューにデータが書き込まれるまで待ち続ける。 + +\item SPU Outbound Mailbox + +SPE から PPE へデータを渡すためのキューで SPU INbound Mailbox と同様にデータがない場合はデータが +書き込まれるまで待ち続ける。データが 1 個までしかキューに格納できない点が異なる。 + +\item SPU Outbound Interrupt Mailbox + +SPU Outbound MMailbox とほとんど同じだが、SPE からキューにデータが書き込まれると、 +PPE に対して割り込みイベントが発生しデータの読み出しタイミングを通知することができる + +\end{enumerate} + +\section{開発環境} + +\subsection{libSPE2} + +libSPE2 とは PPU が SPE を扱うためのライブラリ群である。libSPE2 は SPE Context Creation、 +SPE Program Image Handing、SPE Run Control、SPE Event Handing、SPE MFC PRoblem State Facilities、 +Direct SPE Access for Applications という基本構成できている。Cell に基本プログラムは次のようになる。 + +\begin{enumerate} +\item create N SPE context +\item Load the appropriate SPE executable object into each SPE context's local store +\item Create N threads +\item Wait for all N threads to terminate +\end{enumerate} + +\subsection{SPU C/C++言語拡張} + +SPE は基本的な C 言語の一部の機能しか使えないが、拡張も行われている。 +以下にその一部を示す。\cite{gongo} + +\begin{table}[htb] + \begin{center} + \caption{SPU C/C++ 言語拡張 API} + \label{tab:cell_cpp} + \begin{tabular}{|l|l|} + \hline + spu\_mfcdma32 & DMA 転送を開始する \\ + \hline + spu\_read\_in\_mbox & PPE からの mail を取得する \\ + \hline + spu\_write\_out\_mbox & PPE へ mail を送信する \\ + \hline + spu\_add、spu\_sub、spu\_mul & SIMD 演算 (加算、減算、乗算) \\ + \hline + \end{tabular} + \end{center} +\end{table} + +このように Cell 特有の関数やアセンブラ命令を学ぶ事が必要となる。 + + +\subsection{SPURS} + +ここでは現在発表されている Cell の開発環境 SPURS について説明する。 +SPURS \cite{spurs}とは閉じた並列分散システムと考えることができる。Cell の環境で +いかに効率よく動作させるかということを考えたシステムである。Cell の性能を存分に生かすためには +SPE を効率よく使い切ることと、あらゆるレベルで並列処理を行うことである。\\ + +Cell の性能を最大限に生かすためには、SPE を止めることなくデータのアクセスを最小限に +留めて行うことが重要になる。 + +そこで SPURS では、SPE を効率よく利用するために、PPU に依存せずに SPU コードを選択し、 +実行することと機能は効率重視で割り切ることを挙げている。そのために SPE にカーネルを組み込んでいる。 + +アプリケーションを複数 SPE で実行するとき、アプリケーションプログラムをできるだけ小さな Task に分割し、 +通信ライブラリを用いて Task 間を依存関係で結合する。LS 常駐のカーネルは実行可能な Task を選んで実行する。 + +また、アプリケーションを分割するとき、プログラムがデータを伴うとき、ジョブに分割し、並び替えた上で、 +LS 常駐のカーネルはジョブリストからジョブをとってきて実行する。 + +また、これたはデータを扱うため、SPURS はパイプライン実行を行う。 + +SPURS は確かにライブラリとして優れた物であると思われるが、公開はされてない。 + +\begin{figure}[hbp] + \begin{center} + \vskip -\lastskip \vskip +30pt + \includegraphics[scale=0.8]{image/SPURS_task.pdf} + \caption{Task} + \label{fig:spurs_task} + \end{center} +\end{figure} diff -r f13ec8d07bbb -r cb9d83f4dbb9 paper/chapter3.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/chapter3.tex Tue Feb 24 19:51:41 2009 +0900 @@ -0,0 +1,248 @@ +\chapter{Cerium} +\label{chap:introduction} + +\pagenumbering{arabic} + +\section{Ceriumとは} + +本論文で示しているゲームフレームワークは学生実験での使用を目的としている。 +現在、学生実験では Playstation 3 を用いたゲームプログラミングを行っている。 + +これまでは Playstation 3 上での Linux 環境で SDL と OpenGL を用いて実験を行っていた。 +OpenGL とは Silicon Graphics 社が中心となって開発された、OS や ハードウェアに依存しない +グラフィック処理のためのプログラミングインターフェイスである。 +