Mercurial > hg > Papers > 2011 > yutaka-jssst
diff paper/datasegment.ind @ 11:6ba51690320a
ref and fig
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 11 Aug 2011 23:23:05 +0900 |
parents | 99f297cb7d34 |
children |
line wrap: on
line diff
--- a/paper/datasegment.ind Thu Aug 11 21:26:04 2011 +0900 +++ b/paper/datasegment.ind Thu Aug 11 23:23:05 2011 +0900 @@ -1,8 +1,10 @@ -title: Cerium における DataSegment API の設計 +-author: 金城裕 and 河野真治 + --abstract: -本研究室では、Cell 用の並列TaskManager Ceriumを作成し、Rendering Engine を含む +本研究室では、Cell \cite{Cell}用の並列TaskManager Cerium\cite{kono10c,kono08d}を作成し、Rendering Engine を含む ゲームや並列計算の例題の作成と評価を行ってきた。TaskManager と Rendering Engine はシューティングゲーム やレーシングゲームを記述するのに十分な性能を持っており、台数効果も満足いくものと なっている。しかし、この開発により Ceirum の問題点も明らかになってきている。 @@ -11,7 +13,7 @@ --Cell用Task Manager Cerium -Cerium は PS3 (Cell) 用のゲームフレームワークであり、ソフトウェアレンダリングを含む +Cerium は PS3 (Cell\cite{Cell}) 用のゲームフレームワークであり、ソフトウェアレンダリングを含む 並列処理を Task 単位で記述する。今は C++ で記述されており、基本的な例題や、 シューティングなどの例題で妥当な性能がでている。 @@ -24,7 +26,7 @@ Task の取り扱うデータ型が示されない Task 自体は簡単だが Task を構成する方法が繁雑 - Open CL に比べても構文的に複雑 + Open CL\cite{opencl} に比べても構文的に複雑 Task の種類が複雑 Task の依存関係の記述がデータの依存関係と無関係 Task Scheduler が大きくメモリを圧迫 @@ -38,14 +40,16 @@ --Continuation based C との相性 -当研究室で開発している Continuation based C は、並列処理の基本単位である Task に対応した code segment を持っている。これを Cerium に対応させようとすると以下のような問題がある。 +当研究室で開発している Continuation based C \cite{kono08e}は、並列処理の基本単位である Task に対応した code segment を持っている。これを Cerium に対応させようとすると以下のような問題がある。 Inteface の型が整合しないとTask同士を接続できない Scheduler への接続が特定のInterfaceを要求する どちらも、Code segment の interface (入力と出力) は、決まった形であるべきだと言うことを示している。しかし、Task 自体は様々なデータを取り扱う必要がある。ここに矛盾がある。この矛盾を解決するためには、データ側も基本単位を導入するべきだいうことになる。 -Data Segment は、Code segment の双対概念であり、C の構造体に相当する。CbC の Code segment は、 +<center><img src="fig/DSCS.pdf" alt="DS and CS"></center> + +Data Segment は、Code segment の双対概念であり、C の構造体に相当する。CbC\cite{cbc-sourceforge} の Code segment は、 input interface (関数の引数の型) output interface (goto 文の引数の型) @@ -55,13 +59,13 @@ input datasegments output datasegments -に置き換える。つまり、Code segment は、複数の動的に割り当てられた Data segment を持っている。これらは、標準的な構造を持っているので、Interface の型の不整合を避けることができる。 +に置き換える。つまり、Code segment は、複数の動的に割り当てられた Data segment を持っている(図\ref{DS and CS})。これらは、標準的な構造を持っているので、Interface の型の不整合を避けることができる。 Data segment は型を持っていて、その型は実行時に一致している必要がある。分散通信を考えて、Data segment の型は MessagePack \cite{MessagePack} を用いる。 --C++ との相性 -Cerium の Task は、Cell のspuとppuで共通であり、同じ Task ID で管理されている。これは C++ のオブジェクトとは関係ない。Cerium の開発でわかったのは、Cerium のデータは、Actor の become 的\cite{Act3} に書き換えられるということである。C++のようなポインタを使い合わし、オブジェクトの内部の書き換えで状態を作るようなオブジェクト指向プログラミングと、細分化したTaskを並列に廻す Ceirum のようなシステムとの相性は良くない。 +Cerium の Task は、Cell のspuとppuで共通であり、同じ Task ID で管理されている。これは C++ のオブジェクトとは関係ない。Cerium の開発でわかったのは、Cerium のデータは、Actor の become 的\cite{actor87} に書き換えられるということである。C++のようなポインタを使い合わし、オブジェクトの内部の書き換えで状態を作るようなオブジェクト指向プログラミングと、細分化したTaskを並列に廻す Ceirum のようなシステムとの相性は良くない。 Task の入力と出力は異なる場所に書かれる。処理は、常にダブルバッファを用いて行われているのでそのようになる。 --階層的パイプライン @@ -157,6 +161,9 @@ Data Segment による依存関係を追い越さなければ並列実行は自由に行われる。これは、Task Scheduling を担当する Code Segment によってアーキテクチャに合わせて実行される。 +(図\ref{DS Pipeline}) + +<center><img src="fig/DSCS2.pdf" alt="DS Pipeline"></center> ---Data Segment Storage Type