comparison 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
comparison
equal deleted inserted replaced
10:99f297cb7d34 11:6ba51690320a
1 -title: Cerium における DataSegment API の設計 1 -title: Cerium における DataSegment API の設計
2
3 -author: 金城裕 and 河野真治
2 4
3 --abstract: 5 --abstract:
4 6
5 本研究室では、Cell 用の並列TaskManager Ceriumを作成し、Rendering Engine を含む 7 本研究室では、Cell \cite{Cell}用の並列TaskManager Cerium\cite{kono10c,kono08d}を作成し、Rendering Engine を含む
6 ゲームや並列計算の例題の作成と評価を行ってきた。TaskManager と Rendering Engine はシューティングゲーム 8 ゲームや並列計算の例題の作成と評価を行ってきた。TaskManager と Rendering Engine はシューティングゲーム
7 やレーシングゲームを記述するのに十分な性能を持っており、台数効果も満足いくものと 9 やレーシングゲームを記述するのに十分な性能を持っており、台数効果も満足いくものと
8 なっている。しかし、この開発により Ceirum の問題点も明らかになってきている。 10 なっている。しかし、この開発により Ceirum の問題点も明らかになってきている。
9 本論文では、今まので Cerium の構成と問題点を記述し、新しい TaskManager の設計 11 本論文では、今まので Cerium の構成と問題点を記述し、新しい TaskManager の設計
10 方針を述べる。 12 方針を述べる。
11 13
12 --Cell用Task Manager Cerium 14 --Cell用Task Manager Cerium
13 15
14 Cerium は PS3 (Cell) 用のゲームフレームワークであり、ソフトウェアレンダリングを含む 16 Cerium は PS3 (Cell\cite{Cell}) 用のゲームフレームワークであり、ソフトウェアレンダリングを含む
15 並列処理を Task 単位で記述する。今は C++ で記述されており、基本的な例題や、 17 並列処理を Task 単位で記述する。今は C++ で記述されており、基本的な例題や、
16 シューティングなどの例題で妥当な性能がでている。 18 シューティングなどの例題で妥当な性能がでている。
17 19
18 しかし、Taskの種類などが増え、記述が繁雑であるなどの欠点も明らかになっている。この 20 しかし、Taskの種類などが増え、記述が繁雑であるなどの欠点も明らかになっている。この
19 論文では Many Core 向けの改良を提案する。 21 論文では Many Core 向けの改良を提案する。
22 24
23 Cerium では、ゲームプログラミング及び、sort や word count などの例題を書いたが、いくつかの問題点が明らかになっている。 25 Cerium では、ゲームプログラミング及び、sort や word count などの例題を書いたが、いくつかの問題点が明らかになっている。
24 26
25 Task の取り扱うデータ型が示されない 27 Task の取り扱うデータ型が示されない
26 Task 自体は簡単だが Task を構成する方法が繁雑 28 Task 自体は簡単だが Task を構成する方法が繁雑
27 Open CL に比べても構文的に複雑 29 Open CL\cite{opencl} に比べても構文的に複雑
28 Task の種類が複雑 30 Task の種類が複雑
29 Task の依存関係の記述がデータの依存関係と無関係 31 Task の依存関係の記述がデータの依存関係と無関係
30 Task Scheduler が大きくメモリを圧迫 32 Task Scheduler が大きくメモリを圧迫
31 33
32 などである。実装方法的にもいくつか問題がある。 34 などである。実装方法的にもいくつか問題がある。
36 38
37 Task Scheduler は Queue からTaskを取り出して一つ一つパイプライン実行を行うインタプリタ的な構造を持っている。これが、Task Manager 自体を複雑にする原因になっている。 39 Task Scheduler は Queue からTaskを取り出して一つ一つパイプライン実行を行うインタプリタ的な構造を持っている。これが、Task Manager 自体を複雑にする原因になっている。
38 40
39 --Continuation based C との相性 41 --Continuation based C との相性
40 42
41 当研究室で開発している Continuation based C は、並列処理の基本単位である Task に対応した code segment を持っている。これを Cerium に対応させようとすると以下のような問題がある。 43 当研究室で開発している Continuation based C \cite{kono08e}は、並列処理の基本単位である Task に対応した code segment を持っている。これを Cerium に対応させようとすると以下のような問題がある。
42 44
43 Inteface の型が整合しないとTask同士を接続できない 45 Inteface の型が整合しないとTask同士を接続できない
44 Scheduler への接続が特定のInterfaceを要求する 46 Scheduler への接続が特定のInterfaceを要求する
45 47
46 どちらも、Code segment の interface (入力と出力) は、決まった形であるべきだと言うことを示している。しかし、Task 自体は様々なデータを取り扱う必要がある。ここに矛盾がある。この矛盾を解決するためには、データ側も基本単位を導入するべきだいうことになる。 48 どちらも、Code segment の interface (入力と出力) は、決まった形であるべきだと言うことを示している。しかし、Task 自体は様々なデータを取り扱う必要がある。ここに矛盾がある。この矛盾を解決するためには、データ側も基本単位を導入するべきだいうことになる。
47 49
48 Data Segment は、Code segment の双対概念であり、C の構造体に相当する。CbC の Code segment は、 50 <center><img src="fig/DSCS.pdf" alt="DS and CS"></center>
51
52 Data Segment は、Code segment の双対概念であり、C の構造体に相当する。CbC\cite{cbc-sourceforge} の Code segment は、
49 53
50 input interface (関数の引数の型) 54 input interface (関数の引数の型)
51 output interface (goto 文の引数の型) 55 output interface (goto 文の引数の型)
52 56
53 を持っているが、これらを 57 を持っているが、これらを
54 58
55 input datasegments 59 input datasegments
56 output datasegments 60 output datasegments
57 61
58 に置き換える。つまり、Code segment は、複数の動的に割り当てられた Data segment を持っている。これらは、標準的な構造を持っているので、Interface の型の不整合を避けることができる。 62 に置き換える。つまり、Code segment は、複数の動的に割り当てられた Data segment を持っている(図\ref{DS and CS})。これらは、標準的な構造を持っているので、Interface の型の不整合を避けることができる。
59 63
60 Data segment は型を持っていて、その型は実行時に一致している必要がある。分散通信を考えて、Data segment の型は MessagePack \cite{MessagePack} を用いる。 64 Data segment は型を持っていて、その型は実行時に一致している必要がある。分散通信を考えて、Data segment の型は MessagePack \cite{MessagePack} を用いる。
61 65
62 --C++ との相性 66 --C++ との相性
63 67
64 Cerium の Task は、Cell のspuとppuで共通であり、同じ Task ID で管理されている。これは C++ のオブジェクトとは関係ない。Cerium の開発でわかったのは、Cerium のデータは、Actor の become 的\cite{Act3} に書き換えられるということである。C++のようなポインタを使い合わし、オブジェクトの内部の書き換えで状態を作るようなオブジェクト指向プログラミングと、細分化したTaskを並列に廻す Ceirum のようなシステムとの相性は良くない。 68 Cerium の Task は、Cell のspuとppuで共通であり、同じ Task ID で管理されている。これは C++ のオブジェクトとは関係ない。Cerium の開発でわかったのは、Cerium のデータは、Actor の become 的\cite{actor87} に書き換えられるということである。C++のようなポインタを使い合わし、オブジェクトの内部の書き換えで状態を作るようなオブジェクト指向プログラミングと、細分化したTaskを並列に廻す Ceirum のようなシステムとの相性は良くない。
65 Task の入力と出力は異なる場所に書かれる。処理は、常にダブルバッファを用いて行われているのでそのようになる。 69 Task の入力と出力は異なる場所に書かれる。処理は、常にダブルバッファを用いて行われているのでそのようになる。
66 70
67 --階層的パイプライン 71 --階層的パイプライン
68 72
69 プログラム中の自明な並列性は、データ並列とループのパイプラインの二つであり、パイプラインはプログラムの中で、様々なレベルで行われる。Task そのものは入力データから出力データを計算するだけなので単純だが、その入出力データをダブルバッファリングとして切替えたり、適切な並列度を得られるように徐々に生成するのは非常に繁雑になる。 73 プログラム中の自明な並列性は、データ並列とループのパイプラインの二つであり、パイプラインはプログラムの中で、様々なレベルで行われる。Task そのものは入力データから出力データを計算するだけなので単純だが、その入出力データをダブルバッファリングとして切替えたり、適切な並列度を得られるように徐々に生成するのは非常に繁雑になる。
155 一つのCoreでは、Data Segment に付属する Code segment を順次実行することにより、パイプライン 159 一つのCoreでは、Data Segment に付属する Code segment を順次実行することにより、パイプライン
156 を実行する。 160 を実行する。
157 161
158 Data Segment による依存関係を追い越さなければ並列実行は自由に行われる。これは、Task Scheduling 162 Data Segment による依存関係を追い越さなければ並列実行は自由に行われる。これは、Task Scheduling
159 を担当する Code Segment によってアーキテクチャに合わせて実行される。 163 を担当する Code Segment によってアーキテクチャに合わせて実行される。
164 (図\ref{DS Pipeline})
165
166 <center><img src="fig/DSCS2.pdf" alt="DS Pipeline"></center>
160 167
161 ---Data Segment Storage Type 168 ---Data Segment Storage Type
162 169
163 Data Segment には位置とIdentityを表す ID が付いている。Many Core 版ではメモリアドレス(64bit) 170 Data Segment には位置とIdentityを表す ID が付いている。Many Core 版ではメモリアドレス(64bit)
164 をIDとして使って良い。 171 をIDとして使って良い。