Mercurial > hg > Papers > 2008 > akira-master
view paper/cell.tex @ 12:6fbfcbbe56ec
*** empty log message ***
author | akira |
---|---|
date | Sun, 17 Feb 2008 09:32:22 +0900 |
parents | 5ed3b4005142 |
children | 2d92b9d0576e |
line wrap: on
line source
\chapter{CELL BROADBAND ENGINE} \section{Cell broandband engineの構造} ここでは研究・実験題材の対象となったCellというアーキテクチャーについて説 明する。CellはメインプロセッサであるPowerPC Processor Element(PPE)と6個 のデータ処理プロセッサアーキテクチャーSynergistic Processor Element(SPE)からな る非対称なマルチコアプロセッサでなり、高速リングバスで構成されている。(図\ref{fig:Cell}) \begin{figure}[htb] \begin{center} \includegraphics[width=17cm]{./fig/cell.eps} \end{center} \caption{Cell} \label{fig:Cell} \end{figure} \\ PPEはCell Broadband Engineのメインプロセッサで、複数のSPUをコアプロセッ サとして使用することができる汎用プロセッサで、オペレーティングシステムの役割であるメインメモリや外部デバイスへの入出力制御を行う。 %Cellの内部でのデータ通信はDMAで行われCPUに負担をかけない。\\ \subsection{spe} SPEは PPEのような複雑な制御よりも計算を単純に繰り返すマルチメディア系の処理を得意とする演算系プロセッサコアである。(図\ref{fig:spe}参照) SPUはSPUとMFCから構成され、独自規格の命令セットを持っている。各々のSPUはLocal Store(LS)とよばれる256kbのメモリ量を持ち、各SPUから直接参照できる唯一のメモリとして存在する。MFCはメインメモリや他のSPEなどとデータをやり取りするためのユニットで、SPUはチャネルというインタフェースを介してMFCに対してデータ転送などを依頼し、各々のSPUが持つLSにメインメモリ上のデータなどを転送する。 \begin{figure}[htb] \begin{center} \includegraphics[height=8cm]{./fig/spe.eps} \end{center} \caption{spe} \label{fig:spe} \end{figure} % ここでPPEとSPEの詳細必要? %http://www.cellusersgroup.com/modules/feature/co_tutorial/ch01s01s02.php %http://cell.fixstars.com/ps3linux/index.php/1.2 Cellの物理構成 % wikipedia % SPE単体の図とか % とりあえず保留 \section{Cellの基本機能} \subsection{SIMD} Cellは基本的にあらゆるものを並列的に計算できるような構造になっている。SPUに実装されている128ビットレジスタもSIMDを行うために設計されている。通常は32ビットのデータを4回計算できるところを1回の計算で行うことができる反面、すべての演算を128ビットで計算するため、なるべく効果的に演算を行うように工夫する必要がある。 \begin{verbatim} int a,b,c; a = b + c; \end{verbatim} に対しても、128ビット演算を行う。 \subsection{メールボックス} メールボックスは、PPEとSPE間で通信するための機構の一つである。DMA転送はメインメモリとLSとの間で最大16Kバイトの大きなデータの受け渡しを行う。それに対し、メールボックスはステータスの変化などの小さなデータ受け渡し向けで、PPEとSPEとの間で双方向のデータの受け渡しが可能で、FIFOキュー構造になっており、3つの振る舞いができるよう設計されている。(図\ref{fig:Mailbox}参照)\\ \begin{figure}[htb] \begin{center} \includegraphics[width=17cm,height=10cm]{./fig/Mailbox.eps} \end{center} \caption{Mailbox} \label{fig:Mailbox} \end{figure} \begin{enumerate} \item SPU Inbound Mailbox\\ PPEからSPEへデータを渡すためのキューで、最大4個までのデータを蓄積できる。もし、SPEがキューを読むときにキューにデータをない場合は、キューにデータが書き込まれるまで待ち続ける。 \item SPU Outbound Mailbox\\ SPEからPPEへデータを渡すためのキューでSPU Inbound Mailboxと同様にデータがない場合はデータが書き込まれるまで待ち続ける。一番の違いはデータが1個までしかキューに格納できないことである。 \item SPU Outbound Intterupt Mailbox\\ SPU Outbound Mailboxとほとんど同じだが、SPU Outbound Interrupt MailboxではSPEからキューにデータが書き込まれると、PPEに対して割り込みイベントが発生しデータの読み出しタイミングを通知することができる。 \end{enumerate} \section{開発環境} \subsection{libspe2} libspe2とはPPUがspeを扱うためのライブラリ郡である。\cite{libspe2}libspe2はSPE Context Creation、SPE Program Image Handling、SPE Run Control、SPE Event Handling、SPE MFC Problem State Facilities、Direct SPE Access for Applicationsという基本構成でできている。Cellに基本プログラムは次のようになる。 \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 \end{enumerate} \subsection{SPU C/C++言語拡張} SPUは基本的なC言語の一部の機能しか使えないが、拡張も行われている。以下にその一部を示す。\\ \begin{table}[htb] \begin{center} \begin{tabular}{|l|l|} \hline spu\_mfcdma32 & DMA転送を開始する \\ \hline spu\_readch & channelで指定したワードチャネルを読み込み値を代入する\\ \hline spu\_add & ベクタ同士の足し算を行う \\ \hline \end{tabular} \end{center} \end{table} このようにCell特有の関数やアセンブラ命令を学ぶことが必要となる。 \section{SPURS} ここでは現在発表されているCellの開発環境SPURS\cite{spurs}について説明する。 SPURSとは閉じた並列分散と考えることができるCellの環境でいかに効率よく動作させるかということを考たシステムである。Cellの性能を存分に生かすためにはSPEを効率よく使い切ることとあらゆるレベルで並列処理を行うことである。SPEを効率よく使い切るにはSPUの動作を止めることなく、同期を最小限に行う必要がある。\\ そこでSPURSではSPUを効率よく利用するために、PPUに依存せずにSPUコードを選択し、実行することと機能は効率重視で割り切ることを挙げている。そのためにSPUにカーネルを組み込んでいる。\\ アプリケーションを複数SPUで実行するとき、アプリケーションプログラムをできるだけ小さなタスクに分割し、通信ライブラリを用いてタスク間を依存関係で結合する。LS常駐のカーネルは実行可能なタスクを選んで実行する。(図\ref{fig:task})\\ \begin{figure}[htb] \begin{center} \includegraphics[width=15cm]{./fig/spurs_task.eps} \end{center} \caption{spurs\_task} \label{fig:task} \end{figure} また、アプリケーションを分割するとき、プログラムがデータを伴うとき、ジョブに分割し、並べ替えた上で、LS常駐のカーネルはジョブリストからジョブをとってき実行する。 (図\ref{fig:task2})\\ \begin{figure}[htb] \begin{center} \includegraphics[width=15cm]{./fig/spurs_task2.eps} \end{center} \caption{spurs\_task2} \label{fig:task2} \end{figure} またこれらはデータを扱うため、SPURSはパイプライン実行を行う。(図\ref{fig:pipeline2})\\ \begin{figure} \begin{center} \includegraphics{./fig/pipeline2.eps} \end{center} \caption{SPURSのパイプライン実行} \label{fig:pipeline2} \end{figure} SPURSは確かにライブラリとして優れた物であると思われるが、公開はされていない。