view 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
line wrap: on
line source

title: Gears
author: Tatsuki IHA
profile:
lang: Japanese
code-engine: coderay

## 研究目的
- 当研究室では  処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している
- Gears OS では Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される。 Input Data Gear/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う.
- 信頼性の確保はモデルチェック、検証等を使用して行う。この信頼性のための計算は通常の計算とは別の階層のメタ計算として記述する。
- 本研究では、 Gears OS の並列処理機構の実装を行う。また、並列処理の検証をメタ計算として記述することで、 並列処理の精度を保証する。

## お話
- 先生印鑑ください もらった
- par goto の話

## 今の並列実行
- メタレベルで行っている
- しかしこの処理は並列実行されることを除けば通常の CbC の goto と同等になるはず

```
__code createTask2(TaskManager* taskManager, struct Context *task, Integer *integer1, Integer *integer2, Integer *integer3) {
    task->next = C_add;
    task->idgCount = 0;
    task->data[task->idg] = (union Data*)integer1;
    task->data[task->idg+1] = (union Data*)integer2;
    task->maxIdg = task->idg + 2;
    task->odg = task->maxIdg;
    task->data[task->odg] = (union Data*)integer3;
    task->maxOdg = task->odg + 1;
    taskManager->next = C_createTask1;
    goto meta(context, taskManager->taskManager->TaskManager.spawn);
}
```

## par goto
- ノーマルレベルの並列構文を用意
- par goto は 各 Thread で実行される
- \_\_exit は この Task の終わりを示している
    - Taskの context を開放する
    - 実際には Gears では 直接exitするのではなく, Output Data Gear への書き込み処理をする Code Gear に継続するはず

```
 __code createTask(Integer *integer1, Integer * integer2, Integer *output, __code next(...)) {
    par goto add(integer1, integer2, output, __exit);
    goto next(...);
}
```

- 今の Task の Code Gear がこんな感じ

```
// 今の Code Gear
__code add(Integer *integer1, Integer *integer2, Integer *output, next(...)) {
      ....
      goto next(...)
}
```

## par goto
- input と output の切り分けを入れたいような
- par goto に書き出し先を指定できるようにする?(Todo の lambda みたいに書き出し先を指定する)
- 複数outputを受け取る場合は?

```
par goto A->init(in1, in2, \A -> outPut = A)
```

```
__code add(Integer *integer1, Integer *integer2, Integer *output) {
     ...
      goto next(output); // Output Data Gear commit?
}
```