Mercurial > hg > Papers > 2017 > ikkun-sigos
changeset 32:6f5ce3e82fbf
fix
author | ikkun |
---|---|
date | Tue, 16 May 2017 12:52:40 +0900 |
parents | e7780283d3ee |
children | c326110b6079 |
files | presen/s6/themes/blank.css presen/scripts/prettify.css presen/slide.html presen/slide.md |
diffstat | 4 files changed, 114 insertions(+), 113 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/s6/themes/blank.css Tue May 16 09:53:12 2017 +0900 +++ b/presen/s6/themes/blank.css Tue May 16 12:52:40 2017 +0900 @@ -72,7 +72,6 @@ font-size: 160%; } li { - margin-top: 15px; margin-bottom: 15px; } p,
--- a/presen/scripts/prettify.css Tue May 16 09:53:12 2017 +0900 +++ b/presen/scripts/prettify.css Tue May 16 12:52:40 2017 +0900 @@ -1,18 +1,14 @@ /* CSS from google html5slides(https://code.google.com/p/html5slides/) */ -code { - display: inline-block; -} - pre > code { - display: block; - font-family: 'Droid Sans Mono', 'Courier New', monospace; font-size: 20px; line-height: 28px; padding: 5px 10px; + letter-spacing: -1px; + margin-top: 40px; margin-bottom: 40px;
--- a/presen/slide.html Tue May 16 09:53:12 2017 +0900 +++ b/presen/slide.html Tue May 16 12:52:40 2017 +0900 @@ -4,7 +4,7 @@ <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>Gears OS における並列処理</title> -<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin16]"> +<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 1.9.3 (2011-10-30) [x86_64-darwin10]"> <meta name="author" content="東恩納 琢偉" > <!-- style sheet links --> @@ -32,6 +32,7 @@ $('code').each(function(_, el) { if (!el.classList.contains('noprettyprint')) { el.classList.add('prettyprint'); + el.style.display = 'block'; } }); prettyPrint(); @@ -85,8 +86,8 @@ <div class='slide '> <!-- === begin markdown block === - generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin16] - on 2017-05-16 09:45:10 +0900 with Markdown engine kramdown (1.13.2) + generated by markdown/1.2.0 on Ruby 1.9.3 (2011-10-30) [x86_64-darwin10] + on 2017-05-16 12:21:56 +0900 with Markdown engine kramdown (1.9.0) using options {} --> @@ -191,35 +192,44 @@ <li>Gears OS は Code Gear、Data Gearの単位を用いて開発されており、CbCで記述される。</li> <li>Meta Code Gear は 通常の Code Gear の直後に遷移され、メタ計算を実行する。</li> <li>Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。</li> - <li> - <p>stub -# Gears OS の並列性</p> - </li> - <li>Code Gear が処理するのに必要な Input Data Gear と処理実行後に出力される Input Data Gear の組を Task と呼ぶ。</li> + <li>stub</li> +</ul> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h1 id="gears-os-">Gears OS の並列性</h1> + +<ul> + <li>Code Gear が処理するのに必要な Input Data Gear と処理実行後に出力される Output Data Gear の組を Task と呼ぶ。</li> <li>Code Gear は Task 以外とは依存関係がない</li> <li>依存関係が明確化されている Code Gear Data Gear で記述することで、並列化し易い。</li> </ul> <div style="text-align: center;"> - <img src="./fig/codeGear_dataGear.svg" alt="message" width="600" /> + <img src="./fig/codeGear_dataGear.svg" alt="message" width="550" /> </div> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="gears-os-">Gears OS の構成</h1> +<h1 id="gears-os--1">Gears OS の構成</h1> <ul> <li>Gears OS は以下の要素で構成される。 <ul> - <li>Context - TaskQueue - TaskManager - Worker</li> + <li>Context</li> + <li>TaskQueue</li> + <li>TaskManager</li> + <li>Worker</li> </ul> </li> </ul> <div style="text-align: center;"> - <img src="./fig/gears_structure.svg" alt="message" width="800" /> + <img src="./fig/gears_structure.svg" alt="message" width="600" /> </div> @@ -229,14 +239,14 @@ <h1 id="context">Context</h1> <ul> - <li>Gears OS は Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。</li> - <li>Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある。</li> - <li>Context は 接続に必要な Code/Data Gear のリスト、 Data Gear を確保するためのメモリ空間、実行する Code Gear、Code Gear の実行に必要な Input Data Gear のカウンタ等をもっている。 + <li>Context は接続可能な Code Gear、Data Gear のリスト等を持っている Meta Data Gear である</li> + <li>Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある</li> + <li>Context は 接続に必要な Code/Data Gear のリスト、 Data Gear を確保するためのメモリ空間、実行する Code Gear、実行に必要な Input Data Gear のカウンタ等をもっている <!-- context のこーど? --></li> </ul> <div style="text-align: center;"> - <img src="./fig/gears_structure.svg" alt="message" width="800" /> + <img src="./fig/gears_structure.svg" alt="message" width="600" /> </div> @@ -251,7 +261,7 @@ </ul> <div style="text-align: center;"> - <img src="./fig/gears_structure.svg" alt="message" width="800" /> + <img src="./fig/gears_structure.svg" alt="message" width="600" /> </div> @@ -260,13 +270,13 @@ <!-- _S9SLIDE_ --> <h1 id="worker">Worker</h1> <ul> - <li>Worker は thread と実行する Task が入っている Queue を持っている。</li> - <li>Worker は TaskManager から送信された Task を Queue から取り出し、Code Gear を実行する。</li> - <li>Task は Context なので、Code Gear の実行に必要な Input Data Gear はその Context から参照される。</li> - <li>Code Gear を実行した後は出力される Output Data Gear から依存関係を解決する。</li> + <li>Worker は thread と実行する Task が入っている Queue を持っている</li> + <li>TaskManager から送信された Task を Queue から取り出し、Code Gear を実行する</li> + <li>Task は Context なので、Code Gear の実行に必要な Input Data Gear はその Context から参照される</li> + <li>Code Gear を実行した後は出力される Output Data Gear から依存関係を解決する</li> </ul> <div style="text-align: center;"> - <img src="./fig/gears_structure.svg" alt="message" width="800" /> + <img src="./fig/gears_structure.svg" alt="message" width="600" /> </div> @@ -275,8 +285,8 @@ <!-- _S9SLIDE_ --> <h1 id="gpgpu">GPGPU</h1> <ul> - <li>もともとは画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術のこと。</li> - <li>GPUにはCPUに比べ多数のコアがあり、並列に処理することによってCPUよりも高速に処理を行うことができる。</li> + <li>もともとは画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術のこと</li> + <li>GPUにはCPUに比べ多数のコアがあり、並列に処理することによってCPUよりも高速に処理を行うことができる</li> <li>CPUに比べ複雑な計算ができない、GPU単体に直接命令を書き込むこともできないなど、問題点も存在する。</li> </ul> @@ -303,18 +313,18 @@ <li>GPU へのデータ転送及びGPU側でのTaskの実行はTaskのMeta Code Gear で行われる。</li> </ul> -<!-- +<!-- # CbC による Gears OS 記述の問題 - Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 -- これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 +- これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 --> -<!-- 順番まだ考えてない +<!-- 順番まだ考えてない # interface の記述 -- interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 +- interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 - 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。 - Code Gear、Data Gear に参照するために Context を通す必要があるが、interface を記述することでデータ構造の API と Data Gear を結びつけることが出来、 呼び出しが容易になった。 @@ -349,7 +359,7 @@ - stub を生成するために generate_stub は指定された cbc ファイルの __code型である Code Gear を取得し、引数から必要な Data Gear を選択する。 - generate_stub は引数と interface を照らし合わせ、Gearef または GearImpl を決定する。 - また、この時既に stub Code Gear が記述されている Code Gear は無視される。 -- cbc ファイルから、生成した stub Code Gear を加えて stub を加えたコードに変換を行う。 +- cbc ファイルから、生成した stub Code Gear を加えて stub を加えたコードに変換を行う。 # Context の生成 @@ -370,33 +380,47 @@ </ul> <div style="text-align: center;"> - <img src="./fig/dependency.svg" alt="message" width="800" /> + <img src="./fig/dependency.svg" alt="message" width="700" /> </div> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="task-">Task の設定におけるメタ計算の問題</h1> +<h1 id="gears-ostask">Gears OSにおけるTask生成構文</h1> <ul> - <li>現在のGears OS では並列実行するTask の設定を以下の用に行っている。</li> - <li>実行するCode Gear 揃っていない Input Data Gear の数、Input Data Gear/Output Data Gear への参照等をノーマルレベルで記述している。</li> + <li>この記述方法では Meta Data Gearである Task を直接参照しているためノーマルレベルでの記述は好ましくなく、メタレベルでの記述を行いたい。</li> + <li>そこで以下のような記述を新たに考案した。</li> + <li>par goto は先に上げたCode1 に変換される記述であり、これによりノーマルレベルでは直接 Taskを参照せずに par goto の引数で Task の設定を行うことができる。</li> + <li>この記述を拡張することでCPU GPUでの切り替えを行うことも可能であると考える。</li> +</ul> + +<pre lang="c"><code> par goto add(integer1, integer2, output, __exit); +</code></pre> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h1 id="task">Task生成のメタレベルでの実装</h1> +<ul> + <li>Task生成では新しくContextを生成し引数となるData Segmentの設定を行う</li> + <li>Context をactive Task Queue に挿入する</li> </ul> <pre lang="c"><code>__code createTask(TaskManager* taskManager, Context* task, Integer *integer1, Integer *integer2, Integer *output) { - task->next = C_add; // set Code Gear - task->idgCount = 2; // set Input Data Gear Counter - task->data[task->idg] = (union Data*)integer1; // set Input Data Gear reference - task->data[task->idg+1] = (union Data*)integer2; + task->next = C_add; // set Code Gear + task->idgCount = 2; // set Input Data Gear Counter + task->data[task->idg] = (union Data*)integer1; // set Input Data Gear reference task->data[task->idg+1] = (union Data*)integer2; task->maxIdg = task->idg + 2; - task->odg = task->maxIdg; // Output Data Gear index - task->data[task->odg] = (union Data*)output; // set Output Data Gear reference + task->odg = task->maxIdg; // Output Data Gear index + task->data[task->odg] = (union Data*)output; // set Output Data Gear reference task->maxOdg = task->odg + 1; taskManager->next = C_createTask1; - goto meta(context, taskManager->taskManager->TaskManager.spawn); // spawn task + goto meta(context, taskManager->taskManager->TaskManager.spawn); // spawn task } -// code gear +// code gear __code add(Integer *integer1, Integer *integer2, Integer *output) { .... } @@ -408,31 +432,13 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="task--1">Task の設定におけるメタ計算の問題</h1> -<ul lang="c"> - <li>この記述方法では Meta Data Gearである Task を直接参照しているためノーマルレベルでの記述は好ましくなく、メタレベルでの記述を行いたい。</li> - <li>そこで以下のような記述を新たに考案した。</li> - <li>par goto は先に上げたCode1 に変換される記述であり、これによりノーマルレベルでは直接 Taskを参照せずに par goto の引数で Task の設定を行うことができる。</li> - <li>この記述を拡張することでCPU GPUでの切り替えを行うことも可能であると考える。 -- ここに論文で使っていたcode2をいれる</li> -</ul> -<pre><code>__code createTask(Integer *integer1, Integer *integer2, Integer *output, __code next(...)) { - par goto add(integer1, integer2, output, __exit); - goto next(...); -} -</code></pre> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> <h1 id="section-4">従来のシステムとの比較</h1> <ul> + <li>以下のシステムと比較していきます</li> <li>Microware OS/9 モジュール単位で実装されたりreal-time OS</li> <li>compiler directve を使用する HPC</li> <li>CUDA</li> <li>golang</li> - <li>Unix</li> <li>Aspect J</li> </ul>
--- a/presen/slide.md Tue May 16 09:53:12 2017 +0900 +++ b/presen/slide.md Tue May 16 12:52:40 2017 +0900 @@ -1,4 +1,4 @@ -title: Gears OS における並列処理 +title: Gears OS における並列処理 author: 東恩納 琢偉 profile:琉球大学工学部 lang: Japanese @@ -68,22 +68,26 @@ - Gears OS は Code Gear、Data Gearの単位を用いて開発されており、CbCで記述される。 - Meta Code Gear は 通常の Code Gear の直後に遷移され、メタ計算を実行する。 - Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。 -- stub +- stub によってMeta Code Gear から + # Gears OS の並列性 -- Code Gear が処理するのに必要な Input Data Gear と処理実行後に出力される Input Data Gear の組を Task と呼ぶ。 +- Code Gear が処理するのに必要な Input Data Gear と処理実行後に出力される Output Data Gear の組を Task と呼ぶ。 - Code Gear は Task 以外とは依存関係がない - 依存関係が明確化されている Code Gear Data Gear で記述することで、並列化し易い。 <div style="text-align: center;"> - <img src="./fig/codeGear_dataGear.svg" alt="message" width="600"> + <img src="./fig/codeGear_dataGear.svg" alt="message" width="550"> </div> # Gears OS の構成 - Gears OS は以下の要素で構成される。 - - Context - TaskQueue - TaskManager - Worker + - Context + - TaskQueue + - TaskManager + - Worker <div style="text-align: center;"> <img src="./fig/gears_structure.svg" alt="message" width="600"> @@ -91,9 +95,9 @@ # 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 のカウンタ等をもっている。 +- Context は接続可能な Code Gear、Data Gear のリスト等を持っている Meta Data Gear である +- Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある +- Context は 接続に必要な Code/Data Gear のリスト、 Data Gear を確保するためのメモリ空間、実行する Code Gear、実行に必要な Input Data Gear のカウンタ等をもっている <!-- context のこーど? --> <div style="text-align: center;"> @@ -110,17 +114,17 @@ </div> # Worker -- Worker は thread と実行する Task が入っている Queue を持っている。 -- Worker は TaskManager から送信された Task を Queue から取り出し、Code Gear を実行する。 -- Task は Context なので、Code Gear の実行に必要な Input Data Gear はその Context から参照される。 -- Code Gear を実行した後は出力される Output Data Gear から依存関係を解決する。 +- Worker は thread と実行する Task が入っている Queue を持っている +- TaskManager から送信された Task を Queue から取り出し、Code Gear を実行する +- Task は Context なので、Code Gear の実行に必要な Input Data Gear はその Context から参照される +- Code Gear を実行した後は出力される Output Data Gear から依存関係を解決する <div style="text-align: center;"> - <img src="./fig/gears_structure.svg" alt="message" width="800"> + <img src="./fig/gears_structure.svg" alt="message" width="600"> </div> # GPGPU -- もともとは画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術のこと。 -- GPUにはCPUに比べ多数のコアがあり、並列に処理することによってCPUよりも高速に処理を行うことができる。 +- もともとは画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術のこと +- GPUにはCPUに比べ多数のコアがあり、並列に処理することによってCPUよりも高速に処理を行うことができる - CPUに比べ複雑な計算ができない、GPU単体に直接命令を書き込むこともできないなど、問題点も存在する。 # CPUWoker @@ -134,18 +138,18 @@ - CUDA ライブラリの初期化を行う以外の動作はCPUWoker と全く同じとなる。 - GPU へのデータ転送及びGPU側でのTaskの実行はTaskのMeta Code Gear で行われる。 -<!-- +<!-- # CbC による Gears OS 記述の問題 - Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 -- これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 +- これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 --> -<!-- 順番まだ考えてない +<!-- 順番まだ考えてない # interface の記述 -- interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 +- interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 - 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。 - Code Gear、Data Gear に参照するために Context を通す必要があるが、interface を記述することでデータ構造の API と Data Gear を結びつけることが出来、 呼び出しが容易になった。 @@ -179,7 +183,7 @@ - stub を生成するために generate_stub は指定された cbc ファイルの __code型である Code Gear を取得し、引数から必要な Data Gear を選択する。 - generate_stub は引数と interface を照らし合わせ、Gearef または GearImpl を決定する。 - また、この時既に stub Code Gear が記述されている Code Gear は無視される。 -- cbc ファイルから、生成した stub Code Gear を加えて stub を加えたコードに変換を行う。 +- cbc ファイルから、生成した stub Code Gear を加えて stub を加えたコードに変換を行う。 # Context の生成 @@ -192,30 +196,39 @@ - Queue には その Data Gear を待っている Task が入っている - Task は実行に必要な Input Data Gear のカウンタを持っており, Data Gear は書き出されると、依存関係にある Taskのカウンタをデクリメントする - 全ての Input Data Gear が揃ったら, Taskを Worker に送信する - + <div style="text-align: center;"> <img src="./fig/dependency.svg" alt="message" width="700"> </div> -# Task の設定におけるメタ計算の問題 -- 現在のGears OS では並列実行するTask の設定を以下の用に行っている。 -- 実行するCode Gear 揃っていない Input Data Gear の数、Input Data Gear/Output Data Gear への参照等をノーマルレベルで記述している。 +# Gears OSにおけるTask生成構文 +- この記述方法では Meta Data Gearである Task を直接参照しているためノーマルレベルでの記述は好ましくなく、メタレベルでの記述を行いたい。 +- そこで以下のような記述を新たに考案した。 +- par goto は先に上げたCode1 に変換される記述であり、これによりノーマルレベルでは直接 Taskを参照せずに par goto の引数で Task の設定を行うことができる。 +- この記述を拡張することでCPU GPUでの切り替えを行うことも可能であると考える。 + +```c + par goto add(integer1, integer2, output, __exit); +``` + +# Task生成のメタレベルでの実装 +- Task生成では新しくContextを生成し引数となるData Segmentの設定を行う +- Context をactive Task Queue に挿入する ```c __code createTask(TaskManager* taskManager, Context* task, Integer *integer1, Integer *integer2, Integer *output) { - task->next = C_add; // set Code Gear - task->idgCount = 2; // set Input Data Gear Counter - task->data[task->idg] = (union Data*)integer1; // set Input Data Gear reference - task->data[task->idg+1] = (union Data*)integer2; + task->next = C_add; // set Code Gear + task->idgCount = 2; // set Input Data Gear Counter + task->data[task->idg] = (union Data*)integer1; // set Input Data Gear reference task->data[task->idg+1] = (union Data*)integer2; task->maxIdg = task->idg + 2; - task->odg = task->maxIdg; // Output Data Gear index - task->data[task->odg] = (union Data*)output; // set Output Data Gear reference + task->odg = task->maxIdg; // Output Data Gear index + task->data[task->odg] = (union Data*)output; // set Output Data Gear reference task->maxOdg = task->odg + 1; taskManager->next = C_createTask1; - goto meta(context, taskManager->taskManager->TaskManager.spawn); // spawn task + goto meta(context, taskManager->taskManager->TaskManager.spawn); // spawn task } -// code gear +// code gear __code add(Integer *integer1, Integer *integer2, Integer *output) { .... } @@ -223,25 +236,12 @@ ``` -# Task の設定におけるメタ計算の問題 -- この記述方法では Meta Data Gearである Task を直接参照しているためノーマルレベルでの記述は好ましくなく、メタレベルでの記述を行いたい。 -- そこで以下のような記述を新たに考案した。 -- par goto は先に上げたCode1 に変換される記述であり、これによりノーマルレベルでは直接 Taskを参照せずに par goto の引数で Task の設定を行うことができる。 -- この記述を拡張することでCPU GPUでの切り替えを行うことも可能であると考える。 -- ここに論文で使っていたcode2をいれる -```c -__code createTask(Integer *integer1, Integer *integer2, Integer *output, __code next(...)) { - par goto add(integer1, integer2, output, __exit); - goto next(...); -} -``` - # 従来のシステムとの比較 +- 以下のシステムと比較していきます - Microware OS/9 モジュール単位で実装されたりreal-time OS - compiler directve を使用する HPC - CUDA - golang -- Unix - Aspect J # Microware OS/9