# HG changeset patch # User admin@e055734.st.ie.u-ryukyu.ac.jp # Date 1237548232 -32400 # Node ID cb4939e15c420bee3fb63b8443af805597207523 # Parent 730e563bd337ea8863a99d05d19ced45d84068a7 fix diff -r 730e563bd337 -r cb4939e15c42 paper/TODO --- a/paper/TODO Thu Mar 19 13:24:44 2009 +0900 +++ b/paper/TODO Fri Mar 20 20:23:52 2009 +0900 @@ -1,4 +1,4 @@ -1. 研究の目的 +済1. 研究の目的 「Ceriumという独自の」の前に「今回は・本稿では・本研究では」 ぐらい付けた方がいいかな。 Ceriumが本研究室で開発したってこと書いていい。 @@ -9,7 +9,7 @@ 下の方にもそのことを書かないと。待ち時間を無駄にしない様に的な。 -2. Cell +済2. Cell ですます調になってる 2.1、2.2、2.3 @@ -19,13 +19,13 @@ 3 Cell の基本機能 DMA のことは書かないの? -3.1 SIMD +済3.1 SIMD 今回はデータ管理なので、SIMDは要らない気もする -3.2 Mailbox +済3.2 Mailbox これも上に同じ。あとで使っているなら書いてもいい -4. 開発環境 +済4. 開発環境 これ要らないんじゃない? 5. Cerium diff -r 730e563bd337 -r cb4939e15c42 paper/cell.tex --- a/paper/cell.tex Thu Mar 19 13:24:44 2009 +0900 +++ b/paper/cell.tex Fri Mar 20 20:23:52 2009 +0900 @@ -5,24 +5,27 @@ \section{Cell} -Cell\cite{cell}は、マルチコアCPUの1つで、構成は「ヘテロジニアス・マルチコアプロセッサ構成」です。 -汎用的な用途に対応した1種類のコアを用意するのではなく、制御系プロセッサコア(PPE)と演算系プロセッサコア(SPE)という異なる -コアを用意しています。 +Cell\cite{cell}は、マルチコアCPUの1つで、構成は「ヘテロジニアス・マルチコアプロセッサ構成」である。 +汎用的な用途に対応した1種類のコアを用意するのではなく、 +制御系プロセッサコア(PPE)と演算系プロセッサコア(SPE)という異なるコアを用意している。 \subsection{Cellの構成} -Cellはメインプロセッサである 1基の PowerPC Processor Element (PPE) と8基のデータ処理プロセッサアーキテクチャー Synergistic Processor Element (SPE) +Cellはメインプロセッサである 1基の PowerPC Processor Element (PPE) と +8基のデータ処理プロセッサアーキテクチャー Synergistic Processor Element (SPE) からなる非対称なマルチコアプロセッサであり、高速リングバスで構成されている。\cite{cell} -\begin{figure}[hbp] +\begin{figure}[!h] \begin{center} - % \vskip -\lastskip \vskip -370pt + \vskip -\lastskip \vskip -12pt \includegraphics[scale=0.3]{image/Cell-main2.pdf} \caption{Cell の構成要素} \label{fig:cell-main} \end{center} \end{figure} +\newpage + \subsection{PPE} PPE は 複数の SPU をコアプロセッサとして使用することができる汎用プロセッサである。 @@ -35,7 +38,7 @@ 本研究で用いた PS3Linux では、6個の SPU を制御することができる。 -\begin{figure}[hbp] +\begin{figure}[!h] \begin{center} \vskip -\lastskip \vskip -10pt \includegraphics[scale=0.3]{image/PPE.pdf} @@ -46,15 +49,16 @@ \subsection{SPE} -SPE は、 PPE のような複雑なプログラム制御よりも、計算を単純に繰り返すマルチメディア系の処理を得意とする +SPE は、計算を単純に繰り返すマルチメディア系の処理を得意とする 演算系プロセッサである。 SPU (Synergistic Processor Unit) は、SPEの演算処理をおこなう核となるユニットで、 各SPE上に搭載されている。SPUは、PPUとは異なる独自の命令セットを持つ。また、 -LS (Local Store) という256KBのメモリを持ち、メインメモリへのアクセスはMFC (Memory Flow Controller) へ -チャンネルを介して DMA (Direct Memory Access) 命令を送ることで行われる。SPU は直接メインメモリへアクセス -することはできない +LS (Local Store) という256KBのメモリを持ち、メインメモリへのアクセスは +MFC (Memory Flow Controller) へチャンネルを介して +DMA (Direct Memory Access) 命令を送ることで行われる。 +SPU は直接メインメモリへアクセスすることはできない。 -\begin{figure}[hbp] +\begin{figure}[!h] \begin{center} \vskip -\lastskip \vskip -10pt \includegraphics[scale=0.3]{image/SPE.pdf} @@ -63,140 +67,27 @@ \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.3]{image/SIMD.pdf} - \caption{スカラ演算とSIMD演算} - \label{fig:simd} - \end{center} -\end{figure} - -スカラ演算では、4 個の処理結果を得るために 4 回の加算命令を逐次的に実行しなければならない。 -一方、SIMD 演算では、1 回の加算命令で 4 個の処理結果を得ることができる。このように SIMD 演算は -スカラ演算に比べて同じ処理を少ない命令で実行することができる。 -SIMD 演算が行えるのは複数のデータに対して同じ処理の場合である。 -以下のようなデータによって処理が異なる場合には SIMD 演算を行うことができない。 +\subsection{DMA (Directi Memory Access)} -\begin{figure}[hbp] - \begin{center} - \includegraphics[scale=0.3]{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.3]{image/Mailbox.pdf} - \caption{Mailbox} - \label{fig:mailbox} - \end{center} -\end{figure} +DMA (Direct Memory Access) 転送とは、CPUを介さずに周辺装置と +メモリとの間で高速にデータ転送する手段である。 +Cellでは、DMA転送を利用してメインメモリとLS間のデータ転送をおこなう。 +DMA転送の実行は、基本的にSPEプログラムで制御されます。SPEプログラムが、 +メインメモリとLSとの間でDMA転送を実行する手順は以下のとおりである。 \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 に対して割り込みイベントが発生しデータの読み出しタイミングを通知することができる - +\item DMA 転送の命令発行 +\item メインメモリと LS 間 の DMA 転送の実行 +\item DMA 転送の完了待ち \end{enumerate} -\section{開発環境} - -\subsection{libSPE2} +DMA 転送には待ち時間が存在する。\\ -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 に基本プログラムは次のようになる。 +\subsubsection{SPE 内の処理の様子} \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 +\item Task のデータを読み込む +\item 読み込んだデータの処理を行っている間に次の Task のデータを読み込む +\item 処理したデータの転送の間に、2 で読み込んだデータの処理、次の Task のデータの読み込みを行う。 \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.3]{image/SPURS_task.pdf} - \caption{Task} - \label{fig:spurs_task} - \end{center} -\end{figure}