# HG changeset patch # User ikkun # Date 1494810522 -32400 # Node ID 5d927ae5167bda7ecf20e8e977ebb3da32a6fdbf # Parent a11d90aa9fbcbf45ff533f5ed65b5d654ea6689e# Parent 86c8e88c6562727a68e1657ac10f2577aa841a63 merge diff -r a11d90aa9fbc -r 5d927ae5167b presen/slide.md --- a/presen/slide.md Mon May 15 10:03:38 2017 +0900 +++ b/presen/slide.md Mon May 15 10:08:42 2017 +0900 @@ -7,7 +7,9 @@ # メタ計算を使った並列処理 - 並列処理のプラグラミングは、処理のパイプライン - +- 当研究室ではメタ計算をサポートする言語として Continuation based C (CbC) を開発している +- CbC は Code Gear と Data Gear という処理とデータの単位を持っており、メタ計算を行うための Meta Code Gear、Meta Data Gear がある。 +- Gears OS は CbC を用いて記述されている。 # Code Gear Data Gear @@ -16,10 +18,13 @@ - Code Gear の処理の移行は goto を使って行い、この移行の仕方を継続という。 - goto による移行は戻り値を持たないため、スタックを積む必要のない、スタックに積まない継続を軽量継続と呼ぶ。 -# Output Data Gear Input Data Gear +# Code Gear Data Gear を用いた計算 - Code Gear の処理の実行は、接続された Data Gear が揃ってから実行される。 - Data Gear には Output Data Gear と Input Data Gear があり、Code Gear は接続された Data Gear 以外を変更することはない。 +- そのため通常の計算ではポインタを気にすることはなく、ポインタ演算はメタ計算部分で行われる。 +- Code Gear の処理は tail call のみで遷移を行う関数型プログラミングである。 +- agda に変換することができ、プログラムの正しさを証明できる。 # メタ計算 @@ -29,12 +34,11 @@ # Gears OS -- Gears OS はData Gear Code Gear というGear で構成される。 -- Gears OS は Code Gear,Data Gearの単位を用いて開発されており、CbCで記述される。 -- Meta Code Gearは ノーマルのCode Gearの直後に遷移され、メタ計算を実行する。 -- Meta Code Gear でOSの機能であるメモリ管理やスレッド管理を行う。 +- Gears OS は Code Gear、Data Gearの単位を用いて開発されており、CbCで記述される。 +- Meta Code Gear は 通常の Code Gear の直後に遷移され、メタ計算を実行する。 +- Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。 -# Gears OS の並列性 +# Gears OS の並列性 - Code Gear が処理するのに必要なinput Data Gear と処理実行後に出力される Input Data Gear の組を Task と呼ぶ。 - Code Gear は Task 以外とは依存関係がない @@ -44,4 +48,45 @@ message -# \ No newline at end of file +# Gears OS の柔軟性 + +- Gears OS はメタ計算を使用することで +-- データ拡張や機能の追加 +-- GPU 等の様々なアーキテクチャでも同じプログラムの動作 +- メタ計算は通常の処理と階層を分けて処理を行う。 + +
+ message +
+ +# Gears OS の構成 + +- Gears OS は以下の要素で構成される。 + +# Context + +- Gears OS は Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。 +- Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある。 +- Context は 接続に必要な Code/Data Gear のリスト、 Data Gear を確保するためのメモリ空間、実行する Code Gear、Code Gear の実行に必要な Input Data Gear のカウンタ等をもっている。 + +# TaskManager + +- TaskManager は Task、Worker の生成、Worker に生成した Task の送信、生成した Worker の終了処理等を行う。 + +# Worker + +- Worker は thread と実行する Task が入っている Queue を持っている。 +- Worker は TaskManager から送信された Task を Queue から取り出し、Code Gear を実行する。 +- Task は Context なので、Code Gear の実行に必要な Input Data Gear はその Context から参照される。 +- Code Gear を実行した後は出力される Output Data Gear から依存関係を解決する。 + +# 依存関係の解決 + + + + + + + + +