Mercurial > hg > Members > innparusu > slides
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 |
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 |