14
|
1 -title: Cerium における DataSegment API の設計
|
|
2
|
|
3 -author: 金城裕 and 河野真治
|
|
4
|
|
5 --affiliation: 琉球大学
|
|
6
|
|
7 --Cell用TaskManager Cerium
|
|
8
|
|
9 もう、Linux が PS3 で動かないのでやっても意味がない。
|
|
10
|
|
11 Open CL と似てる。
|
|
12
|
|
13 --Cerium, Open/CLでの並列プログラミングの問題点
|
|
14
|
|
15 Task の取り扱うデータ型が示されない
|
|
16 Task 自体は簡単だが Task を構成する方法が繁雑
|
|
17 Open CL\cite{opencl} に比べても構文的に複雑
|
|
18 Task の種類が複雑
|
|
19 Task の依存関係の記述がデータの依存関係と無関係
|
|
20 Task Scheduler が大きくメモリを圧迫
|
|
21 C++ と Task 記述の相性が良くない
|
|
22 Task Manager が複雑になりすぎ
|
|
23
|
|
24 --Continuation based C
|
|
25
|
|
26 関数呼び出しの代わりに goto を持つ C
|
|
27
|
|
28 Input Interface, Output Interface
|
|
29
|
|
30 <pre>
|
|
31 __code f(struct input a) { goto g(struct input a) ; }
|
|
32 __code f(struct input a, __code (*g)()) { goto g(struct input b) ; }
|
|
33 </pre>
|
|
34 <img src="fig/code.jpg">
|
|
35
|
|
36 --Code Segment 単位での並列実行
|
|
37
|
|
38 First, make single process code segments.
|
|
39
|
|
40 <img src="fig/single.jpg" id="anim" alt=""/>
|
|
41
|
|
42 <img src="fig/concurrent.jpg" id="anim" alt=""/>
|
|
43
|
|
44
|
|
45 --再接続の問題
|
|
46
|
|
47 type miss match
|
|
48
|
|
49 fix argument type on applications
|
|
50
|
|
51 <img src="fig/cbc.jpg">
|
|
52
|
|
53 汎用の型でないと再接続できない。
|
|
54
|
|
55 <img src="fig/reconnection.jpg" class="incremental">
|
|
56
|
|
57 --Data segment
|
|
58
|
|
59 Code Segment の双対。型を持つメモリの切れ端。
|
|
60
|
|
61 Code Segment の Interface を置き換えるもの。
|
|
62
|
|
63 input datasegments
|
|
64 output datasegments
|
|
65
|
|
66 <img src="fig/datasegment.jpg">
|
|
67
|
|
68 --Data segmentを使ったパイプライン実行
|
|
69
|
|
70 <img src="fig/pipeline.jpg">
|
|
71
|
|
72 --Code segment の参照
|
|
73
|
|
74 Data segment を処理する Code Segment への参照
|
|
75
|
|
76 Pointer ではない
|
|
77 GPGPUやSPUで、実行コードは別空間なことが多い
|
|
78
|
|
79 GPGPUでも、通常のCPUでも両方で動かしたい。ポインタでは困る。
|
|
80
|
|
81 --Task の生成
|
|
82
|
|
83 Cerium では、メインCPUで動くTaskでしか Task を生成できなかった。
|
|
84
|
|
85 SPU側にあまり複雑な Kernel を置けない。(256kb しかメモリがない)
|
|
86
|
|
87 --Data Segement の型
|
|
88
|
|
89 Json で表す
|
|
90
|
|
91 分散計算でも使えるように
|
|
92
|
|
93 Protocol Buffer や MessagePack
|
|
94
|
|
95 ---Data Segment のAPI
|
|
96
|
|
97 Data Segment は以下のAPIを持っている
|
|
98
|
|
99 create
|
|
100 read
|
|
101 update
|
|
102 delete
|
|
103
|
|
104 --Data Segment 更新の Atomicity
|
|
105
|
|
106 Queuing
|
|
107 Update
|
|
108 Proority Queue
|
|
109
|
|
110 生成された Data segment は synchronized queue として使うことができる。
|
|
111
|
|
112 ---Task Dependendcy
|
|
113
|
|
114 Cerium では、
|
|
115
|
|
116 task->wait_for(task1);
|
|
117
|
|
118 としていたが、繁雑。Data dependency が自然に依存関係を決めるので、それを
|
|
119 使うのが良い。
|
|
120
|
|
121 ---Data Segment Storage Type
|
|
122
|
|
123 Main Memory
|
|
124 Local Memory
|
|
125 Cache Memory
|
|
126
|
|
127 Persitent Store
|
|
128
|
|
129
|
|
130
|
|
131
|
|
132
|
|
133
|
|
134
|