annotate 2018/2018_01_30/slide.md @ 31:b7908b2f86c0 default tip

Update slide 2018_01_30
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Tue, 30 Jan 2018 18:43:00 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: Gears OS による並列処理
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: Tatsuki IHA
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile:
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 lang: Japanese
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 code-engine: coderay
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 ## 研究目的
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 - 当研究室では 処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 - Gears OS では Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される。 Input Data Gear/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う.
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 - 信頼性の確保はモデルチェック、検証等を使用して行う。この信頼性のための計算は通常の計算とは別の階層のメタ計算として記述する。
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 - また、 メタ計算は信頼性の他に CPU, GPU などの実行環境の切り替え, データ拡張等の柔軟性を提供する。
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 - 本研究では、 Gears OS の並列処理機構の実装を行う。また、並列処理の検証をメタ計算として記述することで、 並列処理の信頼性を保証する。
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 ## 今週
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 - 修論書いてます
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 - Interface の チャプターを追加しました
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 - par goto で実行される code gear の context 生成
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 - Go で twice を書いてみて Gears と測定してみました
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 ## par goto で実行される Code Gear の Context 生成
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 - Interface として属してない Code Gear を並列実行した際の stub を自動生成出来るようにした
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 - ルールとしてファイル名と同じ Code Gear でないといけない
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 - しかし、 GPU を stub で切り替えるのはまだ
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 ``` c
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 __code add(struct Integer* input1, struct Integer* input2, __code next(struct Integer* output, ...)) {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 output->value = input1->value + input2->value;
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 printf("%d + %d = %d\n", input1->value, input2->value, output->value);
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 goto next(output, ...);
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 __code add(struct Context *context,struct Integer* input1, struct Integer* input2, enum Code next,struct Integer **O_output) {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 Integer* output = *O_output;
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 output->value = input1->value + input2->value;
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 printf("%d + %d = %d\n", input1->value, input2->value, output->value);
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 *O_output = output;
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 goto meta(context, next);
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 __code add_stub(struct Context* context) {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 Integer* input1 = &context->data[context->idg + 0]->Integer;
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 Integer* input2 = &context->data[context->idg + 1]->Integer;
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 enum Code next = context->next;
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 Integer** O_output = (Integer **)&context->data[context->odg + 0];
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 goto add(context, input1, input2, next, O_output);
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 ```
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 ## go lang な twice を書いてみました
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 - Gears の並列処理の比較として書いた
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 - やっぱり go ルーチンは par goto と似てる
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 - データの待ち合わせは channelで行われる
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 - channel で待つような構文を書く必要がある
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 - Gears は待つような構文ではなく, output Data Gear を書き出す(``goto next(Output1, ...)``) 処理で データの待ち合わせ
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 ``` c
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 ...
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 func twice(list []int, prefix int, index int, c chan []int) {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 for i := 0; i < prefix; i++ {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 list[prefix*index+i] = list[prefix*index+i] * 2;
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 c <- list
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 func main() {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 ...
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 start := time.Now()
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 c := make(chan []int)
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 for i :=0; i < *split; i++ {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 go twice(list, prefix, i, c);
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 for i :=0; i < *split; i++ {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 <- c
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 t := time.Now()
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 elapsed := t.Sub(start)
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 fmt.Println(elapsed)
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 for i :=0; i < *length; i++ {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 if (i*2 != list[i]) {
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 fmt.Println("wrong result")
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 }
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 ```
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 ## 比較(firefly)
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 - firefly
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 - cpu は 12
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 - twice
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 - 長さ 2^24
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 - タスク数 64
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 - シングルコアだと go が10倍くらい速い
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 - context の生成で時間かかってる?
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 <div style="text-align: center;">
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 <img src="./pictures/firefly.svg" alt="message" width="800">
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 </div>
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 ## 比較(dalmore)
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 - dalmore
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 - cpu は 36
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 - twice
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 - 長さ 2^24
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 - タスク数 64
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 <div style="text-align: center;">
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 <img src="./pictures/dalmore.svg" alt="message" width="800">
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 </div>
b7908b2f86c0 Update slide 2018_01_30
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115