Mercurial > hg > Papers > 2017 > ikkun-sigos
changeset 19:e47c2015e1e5
add slide
author | mir3636 |
---|---|
date | Mon, 15 May 2017 11:56:15 +0900 |
parents | 08e14e7cf5f8 |
children | 14c29d30af86 |
files | presen/slide.md |
diffstat | 1 files changed, 119 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/slide.md Mon May 15 11:56:15 2017 +0900 @@ -0,0 +1,119 @@ +title: Gears OS における並列処理 +author: Takui Higashionna +profile: +lang: Japanese +code-engine: coderay + +# メタ計算を使った並列処理 + +- 並列処理のプラグラミングは、処理のパイプライン +- 当研究室ではメタ計算をサポートする言語として Continuation based C (CbC) を開発している +- CbC は Code Gear と Data Gear という処理とデータの単位を持っており、メタ計算を行うための Meta Code Gear、Meta Data Gear がある。 +- Gears OS は CbC を用いて記述されている。 + +# Code Gear Data Gear + +- Code Gear Data Gear とはプラグラムを分解し、処理の部分を Code Gear int や文字列などの部分を Data Gear という単位で分ける。 +- Code Gearの処理はその処理に必要な Data Gear が揃ってから行われる。 +- Code Gear の処理の移行は goto を使って行い、この移行の仕方を継続という。 +- goto による移行は戻り値を持たないため、スタックを積む必要のない、スタックに積まない継続を軽量継続と呼ぶ。 + +# 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 に変換することができ、プログラムの正しさを証明できる。 + +# メタ計算 + +- メタ計算は通常の計算のための計算である +- 並列処理の依存関係の解決、GPUなどのアーキテクチャ実行のための処理を行う。 +- Gears OSではメタ計算は Meta Code Gear、Meta Data Gear で表現される。 + +# Gears OS + +- Gears OS は Code Gear、Data Gearの単位を用いて開発されており、CbCで記述される。 +- Meta Code Gear は 通常の Code Gear の直後に遷移され、メタ計算を実行する。 +- Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。 + +# Gears OS の並列性 + +- Code Gear が処理するのに必要なinput Data Gear と処理実行後に出力される Input Data Gear の組を Task と呼ぶ。 +- Code Gear は Task 以外とは依存関係がない +- 依存関係が明確化されている Code Gear Data Gear で記述することで、並列化し易い。 + +<div style="text-align: center;"> + <img src="./images/codeGear_dataGear.svg" alt="message" width="800"> +</div> + +# Gears OS の柔軟性 + +- Gears OS はメタ計算を使用することで +-- データ拡張や機能の追加 +-- GPU 等の様々なアーキテクチャでも同じプログラムの動作 +- メタ計算は通常の処理と階層を分けて処理を行う。 + +<div style="text-align: center;"> + <img src="./images/meta_gear.svg" alt="message" width="800"> +</div> + +# 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 から依存関係を解決する。 + +# 依存関係の解決 + +- + +# GPGPU + +- もともとは画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術のこと。 +- GPUにはCPUに比べ多数のコアがあり、並列に処理することによってCPUよりも高速に処理を行うことができる。 +- CPUに比べ複雑な計算ができない、GPU単体に直接命令を書き込むこともできないなど、問題点も存在する。 +- +- +- + +# CPUWoker +- Worker thread で動くTaskスケジューラーである。 +- synchronized queue からTask の List を読み込み実行する。 +- Data Gear の待ち合わせ管理を行う。 +- CPU Worker はreceive Tasl というAPI を持ち、Taskがなくなるまで繰り返す。 + +# CUDAWoker +- CPUWoker を再利用して作成するTask スケジューラー +- CUDA ライブラリの初期化を行う以外の動作はCPUWoker と全く同じとなる。 +- GPU へのデータ転送及びGPU側でのTaskの実行はTaskのMeta Code Gear で行われる。 + +# Task の設定におけるメタ計算の問題 +- 現在のGears OS では並列実行するTask の設定を以下の用に行っている。 +- 実行するCode Gear 揃っていない Input Data Gear の数、Input Data Gear/Output Data Gear への参照等をノーマルレベルで記述している。 + +# Task の設定におけるメタ計算の問題 +- この記述方法では Meta Data Gear である Task を直接参照しているためノーマルレベルでの記述は好ましくない区、メタレベルでの記述を行いたい。 +- そこで以下のような記述を新たに考案した。 +- par goto は先に上げたCode1 に変換されるきじゅつであり、これによりノーマルレベルでは直接 Taskを参照せずに par goto の引数で Task の設定を行うことができる。 +- この記述を拡張することでCPU GPUでの切り替えを行うことも可能であると考える。 + + + +