changeset 1:3d64a1fa8207

update
author Yutaka_Kinjyo
date Sat, 12 Mar 2011 21:56:38 +0900
parents 7ee2c99e00db
children 68e53d04ce7c
files paper/ARC195OS117-32.tex paper/images/cell-main.bb paper/images/cell-main.pdf
diffstat 3 files changed, 99 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/paper/ARC195OS117-32.tex	Sat Mar 12 05:09:28 2011 +0900
+++ b/paper/ARC195OS117-32.tex	Sat Mar 12 21:56:38 2011 +0900
@@ -2,6 +2,7 @@
 \input{dummy-utf8}
 
 \documentclass[techrep]{ipsjpapers}
+\usepackage[dvipdfmx]{graphicx}
 
 % 巻数,号数などの設定
 %\setcounter{巻数}{51}
@@ -83,67 +84,126 @@
 \section{はじめに}
 
 %学生実験用にゲームフレームワーク Cerium を開発した。Cerium の TaskManager は
-並列プログラミング用のフレームーク Cerium TaskManager を開発している。Cerium は PS3/Cell, MacOSX, Linux
-上で 動作する。 Cerium TaskManager では、関数やサブルーチンを Task として書く。Task は TaskManager で管理され、Task 同士の依存関係
-に従って、並列実行される。
+我々は並列プログラミング用のフレームーク Cerium TaskManager を開発している。Cerium は PS3/Cell, MacOSX, Linux
+上で 動作する。 それぞれのプラットフォームで同じプログラムで動作できる。
+Cerium TaskManager では、関数やサブルーチンを Task として扱う。Task は Task 同士の依存関係
+に従って、実行される。
 Cell 上の場合、各SPEに Task が割り当てられ、並列に実行される。
 Cerium は TaskManager に加え、SceneGraph, RenderingEngine で構成され、この3つでゲームフレームワークとして
 動作する。
 %RenderingEngine は Task に分割され、並列に処理される。
-Task には input データ、output データ、依存関係を設定する。Task ベースでプログラミングする場合、
-処理をTaskに分割、input, output データの分割、Task同士の依存関係に工夫が必要になってくる。
-問題の洗い出しのために、ゲームや、WordCount, Sort を例題として実装した。
+Task には input データ、output データ、依存関係を設定する。
+%Task ベースでプログラミングする場合、処理をTaskに分割、input, output データの分割、Task同士の依存関係に工夫が必要になってくる。
+ゲームや、WordCount, Sort を例題として実装した。
 TaskManagerと、TaskManager を使うユーザ側の両方の視点から、
-実装の際に直面した問題を報告し、その改良の
-方法と効果について報告する。
+実装の際に直面した問題とその改良方法と効果について報告する。
+
+%}{
+
+\section{Cell Broadband Engine}
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.5]{./images/cell-main.pdf}
+  \end{center}
+  \caption{Cell Broadband Engine Architecture}
+  \label{fig:cell_arch}
+\end{figure}
+
+Cell Broadband Engine %\cite{cell}
+ は、ソニー・コンピュータエンタテインメント、
+ソニー、IBM , 東芝によって開発されたマルチコア CPU である。
+Cell は、1基の制御系プロセッサコア PPE ( PowerPC Processor Element ) と
+8基の演算系プロセッサコア SPE ( Synergistic Processor Element ) で構成される。
+各プロセッサコアは、EIB (Element Interconnect Bus)
+と呼ばれる高速なバスで接続されている。また、EIB はメインメモリや
+外部入出力デバイスとも接続されていて、
+各プロセッサコアは EIB を経由してデータアクセスをおこなう。
+PPE はメインメモリにアクセスすることができるが、SPE は、246KBのLSにのみ直接アクセスできる。
+DMAを用いると、SPE はメインメモリにアクセスできる。
+本研究で用いた PS3Linux (Yellow Dog Linux 6.2) では、6 個の SPE を
+使うことが出来る ( \figref{fig:cell_arch} )
+この PPE と SPE の2種類の CPU を、プログラマ自身が用途に
+合わせて適切に使い分けるように考慮する必要がある。
+
+\subsection{Mailbox} \label{sec:mail-box}
+Cellの機能にMailboxがある。
+Mailbox は PPEとSPEとの間を双方向で、32bitのデータの受け渡しが可能であり、FIFOキュー構造になっている。
+MailboxのひとつにSPEからPPEへデータを渡すためのキュー、SPU Outbound Mailbox があり、最大1個までのデータを蓄積できる。
+もし、Outbound Mailbox がすでに1個のデータを保持している場合には、
+SPEプログラムはPPEプログラム側でキューからデータを読み出すまでデータの書き込みを待ち続ける。
+
+\subsection{DMA転送} \label{sec:dma}
+SPE は LS 以外のメモリに
+直接アクセスすることができず、PPE が利用するメインメモリ上のデータに
+アクセスするには DMA (Direct Memory Access) を用いる。
+DMA 転送とは、CPU を介さずに周辺装置とメモリとの間でデータ転送ことで、
+Cell の場合はメインメモリと LS 間でデータの転送を行う。手順としては以下の様になる。
+
+\begin{enumerate}
+  \item SPE プログラムが MFC (Memory Flow Controller) に対して
+    DMA 転送命令を発行
+  \item MFC が DMA Controller を介して DMA 転送を開始。
+    この間、SPE プログラムは停止しない。
+  \item DMA 転送の終了を待つ場合、SPE プログラム内で転送の完了を待つ
+\end{enumerate}
+
+この時、DMA 転送するデータとアドレスにはいくつか制限がある。
+転送データが 16 バイト以上の場合、データサイズは 16 バイトの倍数で、
+転送元と転送先のアドレスが 16 バイト境界に揃えられている必要がある。
+転送データが 16 バイト未満の場合、データサイズは 1,2,4,8 バイトで、
+転送サイズに応じた自然なアライメントである (転送サイズのバイト境界に
+揃えられている) ことが条件となる。
+
 
 %}{
 
 \section{Cerium の改良}\label{sec:Enum}\label{sec:item}
 
-主に Cell 上での速度比較を行う。Cell では PPE一基、SPE6基を用いて処理を実行することができる。
-...Cell の説明
-
-
-Cerium TaskManager では PPE で Task を定義し、SPE に Task を割り振る。
-
-%Task はある程度の量をまとめて TaskList 
-%として SPE に割り当てられる。TaskList は MainMemory に置かれ、そのアドレスが Cell の Mail 機能を使って SPE に
-%通知される。SPE は受け取った Mail のアドレスをもとに、DMA転送を用いて、SPE の LocalStore にコピーされる。
-
-SPE は DMA転送によって、Taskと、Taskで用いるデータを受け取る。そのため、転送をパイプライン化し、DMA転送の待ち
+Cerium TaskManager では PPE で Task を定義し、PPE から SPE に Task を割り振る。
+SPE は DMA転送(\ref{sec:dma})によって、Taskと、Taskで用いるデータを受け取る。
+DMA転送を用いる場合、待ち時間が発生し、その間SPEの処理が止まる。
+そのため、転送をパイプライン化し、DMA転送の待ち
 を隠す必要がある。Cerium では SPE にスケジューラを持ち Task とデータ の 読み込み、実行、書き出し
 をパイプライン化している。
 
-\subsection{Mailbox}
 
-Task には依存関係が設定でき、PPE 側で解決する。そのために、実行完了した Task の情報を SPE 側から PPE 側に Mail で通知する方法を取った。
-Mail は Mailbox で管理される。
-PPEとSPEとの間で双方向で、32bitのデータの受け渡しが可能で、FIFOキュー構造になっている。
-SPEからPPEへデータを渡すためのキュー、SPU Outbound Mailbox があり、最大1個までのデータを蓄積できる。
-もし、Outbound Mailbox がすでに1個のデータを保持している場合には、
-SPEプログラムはPPEプログラム側でキューからデータを読み出すまでデータの書き込みを待ち続ける。
+\subsection{MailQueue} 
+Task には依存関係が設定でき、PPE 側で解決する。実行完了した Task の情報を SPE 側から PPE 側に 通知するために CellのMailbox機能を使用した(\ref{sec:mail-box})。
+SPEスケジューラは Task が処理完了になる毎に、Mailを Outbound Mailbox に書きこむので、PPE側でMailの読み込みが間に合わないと、待ちが入り、SPEの処理が
+止まってしまう。
 
-\subsection{MailQueue}
-SPEスケジューラは Task が処理完了になる毎に、Mailを書きこむので、PPE側でMailの読み込みが間に合わないと、待ちが入ってしまう。
-
-数字(mail time あたり?ちゃんと見れるといいけど)
+%数字(mail time あたり?ちゃんと見れるといいけど)
 
 これを解消するためにMailQueueを導入した。MailQueueは、SPEから書き込みきれないMailを一時的に退避させるものである。
 TaskListを書きだす時に溜まったQueueの中身をすべて書き出す。
 Task完了を知らせる Mail書き出しの待ちは、Task毎から、TaskList毎になる。MailQueueを有効にしたときの実行速度は以下にようになる
 
+32.442749 FPS なし
+
+41.350211 FPS あり
+
+
+これは、PPE側のMailチェックのやり方に関係している。
+PPE では mail をチェックするAPIを用いて、mail の有無を確認し、
+
+\subsection{PipeLine化}
+RenderinEngine...
+
+
+
+DrawSpan...
+
 数字
 
-これは、PPE側のMailチェックのやり方に関係している。云々カンヌン。
-
-\subsection{PipeLine化}
-
+ほらね?
 
 \subsection{Memory Access}
 
 WordCount を Cerium を用いて実装した。 Task 
 
+ちゃんとデータ配分しないとまずい
+
 
 \subsection{SPEでのキャッシュ効果}
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/cell-main.bb	Sat Mar 12 21:56:38 2011 +0900
@@ -0,0 +1,5 @@
+%%Title: ./cell-main.pdf
+%%Creator: extractbb 20100328
+%%BoundingBox: 0 0 423 300
+%%CreationDate: Sat Mar 12 19:57:47 2011
+
Binary file paper/images/cell-main.pdf has changed