Mercurial > hg > Papers > 2008 > gongo-sigos
changeset 4:869c475cc108
*** empty log message ***
author | gongo |
---|---|
date | Mon, 24 Mar 2008 23:10:27 +0900 |
parents | 2ef36d40ee96 |
children | 30bf38a518e8 |
files | cerium-manager.tex cerium_dev.tex compare.tex figure/manager-pipeline.bb figure/manager-pipeline.graffle figure/manager-pipeline.pdf sigos.tex |
diffstat | 7 files changed, 118 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/cerium-manager.tex Mon Mar 24 17:49:30 2008 +0900 +++ b/cerium-manager.tex Mon Mar 24 23:10:27 2008 +0900 @@ -3,12 +3,14 @@ 管理するライブラリである。Task 同士の依存関係を考慮しながら メモリ上にマッピングし、SPE 上ではそのプログラムを DMA 転送によりロードする (\figref{fig-manager-load}) 。 -これは SPE の LS が 256 KB しかないため、必要なコードだけを使うように -入れ替える必要がある。 +SPE は 256KB という小さなデータ量しか持てず、 +大量のプログラムを全て SPE 上に置いておくことはできない可能性がある。 +そのため、必要な時に必要な実行プログラムだけが SPE 上にロード +されていることが望ましい。 \begin{figure}[tb] \begin{center} - \includegraphics[scale=0.35]{figure/manager-load.pdf} + \includegraphics[scale=0.45]{figure/manager-load.pdf} \caption{Task Manager} \label{fig-manager-load} \end{center} @@ -28,6 +30,40 @@ \end{tabular}\hfil} \end{table} +以下に Task Manager を使った記述を示す。 + +{\small +\begin{verbatim} +int +main(void) +{ + TaskManager *manager = new TaskManager; + Task *task1, *task2; + + /** + * cmd : 実行するタスクID + * size : in_addr で取得するデータのバイト数 + * in_addr : 入力データ元アドレス + * out_addr : 出力データ先アドレス + */ + task1 = create_task(CMD_RUN1, size1, + in_addr1, out_addr2); + task2 = create_task(CMD_RUN2, size2, + in_addr2, out_addr2); + + // task2 は task1 が終了してから開始する + task2->set_depend(task1); + + task1->spawn(); + task2->spawn(); + + manager->run(); + + return 0; +} +\end{verbatim} +} + \subsubsection{並列処理} Cell ではあらゆるレベルで並列に動作させることが求められる。 @@ -36,7 +72,7 @@ 直接参照することは出来ず、DMA 転送によりデータをやりとりする。 DMA は CPU を介さず直接データ転送を行う方式である。そのため、 DMA している間は SPE は何らかの処理を行うことが出来る。 -また、SPE に Input Buffer と Output Buffer を二つずつ用意することにより、 +また、ダブルバッファリングを行うことで パイプライン処理が可能となる (\figref{fig-pipeline}) 。 \begin{figure}[tb] @@ -47,10 +83,9 @@ \end{center} \end{figure} -Task Manager のパイプライン処理を \figref{fig-cerium} に適用させると、 +Task Manager を \figref{fig-cerium} に適用させると、 \figref{fig-manager-pipeline} のようにパイプライン的に動作する。 - \begin{figure}[tb] \begin{center} \includegraphics[scale=0.36]{figure/manager-pipeline.pdf}
--- a/cerium_dev.tex Mon Mar 24 17:49:30 2008 +0900 +++ b/cerium_dev.tex Mon Mar 24 23:10:27 2008 +0900 @@ -1,16 +1,46 @@ \section{開発過程} -Cerium を作るために、以下の手順にそれぞれ実装とテストを行う。 +Cerium を作るために、以下の段階にそれぞれ実装とテストを行う。 \begin{enumerate} \item C によるシーケンシャルな実装 \label{list_dev_1} \item SPE を考慮したデータ構造 (PolygonPack, SpanPack) を持つ実装 \label{list_dev_2} - \item コードをタスクに分割し、FIFO キューでシーケンシャルに実行する実装 - \item タスクを SPE に割り当て並列実行する実装 + \item コードをタスクに分割し、FIFO キューでシーケンシャルに実行する実装 \label{list_dev_3} + \item タスクを SPE に割り当て並列実行する実装 \label{list_dev_4} \end{enumerate} -(\ref{list_dev_1}) の実装は Task Manager を用いず、プログラムのアルゴリズムの -信頼性を確認するために用いる。 -この段階では、入力に対して出力が一意に決まる状況であり、テストは容易である。 +段階 (\ref{list_dev_1}) の実装は Task Manager を用いず、 +プログラムのアルゴリズムの信頼性を確認するために用いる。 + +段階 (\ref{list_dev_2}) ではデータの変換が必要になり、 +段階 (\ref{list_dev_1}) と同じ結果を得られるかどうかを検証する。 +この段階までは、入力に対して出力が一意に決まる状況であり、テストは容易である。 シーケンシャルな実装であるため、デバッグも二分法により容易に行うことが出来る。 -(\ref{list_dev_2}) に +段階 (\ref{list_dev_3}) の実装からは Task Manager を用いる。 +この段階まではアーキテクチャに依存しないので、 +ターゲットが開発途中の段階でも記述することが可能である。 +また、FIFO スケジューラを用いずに Random スケジューラを実装することにより、 +並列実行特有の非決定的な実行が導入される。 +非決定的な動作においても、段階 (\ref{list_dev_2}) までと同じ仕様を +満たすことを検証する必要がある。 +これは、逐次型プログラムでは出て来ない問題である。 + +段階 (\ref{list_dev_4}) では、段階 (\ref{list_dev_3}) までが動いていれば +問題なく動作すると期待される。また、SPE タスクを、 +SPE が持つ命令セットを用いて最適化することにより、更なる性能向上が期待できる。 + +段階 (\ref{list_dev_3}) から 段階 (\ref{list_dev_4}) へのプログラムの変換は +非常に容易である。Task Manager の API である set\_cpu() を用いることにより、 +Task を PPE で実行するか SPE で実行するかを明示的に書くことが出来るからである。 + +{\small +\begin{verbatim} + + Task *task1 = create_task(cmd1,siz1,in1,out1); + Task *task2 = create_task(cmd2,siz2,in2,out2); + + task1->set_cpu(CPU_PPE); // PPE 上で実行される + task2->set_cpu(CPU_SPE); // SPE 上で実行される + +\end{verbatim} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/compare.tex Mon Mar 24 23:10:27 2008 +0900 @@ -0,0 +1,33 @@ +\section{評価と考察} +Cerium Rendering Engine を用いて、OSMesa と同様に立方体を回転させる。 +今回、\figref{fig-cerium} で示した Task に対する CPU の割り振りは +\tabref{tab:hyoka1} とする。 + +\begin{table}[b] + \caption{Task の実行 CPU} \label{tab:hyoka1} + \hbox to\hsize{\hfil + \begin{tabular}{c|l} \hline \hline + Task & CPU \\ \hline + SceneGraph to PolygonPack & PPE \\ \hline + Polygonpack to SpanPack & PPE \\ \hline + Rendering & SPE \\ \hline + \end{tabular}\hfil} +\end{table} + +PPE/SPE に対するコンパイルの最適化及びその時の実行 FPS を +\tabref{tab:hyoka2} に示す。描画領域は 640x88 である。 + +\begin{table}[b] + \caption{Cerium 実行速度 640x88} \label{tab:hyoka2} + \hbox to\hsize{\hfil + \begin{tabular}{cc|l} \hline \hline + PPE & SPE & FPS \\ \hline + 最適化なし & 最適化なし & 263 FPS \\ + -O9 & 最適化なし & 317 FPS \\ + 最適化なし & -O9 & 812 FPS \\ + -O9 & -O9 & 1610 FPS \\ \hline + \end{tabular}\hfil} +\end{table} + +\tabref{tab:hyoka2} より、SPE に対する最適化が非常に有効であるといえる。 +(続き有ります)
--- a/figure/manager-pipeline.bb Mon Mar 24 17:49:30 2008 +0900 +++ b/figure/manager-pipeline.bb Mon Mar 24 23:10:27 2008 +0900 @@ -1,5 +1,5 @@ %%Title: ./manager-pipeline.pdf %%Creator: ebb Version 0.5.2 (+ArtBox) -%%BoundingBox: 0 0 557 276 -%%CreationDate: Mon Mar 24 18:15:49 2008 +%%BoundingBox: 0 0 557 405 +%%CreationDate: Mon Mar 24 22:06:15 2008
--- a/sigos.tex Mon Mar 24 17:49:30 2008 +0900 +++ b/sigos.tex Mon Mar 24 23:10:27 2008 +0900 @@ -69,9 +69,11 @@ % 本文はここから始まる \input{introduction} % はじめに -\input{cell} % Cell -\input{cerium} % Cerium -\input{cerium_dev} % 開発過程 +\input{cell} % Cell +\input{cerium} % Cerium +\input{cerium_dev} % 開発過程 +\input{compare} % 評価と考察 + %\input{conclusion.tex} \bibliographystyle{ipsjunsrt}