annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
f5982d0deab5 裕さんが送信した形に修正、裕さんが送信した内容はabstract_yutaka.txt内に保存
Daichi TOMA <e085740@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
1 -title: Cerium における DataSegment API の設計
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
3 -author: 金城裕 and 河野真治
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
4
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 --abstract:
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
7 本研究室では、Cell \cite{Cell}用の並列TaskManager Cerium\cite{kono10c,kono08d}を作成し、Rendering Engine を含む
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 ゲームや並列計算の例題の作成と評価を行ってきた。TaskManager と Rendering Engine はシューティングゲーム
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 やレーシングゲームを記述するのに十分な性能を持っており、台数効果も満足いくものと
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 なっている。しかし、この開発により Ceirum の問題点も明らかになってきている。
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 本論文では、今まので Cerium の構成と問題点を記述し、新しい TaskManager の設計
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 方針を述べる。
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
14 --Cell用Task Manager Cerium
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
15
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
16 Cerium は PS3 (Cell\cite{Cell}) 用のゲームフレームワークであり、ソフトウェアレンダリングを含む
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
17 並列処理を Task 単位で記述する。今は C++ で記述されており、基本的な例題や、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
18 シューティングなどの例題で妥当な性能がでている。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
20 しかし、Taskの種類などが増え、記述が繁雑であるなどの欠点も明らかになっている。この
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
21 論文では Many Core 向けの改良を提案する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
22
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
23 --Ceriumでの並列プログラミングの問題点
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
25 Cerium では、ゲームプログラミング及び、sort や word count などの例題を書いたが、いくつかの問題点が明らかになっている。
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
27 Task の取り扱うデータ型が示されない
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
28 Task 自体は簡単だが Task を構成する方法が繁雑
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
29 Open CL\cite{opencl} に比べても構文的に複雑
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
30 Task の種類が複雑
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
31 Task の依存関係の記述がデータの依存関係と無関係
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
32 Task Scheduler が大きくメモリを圧迫
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
33
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
34 などである。実装方法的にもいくつか問題がある。
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
36 C++ と Task 記述の相性が良くない
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
37 Task Manager が複雑になりすぎ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
38
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
39 Task Scheduler は Queue からTaskを取り出して一つ一つパイプライン実行を行うインタプリタ的な構造を持っている。これが、Task Manager 自体を複雑にする原因になっている。
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 --Continuation based C との相性
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
43 当研究室で開発している Continuation based C \cite{kono08e}は、並列処理の基本単位である Task に対応した code segment を持っている。これを Cerium に対応させようとすると以下のような問題がある。
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
44
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
45 Inteface の型が整合しないとTask同士を接続できない
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
46 Scheduler への接続が特定のInterfaceを要求する
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
47
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
48 どちらも、Code segment の interface (入力と出力) は、決まった形であるべきだと言うことを示している。しかし、Task 自体は様々なデータを取り扱う必要がある。ここに矛盾がある。この矛盾を解決するためには、データ側も基本単位を導入するべきだいうことになる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
49
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
50 <center><img src="fig/DSCS.pdf" alt="DS and CS"></center>
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
51
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
52 Data Segment は、Code segment の双対概念であり、C の構造体に相当する。CbC\cite{cbc-sourceforge} の Code segment は、
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
53
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
54 input interface (関数の引数の型)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
55 output interface (goto 文の引数の型)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
56
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
57 を持っているが、これらを
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
58
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
59 input datasegments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
60 output datasegments
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
61
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
62 に置き換える。つまり、Code segment は、複数の動的に割り当てられた Data segment を持っている(図\ref{DS and CS})。これらは、標準的な構造を持っているので、Interface の型の不整合を避けることができる。
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
63
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
64 Data segment は型を持っていて、その型は実行時に一致している必要がある。分散通信を考えて、Data segment の型は MessagePack \cite{MessagePack} を用いる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
65
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 --C++ との相性
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
68 Cerium の Task は、Cell のspuとppuで共通であり、同じ Task ID で管理されている。これは C++ のオブジェクトとは関係ない。Cerium の開発でわかったのは、Cerium のデータは、Actor の become 的\cite{actor87} に書き換えられるということである。C++のようなポインタを使い合わし、オブジェクトの内部の書き換えで状態を作るようなオブジェクト指向プログラミングと、細分化したTaskを並列に廻す Ceirum のようなシステムとの相性は良くない。
9
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
69 Task の入力と出力は異なる場所に書かれる。処理は、常にダブルバッファを用いて行われているのでそのようになる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
70
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
71 --階層的パイプライン
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
72
9
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
73 プログラム中の自明な並列性は、データ並列とループのパイプラインの二つであり、パイプラインはプログラムの中で、様々なレベルで行われる。Task そのものは入力データから出力データを計算するだけなので単純だが、その入出力データをダブルバッファリングとして切替えたり、適切な並列度を得られるように徐々に生成するのは非常に繁雑になる。
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
74
9
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
75 これらのデータの管理は、中心となるアルゴリズムとは別に並列実行を行うアーキテクチャに特化した処理が必要となる。例えば、分散環境で並列処理するのか、MPIなのか、Cell や Open CL なのかによって異なる。これらを、すべて Task という一括りで扱うと並列計算しない複雑なTaskができてしまう。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
77 これらのデータ管理用の Task は、本質的には Data Segment に対する Iterator であり、ライブラリまたはコンパイラにより生成されるべきものだと考えられる。
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
78
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
79 --Task 内部での Task 生成
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
81 Cerium では、複数の input と output を決めたパイプライン実行が通常であるが、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
82 Task の途中で Main Memory を参照したいことが良くある。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
83
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
84 描画Texture のデータ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
85 SceneGraphの次のノード
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
86
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
87 これらは実行時にしか次のデータのアドレスを決定することができない。これを読み出し前のTaskと
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
88 読み出し後のTaskに分割して、さらにパイプライン実行してやると良いが、この記述は今までの
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
89 Cerium では不可能で、明示的な DMA API を使う必要があった。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
90
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
91 Task内部でTask生成をしてやると、これを記述することが可能だが、TaskManagerの複雑度が上がってしまう
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
92 とう問題点があった。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
93
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 --Data Segment を用いた Cerium の再設計
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95
9
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
96 Cell 用のTaskManager Cerium の再設計の方針としては以下のようになる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
97
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
98 CbCのCode segment の導入
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
99 定型的な Data 単位である Data segment
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
100 Data segment の型の指定
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
101 Task Manager の Code segment による実装
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
102 Code segment (Task) の生成API
9
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
103
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 ---Data Segment の型
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
106 Cerium では Task の入出力は単なる memory buffer だったので型が存在しなかった。今回は Message Pack
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
107 を用いて、Json 的に型を指定する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
108
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
109 Data segment は様々なメモリ上に位置するので、それを識別する必要がある。Many Core 版の Cerium では、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
110
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
111 Main Memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
112 SPU local memory
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
113 Cache
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
114
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
115 の三種類を用意する。これらは DMA や Cache 操作命令を通して移動する。移動したものは同一のものである。Cell SPUのTask や Many Core では、当然だが lcoal memory や Cache に乗らない限りアクセスできない。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
116
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
117 Data segment は、Code Segment に input と output として接続される。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
118
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 ---Data Segment のAPI
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
121 Data Segment は以下のAPIを持っている
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
122
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
123 create
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
124 read
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
125 update
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
126 delete
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
127
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
128 Create は allocate に相当する。型と位置を指定して create する。Main Memory 上の Data segment を読み書きする場合は、local memory または Cache を通してパイプライン的に実行される。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
130 複数のCode Segment から update が起きる場合は、以下の操作を選択する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
131
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
132 Queuing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
133 Update
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
134 Proority Queue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
135
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
136 生成された Data segment は synchronized queue として使うことができる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
137
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 ---Task Dependendcy
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
140 今までの Cerium では、\verb+task->wait_for(task1);+ という形で明示的に Task の依存性を指定していた。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
141 この方法では、\verb+task+ の寿命(既に終了してしまった task を待つような場合)などの問題がある。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
143 しかし、Code Segment は input / outpu Data Segment によって自然な依存関係を持つので、明示的な
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
144 \verb+wait_for+ は必要なくなる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
145
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
146 Code Segment と Data Segment は task を処理して行くうちに自然に消滅してしまう。Persistent な
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
147 データは明示的にデータベースに格納する必要がある。つまり、Data Segment に Persistentという
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
148 位置が存在する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
149
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
150 ---Pipeline Execution
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
152 Cerium では、Task のread/exec/write は三段のパイプラインで実行されていた。Data Segment は
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
153 Code Segment の実行の前に行われるが、他の Code Segment とオーバラップして実行して良い。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
154 Data Segment には、Data Segment の位置を変更するための Code Segment が存在している。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
155
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
156 つまり、Data Segment は複数の Code Segment ( この Data segment を待っている Code segment )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
157 と、Data Segment の位置などを変える Code Segment などが付随している。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
158
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
159 一つのCoreでは、Data Segment に付属する Code segment を順次実行することにより、パイプライン
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
160 を実行する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
161
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
162 Data Segment による依存関係を追い越さなければ並列実行は自由に行われる。これは、Task Scheduling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
163 を担当する Code Segment によってアーキテクチャに合わせて実行される。
11
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
164 (図\ref{DS Pipeline})
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
165
6ba51690320a ref and fig
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
166 <center><img src="fig/DSCS2.pdf" alt="DS Pipeline"></center>
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
167
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 ---Data Segment Storage Type
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
170 Data Segment には位置とIdentityを表す ID が付いている。Many Core 版ではメモリアドレス(64bit)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
171 をIDとして使って良い。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
172
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
173 SPUのようなlocal memoryでは、hash を使ってData Segmentの管理を行う。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
174
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
175 Persistent な Data Segment では ID は使用する Database のtableとkeyを表す。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
176
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 ---Data Segment の処理の記述
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
179 Data Segment は Message Pack でもあり、Json 的な木構造を持っている。これが Cerium の
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
180 SceneGraph に相当する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
181
2
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 --期待される効果
81939cb9da14 add .ind
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183
10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
184 Data Segment API は、これから実装することになるが、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
185
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
186 Cerium の既存の例題が動くこと
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
187
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
188 が一つの基準となる。PS3 が無事ならば PS3 でも動かしたい。Core i7 系、GPGPU 系、Open CL での
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
189 共通のプログラミングフレームワークとして使用することができると期待している。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
190
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
191 詳細なAPIは、これから決めることになると思うが、今のCeriumのAPI
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
192
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
193
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
194