comparison 2017/2017_04_25/slide.md @ 24:a05d9335563f

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Sat, 13 May 2017 19:19:41 +0900
parents
children
comparison
equal deleted inserted replaced
23:69d99910fc15 24:a05d9335563f
1 title: Gears
2 author: Tatsuki IHA
3 profile:
4 lang: Japanese
5 code-engine: coderay
6
7 ## 研究目的
8 - 当研究室では 処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している
9 - Gears OS では Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される。 Input Data Gear/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う.
10 - 信頼性の確保はモデルチェック、検証等を使用して行う。この信頼性のための計算は通常の計算とは別の階層のメタ計算として記述する。
11 - 本研究では、 Gears OS の並列処理機構の実装を行う。また、並列処理の検証をメタ計算として記述することで、 並列処理の精度を保証する。
12
13 ## お話
14 - 先生印鑑ください もらった
15 - par goto の話
16
17 ## 今の並列実行
18 - メタレベルで行っている
19 - しかしこの処理は並列実行されることを除けば通常の CbC の goto と同等になるはず
20
21 ```
22 __code createTask2(TaskManager* taskManager, struct Context *task, Integer *integer1, Integer *integer2, Integer *integer3) {
23 task->next = C_add;
24 task->idgCount = 0;
25 task->data[task->idg] = (union Data*)integer1;
26 task->data[task->idg+1] = (union Data*)integer2;
27 task->maxIdg = task->idg + 2;
28 task->odg = task->maxIdg;
29 task->data[task->odg] = (union Data*)integer3;
30 task->maxOdg = task->odg + 1;
31 taskManager->next = C_createTask1;
32 goto meta(context, taskManager->taskManager->TaskManager.spawn);
33 }
34 ```
35
36 ## par goto
37 - ノーマルレベルの並列構文を用意
38 - par goto は 各 Thread で実行される
39 - \_\_exit は この Task の終わりを示している
40 - Taskの context を開放する
41 - 実際には Gears では 直接exitするのではなく, Output Data Gear への書き込み処理をする Code Gear に継続するはず
42
43 ```
44 __code createTask(Integer *integer1, Integer * integer2, Integer *output, __code next(...)) {
45 par goto add(integer1, integer2, output, __exit);
46 goto next(...);
47 }
48 ```
49
50 - 今の Task の Code Gear がこんな感じ
51
52 ```
53 // 今の Code Gear
54 __code add(Integer *integer1, Integer *integer2, Integer *output, next(...)) {
55 ....
56 goto next(...)
57 }
58 ```
59
60 ## par goto
61 - input と output の切り分けを入れたいような
62 - par goto に書き出し先を指定できるようにする?(Todo の lambda みたいに書き出し先を指定する)
63 - 複数outputを受け取る場合は?
64
65 ```
66 par goto A->init(in1, in2, \A -> outPut = A)
67 ```
68
69 ```
70 __code add(Integer *integer1, Integer *integer2, Integer *output) {
71 ...
72 goto next(output); // Output Data Gear commit?
73 }
74 ```