Mercurial > hg > Papers > 2009 > gongo-master
diff resume/handout.tex @ 28:356077fb1c38
add resume
author | gongo@gendarme.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Tue, 17 Feb 2009 12:27:00 +0900 |
parents | |
children | 57a914ebe900 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/resume/handout.tex Tue Feb 17 12:27:00 2009 +0900 @@ -0,0 +1,300 @@ +\documentclass[twocolumn, a4j, twoside]{jarticle} +\usepackage{master_proc} +%\usepackage[dvips]{graphicx} +\usepackage[dvipdfm]{graphicx} + +\input{dummy.tex} + +% dvipdfm を使って PDF ファイルに日本語の栞をつける +% \usepackage[dvipdfm]{color} +% \usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,% +% bookmarkstype=toc]{hyperref} + +\newcommand\figref[1]{図 \ref{fig:#1}} +\newcommand\tabref[1]{表 \ref{tab:#1}} + +%和文タイトル +\jtitle{Cell 用の Fine-Grain Task Manager の実装} +%英文タイトル +\etitle{Implementation of Fine-grain Task Manager for Cell} +%著者名 +\author{宮國 渡} +%学籍番号 +\studentid{078519K} +%指導教官 +\teacher{河野 真治} + +\begin{document} + +\maketitle + +\section{はじめに} + +現在、学生実験にて PlayStation 3 (PS3) で動作するゲーム開発を行っている。 +しかし、PS3 のアーキテクチャである Cell は、 +Many Core を用いた並列プログラミングが求められており、 +並列プログラミングの経験が浅い学生にとって、 +Cell のようなアーキテクチャを理解した上でゲームを実装することは困難である。 +また、現在 PS3 ゲーム開発用フレームワークが存在しないことで、 +学生が一からプログラミングしていく必要がある。 +%この様な問題から、例年、学生実験の期間の大半を +%アーキテクチャの勉強に費やさねばならず、残りの期間内でゲーム開発を行っている。 +%そのため、制作されたゲームの完成度が一定以上にならない。 + +本研究では、Many Core Architetcure を用いた並列プログラムの開発をサポートする +フレームワークとして Fine-Grain Task Manager を実装し、それを組み込んだ、 +PS3 ゲーム開発用フレームワークである Cerium を提案する。 + +%Cerium を用いた開発行程は以下の様になる。 +% +%\begin{itemize} +%\item 逐次型プログラム +%\item データやコードを分割したプログラム +%\item 並列に動かすプログラム +%\end{itemize} +% +%これらのステップ毎にプログラムの仕様やアルゴリズムを確かめ、テストやデバッグを行い信頼性を確保しながら開発を進める。 + +Cerium は学生が Cell を理解しながら、一定期間内でゲーム開発が行える、 +シンプルなマルチタスクフレームワークを目指している。 + +\vspace{-4mm} + +\section{Cell Broadband Engine} +Cell \cite{cell} は、1個の Power PC Processor Element (PPE) と、 +8個の Synergistic Processor Element (SPE) からなる非対称なマルチコアプロセッサ +である、高速なリングバスでである Element Interface Bus (EIB) で構成されている +(\figref{cell_arch})。 + +\begin{figure}[htb] + \begin{center} + \includegraphics[scale=0.3]{./images/cell_arch.pdf} + \caption{Cell Broadband Engine Architecture} + \label{fig:cell_arch} + \end{center} +\end{figure} + +\vspace{-8mm} + +本研究で用いた PS3Linux (Fedora 10、Yellow Dog Linux 6.0) からは +6個の SPE が使用できる。SPE には 256KB の Local Store (LS) と呼ばれる +メモリ領域を持っている。また、SPE からメインメモリへは直接アクセスできず、 +SPE が持つ Memory Flow Controller (MFC) へ、DMA 命令を発行することで行われる +。 +%(\figref{cell_spe})。 + +%\begin{figure}[htb] +% \begin{center} +% \includegraphics[scale=0.25]{./images/cell_spe.pdf} +% \caption{Synergistic Processor Element (SPE)} +% \label{fig:cell_spe} +% \end{center} +%\end{figure} + +Cell が持つ基本的な機能として、Mailbox \cite{libspe2} がある。 +Mailbox は SPE の MFC 内にある 32ビットメッセージの FIFO キューを保持しており、 +PPE と SPE 間での同期に用いることができる。 + +\vspace{-4mm} +\section{Many Core プログラミングの特徴} +並列実行には Amdahl 則 \cite{amdahl}があり、 +使用するCPUを増やしても、元のプログラムの +並列化率が低ければ、その性能を生かすことは出来ないとされている +(\figref{amdahl})。 + +\begin{figure}[htb] + \begin{center} + \includegraphics[scale=0.35]{./images/amdahl.pdf} + \caption{Amdahl則 (6CPUを用いた時の並列化率と性能向上率)} + \label{fig:amdahl} + \end{center} +\end{figure} + +並列度を維持するためには、元のプログラム及びデータの分割による +データ並列、パイプライン処理を行うことが必要である。 + +並列プログラミングでは、以下の段階において、それぞれ実装とテストを行う。 + +\vspace{-2mm} + +{\small +\begin{verbatim} +step1. C によるシーケンシャルな実装 +step2. 並列実行を考慮したデータ構造を持つ実装 +step3. コードを分割し、それらをシーケンシャルに実行する実装 +step4. 分割したコードを並列実行する実装 +step5. アーキテクチャに特化した実装 +\end{verbatim} +} + +\vspace{-2mm} + +step3 まではシーケンシャルに実行されるためアーキテクチャに依存しない実装と +なっており、二分法によるデバッグが可能となっている。 +step4、5 で異常が確認できた場合、一度 step3 に戻りアルゴリズムやデータ構造、 +プログラム分割が正しいかを確認する。 + +\vspace{-4mm} +\section{TaskManager} + +Task Manager は、Task と呼ばれる、分割された各プログラムの管理を行う。 +Task の単位はサブルーチンとし、Task 同士の依存関係を考慮し、 +実行可能状態になった Task を各 SPE に割り振る。 +Task は通常 PPE スレッドで生成され、SPE スレッドに送られる。 +SPE スレッドでは、受け取った Task をパイプラインに沿ってステージを遷移しながら +複数の Task を同時に実行していく。 + +Task Manager は、Task が実行される CPU を明示的に選択できる機能を +持っているため、違う環境へプログラムを移行する場合に大幅なコードの変更が +必要なく、環境依存のプログラム変換はタスク内部だけになる。 + +PPE スレッドと SPE スレッド間の同期は、Cell の機能である Mailbox を用いる。 +メッセージ交換なので、スレッド間の待ち合わせは起こらない。 + +%\subsection{例題} +%Task Manager を用いて、実際に学生に並列プログラムを実装してもらった。 +%プログラムは Bitonic Sort で、ソートデータを複数のブロックに分割し、 +%隣り合ったブロック同士でソートするのを繰り返すソーティングである +%(\figref{sort})。 +% +%\vspace{-2mm} +% +%\begin{figure}[htb] +% \begin{center} +% \includegraphics[scale=0.3]{./images/tm_sort.pdf} +% \vspace{-4mm} +% \caption{Bitonic Sort} +% \label{fig:sort} +% \end{center} +%\end{figure} +% +%\figref{sort_calc} が実行結果となる。 +%SPE 6 個で、SPE 1 個の時より 5.1 の性能向上がみられる。 +%これより、TaskManager 自体のオーバーヘッドは問題ないと考えられる。 +% +%\vspace{-2mm} +% +%\begin{figure}[htb] +% \begin{center} +% \includegraphics[scale=0.3]{./images/tm_sort_calc1m.pdf} +% \vspace{-4mm} +% \caption{Bitonic Sort 実行結果} +% \label{fig:sort_calc} +% \vspace{-8mm} +% \end{center} +%\end{figure} +% +\vspace{-2mm} + +\section{Cerium} + +Cerium \cite{cerium} は PS3 ゲーム開発用のフレームワークである。 + +Cerium は、オブジェクトのデータやその振る舞い、 +またはゲームのルールなどゲームを構成する場面 (シーン) を木構造で持つ +Scene Graph、OSMesa に代表される Rendering Engine、 +そしてそれらの実行単位を Task とし、 +動的に全てのコアが動作する様な割り振りを行うカーネル +TaskManager で構成されている (\figref{cerium})。 + +\begin{figure}[htb] + \begin{center} + \includegraphics[scale=0.3]{./images/cerium.pdf} + \vspace{-4mm} + \caption{Cerium} + \label{fig:cerium} + \end{center} +\end{figure} + +\vspace{-8mm} + +\subsection{SceneGraph} +ゲームオブジェクトは オープンソースの3Dモデリングツールである +Blender \cite{blender} で作成し、Cerium 独自の XML 形式で出力する +\cite{chiaki}。 +Cerium はXML が持つ情報 (頂点座標、テクスチャ情報など) から SceneGraph +を生成する。SceneGraph はポリゴン情報の他に、オブジェクトの操作に関する move や +他の SceneGraph との衝突処理を行う collision を持つ。 + +\subsection{Rendering Engine} +Cerium Rendering Engine では、SceneGraph の操作後、 +実際に描画するポリゴン を SceneGraph から取得する {\bf SG2PP}、 +ポリゴンの中から Span (ポリゴン内にある x軸に水平な線分) を抽出する +{\bf PP2SP}、Span を使って 1 ラインずつ描画していく {\bf DrawSpan} の +3つのタスクで構成されている (\figref{rendering})。 + +\begin{figure}[htb] + \begin{center} + \includegraphics[scale=0.25]{./images/rendering.pdf} + \vspace{-4mm} + \caption{Cerium Rendering Engine} + \label{fig:rendering} + \end{center} +\end{figure} + +\vspace{-8mm} +\subsection{Cerium を用いたゲーム開発} + +\figref{dandy} は、学生が Cerium を用いて開発したPS3 で動作する +3Dシューティングゲームである。このゲームの実行結果を \tabref{game} に示す。 +SPE 6 個で、SPE 1 個のものより 3.6 倍の性能向上となった。 + +\begin{figure}[htb] + \begin{center} + \includegraphics[scale=0.08]{./images/cerium_game_1.pdf} + \caption{SuperDandy3D(仮)} + \label{fig:dandy} + \vspace{-4mm} + \end{center} +\end{figure} + +\begin{table}[htb] + \begin{center} + \caption{SuperDandy3D(仮) の各動作環境での実行速度} \label{tab:game} +{\small + \hbox to\hsize{\hfil + \begin{tabular}{l|r} \hline \hline + MacOSX 10.5 & 5.7 FPS \\ \hline + Linux (Fedora 10) & 7.8 FPS \\ \hline + PS3 SPE 1個 & 8.1 FPS \\ \hline + PS3 SPE 6個 & {\bf 29.3 FPS} \\ \hline + \end{tabular}\hfil} +} + \end{center} +\end{table} + +\section{比較} +\subsection{Gallium} +先行研究 \cite{akira} では、レンダリングエンジンに OSMesa \cite{osmesa}を用い、 +その後 Galiium \cite{gallium} というOSMesa の Cell driver が登場した。 +しかし、PS3 上のゲーム開発において、 +レンダリングのみを SPE 上で実行させるのは Amdahl 則の問題もあり好ましくない。 +したがって、レンダリングだけでなく、ゲームオブジェクトも SPE で処理させる +方針の Cerium では独自のレンダリングエンジンを用いている。 +\subsection{OpenCL} +並列コンピューティングフレームワークである OpenCL \cite{opencl} は、 +あらゆる Many Core Architecture に対応できるような汎用的な実装がされており、 +開発環境に合わせた記述が必要となる。また、現在 OpenCL を用いた Cell 用の +実装は無い。 +対して、Task Manager は Cell に重きを置いた記述で、ある程度決まった記述で +開発できる。また、大幅な変更無く Mac OSX や Linux など複数の環境で +動作させることが可能となっている。 + +\section{まとめと今後の課題} + +本研究では、Many Core Architetcure を用いた並列プログラムの開発を +サポートするフレームワークとして Fine-Grain Task Manager を実装し、 +それを組み込んだ、PS3 ゲーム開発用フレームワークである Cerium を提案した。 + +Cerium を用いれば、学生が手を付けやすい環境(Mac OS X、Linux)からの +開発を始めることができ、コードの大幅な変更無く PS3 での動作を確認できる。 +その過程で、学生が Cell アーキテクチャの理解も行えるため、 +教育効果も期待できる。 + +今後の課題には、レンダリング機能の追加、SceneGraph の操作の SPE 上での処理、 +SPE に特化した演算の積極的な使用が上げられる。 + +\bibliographystyle{junsrt} +\bibliography{handout} + +\end{document}