view compare.tex @ 3:3ee6deaab278

*** empty log message ***
author gongo
date Mon, 14 Jul 2008 16:28:37 +0900
parents 44fb87ea539a
children 30b41d745225
line wrap: on
line source

\section{Cerium の評価と考察}
Cerium Rendering Engine を用いて、
テクスチャを貼った一つの立方体を回転させるというプログラムを実行した。

今回、\figref{fig:cerium} で示した Task に対する CPU の割り振りは
\tabref{tab:hyoka1} とする。

\begin{table}[htbp]
  \caption{Task の実行 CPU} \label{tab:hyoka1}
  \hbox to\hsize{\hfil
  \begin{tabular}{c|l} \hline \hline
    Task & CPU \\ \hline
    SceneGraph to PolygonPack & PPE \\
    Polygonpack to SpanPack   & PPE \\
    Rendering & SPE \\ \hline
  \end{tabular}\hfil}
\end{table}


描画領域の大きさは 720x480 とし、
使用する SPE の数を変えて実行速度の比較を行った。

\begin{table}[htbp]
  \caption{実行速度 (720x480)} \label{tab:hyoka3}
  \hbox to\hsize{\hfil
    \begin{tabular}{l|r} \hline \hline
      実行環境 & 実行速度\\ \hline
      PPE のみ & 74 FPS \\ 
      PPE + SPE 1台 & 190 FPS \\ 
      PPE + SPE 2台 & 245 FPS \\ 
      PPE + SPE 3台 & 270 FPS \\ 
      PPE + SPE 6台 & 293 FPS \\ \hline
    \end{tabular}\hfil}
\end{table}

\tabref{tab:hyoka3} より、SPE の台数を増やす事によって、
実行速度が向上しているのがわかる。
しかし、正しく台数効果が出ているとは言えない。

%%原因として
%%
%%\begin{enumerate}
%%\item アルゴリズムのミス
%%\item 効率的なデータ及びコード分割がされていない
%%\item 全てのタスクを SPE 上で実行していない \label{list:d3}
%%\end{enumerate}
%%
%%等といった事が考えられる。
%%ここでは、原因(\ref{list:d3})について考察する。

今回の実験環境で、SPE 上で実行している Rendering タスクの処理は、
PPE から取得した Span から、実際に描画する RGB 値を計算して FrameBuffer に
書き込む事である。将来的にシェーディングやアルファブレンディングを
実装する事になるが、現在はそこまで多くの計算をしているわけではない。
主に PPE からの大量の Span データの取得、
そして FrameBuffer へのメモリコピーとなる。
従って、今回の実験結果は、Rendering タスク内のメモリネックが
影響しているものと考えられる。
この事に関し、描画領域を広げ、メモリコピーの量を増やす事で
検証していく必要がある。


%その原因として、TaskManager の実装の不備があげられる。

%現在、Cerium TaskManager には DMA でメインメモリから SPE 上にプログラムを
%ロードする機能を実装していないため、
%必要な時に必要なプログラムだけを SPE 上に置く事が出来ない。
%SPE の容量では、Cerium の全てのタスクを SPE 上に乗せる事は出来ないため、
%現在は Rendering のタスクだけを SPE 上にマッピングしてある。

%全てのタスクを SPE 上で実行できるようになれば、
%実行速度はさらに向上すると考えられる。

また、Rendering のタスクだけを SPE 上で実行しているのは、
SPE の 256KB という容量では、現在の Cerium の全てのタスクを
SPE 上に乗せる事が出来ないからである。
これを回避するために、SPE プログラムの on-demand load の実装が必要となる。
実装の方法として、以下のような手段が考えられる。

\begin{enumerate}
\item メインメモリにマッピングした SPE プログラムを DMA で SPE 上にロードする
  \label{list:com1}
\item SPE をタスクの数に対応するように起動し、それぞれにタスクを attach する
  \label{list:com2}
\end{enumerate}

OS のカーネルレベルでは、SPE 毎に spufs と呼ぶ
仮想ファイルシステム(VFS) が与えられており、
仮想的なファイルとして SPE のリソース にアクセス可能な
インターフェース が設けられている \cite{spufs}。
そのため、6台以上の SPE を仮想的に起動する事が可能である。
(\ref{list:com2}) の手法では、実行するタスクが attach されている
SPE を切り替えながら実行していく。

全てのタスクを SPE 上で実行できるようになれば、
タスク単体の実行速度は向上すると考えられる。
しかし、SPE プログラムもしくは仮想 SPE の入れ替えのコストが発生するため、
プログラム全体として向上するかは検証する必要があり、
on-demand load の実装と共に、今後の課題として挙げられる。