Mercurial > hg > Papers > 2011 > yutaka-sigos
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でのキャッシュ効果}