changeset 18:a9a91f4a6688

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Tue, 19 Jul 2016 20:23:58 +0900
parents 8e98a8e122e6
children fe6ea065e36a
files 2016/2016_06_14/slide.md 2016/2016_07_05/slide.md 2016/2016_07_12/slide.md 2016/2016_07_19/slide.md
diffstat 4 files changed, 127 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/2016/2016_06_14/slide.md	Tue Jul 19 20:23:58 2016 +0900
@@ -0,0 +1,14 @@
+title: Gears OS
+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 は 依存関係がある並列処理を行うことが出来ない。 今研究ではGears OS の依存関係の解決を目標とする
+
+# 今週
+
+# hoge
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/2016/2016_07_05/slide.md	Tue Jul 19 20:23:58 2016 +0900
@@ -0,0 +1,12 @@
+title: Gears OS
+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 は 依存関係がある並列処理を行うことが出来ない。 今研究ではGears OS の依存関係の解決を目標とする
+
+# 今週
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/2016/2016_07_12/slide.md	Tue Jul 19 20:23:58 2016 +0900
@@ -0,0 +1,12 @@
+title: Gears OS
+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 は 依存関係がある並列処理を行うことが出来ない。 今研究ではGears OS の依存関係の解決を目標とする
+
+# 今週
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/2016/2016_07_19/slide.md	Tue Jul 19 20:23:58 2016 +0900
@@ -0,0 +1,89 @@
+title: Gears OS
+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 は 依存関係がある並列処理を行うことが出来ない。 今研究ではGears OS の依存関係の解決を目標とする
+
+# 今週
+- 依存関係のコードを書いてる途中
+
+# どう実装するか?
+- とりあえず足し算した後に掛け算するコードを例として動かす
+    - 2つのInput Data Gear をとって, 1つのOutput Data Gear を出す
+    - (4+5) * 5 とか
+
+# どう実装するか?
+- とりあえず足し算した後に掛け算するコードを例として動かす
+- Data Gear に その Data Gear を待っている Task を持たせる
+    - Task は Queue に持たせる(Meta Data Gear)
+- Task には Input Data Gear の数を持たせる
+- Task を実行すると、 Output Data Gear を作るため、そのOutput Data Gear の持っている Queue から Task にアクセスして Input Data Gear の数をデクリメントする
+- Task の Input Data Gear の数が0なら Active Queue に inqueue する
+
+# Data Gear にTask を設定するコード
+- このコードの例だと Data Gear の offset から Meta Data Gear である Queue をとってきて、Task を追加する
+
+```
+__code waitFor(struct Context* context, struct Task* slave, struct Element* element, union Data* data) {
+    // この辺をstub にやりたい, 型をどうやって取ってくるか
+    struct Integer integer = (struct Integer *)data;
+    struct Queue waitMeTasks = (struct Queue *)(integer + integer->mDataOffset);
+
+    element->data = (union Data *)slave;
+    goto meta_waitFor(context, waitMeTasks, PutQueue1);
+}
+
+__code meta_waitFor(struct Context* context, struct Queue* queue, enum Code next) {
+    context->data[Queue] = (union Data *)queue;
+    goto (context->code[next])(context);
+}
+```
+
+# Task が完了した後に動かすコード
+- Output Data Gear をとって、 Queue の中のTaskから idsCount を デクリメント
+
+```
+__code checkTaskFinish1(struct Context* context, struct Data* data) {
+    struct Integer integer = (struct Integer *)data;
+    struct Queue waitMeTasks = (struct Queue *)(integer + integer->mDataOffset);
+    context->next = CheckTaskFinish2;
+    goto meta_checkTaskFinish1(context, waitMeTasks, CheckTaskFinish2);
+}
+
+/*
+ * ready input data Gear for waitme task
+ */
+__code checkTaskFinish2(struct Context* context) {
+    struct Task task = ((struct Task) element -> data);
+    task->idsCount--;
+    goto meta(context, CheckTaskFinish1);
+}
+```
+
+# Task を active, wait の Queue に入れる
+
+```
+__code spawnTask(struct Context* context, struct Task* task, struct Element* element, struct Queue* activeQueue, struct Queue* waitQueue) {
+    if (task->idsCount == 0) {
+        // enqueue activeQueue
+        goto meta_spawnTask(context, activeQueue, PutQueue1);
+    } else {
+        // enqueue waitQueue
+        goto meta_spawnTask(context, waitQueue, PutQueue1);
+    }
+}
+
+__code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) {
+    context->data[Queue] = (union Data *)queue;
+    goto (context->code[next])(context);
+}
+```
+
+# 次
+- Task を実行した後に checkTaskFinish1 を呼ぶ
+- TaskManager が spawnTask を呼ぶ