Mercurial > hg > Papers > 2011 > yutaka-jssst
comparison presentation/datasegment.ind @ 14:4b0a368cc858
add presentation
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 26 Sep 2011 10:38:35 +0900 |
parents | |
children | 55787a891c8a |
comparison
equal
deleted
inserted
replaced
13:21684fe357d9 | 14:4b0a368cc858 |
---|---|
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 |