Mercurial > hg > Papers > 2018 > tobaru-sigos
diff Slide/prosym.pdf.html @ 7:dfa8973bfe10
add images
author | tobaru |
---|---|
date | Sun, 20 May 2018 21:12:40 +0900 |
parents | 07b7aba92874 |
children | f275411f458d |
line wrap: on
line diff
--- a/Slide/prosym.pdf.html Sun May 20 18:45:11 2018 +0900 +++ b/Slide/prosym.pdf.html Sun May 20 21:12:40 2018 +0900 @@ -70,12 +70,12 @@ <!-- === begin markdown block === generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15] - on 2018-05-20 17:18:27 +0900 with Markdown engine kramdown (1.13.2) + on 2018-05-20 21:11:28 +0900 with Markdown engine kramdown (1.13.2) using options {} --> <!-- _S9SLIDE_ --> -<h1 id="gears-os">Gears OS</h1> +<h2 id="gears-os">Gears OS</h2> <ul> <li>現代のOS では拡張性と信頼性を両立させることが要求されている。 <ul> @@ -90,7 +90,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="api-">API と実装の分離</h1> +<h2 id="api-">API と実装の分離</h2> <ul> <li>Gears OS は Continuation based C(以下、CbC)によって記述されている。</li> <li>CbC は Code Gear と Data Gear の単位でプログラムを記述していて、システムやアプリケーションを作る際に、この2つは柔軟に再利用する必要がある。</li> @@ -101,7 +101,35 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="api">並列API</h1> +<h2 id="gears-os-interface">Gears OS での形式化とInterfaceの導入</h2> +<ul> + <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li> + <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li> + <li>Logic としては、依存型関数言語である Agda を使う(前の発表)</li> + <li>証明とモデル検査を使って、信頼性を確保する</li> +</ul> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h2 id="gears-os--interface">Gears OS の Interface</h2> +<ul> + <li>この時、Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。</li> + <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装を持つことができる。</li> + <li>Interface は Data Gear で記述されて、Meta Deta Gear と呼ばれる。</li> + <li>Java などの Class に相当する。</li> + <li>Interface を外から呼び出すための Code Gear 群の型</li> + <li>Interface を呼び出す時に必要となる引数を全て格納する Data Gear</li> + <li>実装に使う Code Gear の番号が含まれている。</li> + <li>Code Gear の番号を変更することによって異なる実装を実現できる</li> +</ul> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h2 id="api">並列API</h2> <ul> <li>Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。</li> <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li> @@ -112,8 +140,9 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section">スライドの流れ</h1> +<h2 id="section">スライドの流れ</h2> <ul> + <li>Interface</li> <li> <font color="red">CbC</font> </li> @@ -126,7 +155,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="cbc">CbC</h1> +<h2 id="cbc">CbC</h2> <ul> <li>ノーマルレベルとメタレベルの計算を1つの言語で表現できる言語として、本研究室で設計した CbC を用いる。</li> <li>ノーマルレベルの計算 @@ -140,7 +169,7 @@ <li>コードが実行される際の以下の部分が、メタレベルの計算という。 <ul> <li>処理系の詳細や使用する資源</li> - <li>コードの仕様や型などの言語以外の部分</li> + <li>コードの仕様や型などの部分</li> </ul> </li> </ul> @@ -151,17 +180,17 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="cbc-1">CbC</h1> +<h2 id="cbc-1">CbC</h2> <ul> <li>CbC を用いることで、ノーマルレベルの計算の信頼性をメタレベルから保証できるようになる。</li> - <li>CbC を用いてCode Gear と Data Gear、メタ構造を導入する。</li> + <li>CbC を用いてCode Gear と Data Gear を導入する。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="cbc-">CbC の構文</h1> +<h2 id="cbc-">CbC の構文</h2> <ul lang="c"> <li>CbC の Code Gear は __code という型を持つ関数として記述する。</li> <li>継続で次の Code Gear に遷移するので、戻り値は持たない。</li> @@ -174,12 +203,15 @@ goto cg2(c); } </code></pre> +<ul> + <li>CbC の記述だけでは並列実行にならない</li> +</ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-1">スライドの流れ</h1> +<h2 id="section-1">スライドの流れ</h2> <ul> <li>CbC</li> <li> @@ -193,39 +225,43 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="gears-">Gears における並列実行</h1> +<h2 id="gears-">Gears における並列実行</h2> <ul> <li>Gears OS ではメタ計算を柔軟に記述するためのプログラミングの単位として Code Gear と Data Gear を用いる。</li> <li>それぞれにメタレベルの単位が存在し、Meta Data Gear と Meta Code Gear と呼ぶ。</li> <li>メタレベルの計算は Perl スクリプトによって生成され、Code Gear で記述される。</li> </ul> +<div style="text-align: center;"> + <img src="./image/meta_cg_dg.svg" alt="Gears OS の構造" width="700" /> +</div> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h2 id="gears-os-">Gears OS の構造</h2> +<div style="text-align: center;"> + <img src="./image/gearsos.svg" alt="Gears OS の構造" width="700" /> +</div> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h2 id="context">Context</h2> +<ul> + <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li> + <li>この Meta Data Gear を Context と呼ぶ。</li> + <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li> + <li>Context は Task でもある。</li> + <li>Task は実行する Code Gear と Data Gear を全て持っている。</li> +</ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="interface">Interface</h1> -<ul> - <li>この時、Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。</li> - <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装を持つことができる。</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="context">Context</h1> -<ul> - <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li> - <li>この Meta Data Gear を Context と呼ぶ。</li> - <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="par-goto">par goto</h1> +<h2 id="par-goto">par goto</h2> <ul> <li>Context の複製には par goto を用いる。</li> <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li> @@ -235,20 +271,23 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="task">Task</h1> +<h2 id="code-gear--code-gear-">1つの Code Gear の実行は他の Code Gear に割り込まれない</h2> <ul> - <li>Context は Task でもある。</li> - <li>実行する Code Gear と Data Gear を全て持っている。</li> + <li>共有された Data Gear があった時に、それに対する変更はただ1つの Code Gear だけが許される</li> + <li>読み込みは複数であってもいい</li> + <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li> + <li>このような実行になるように Gears OS の実装を行う</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="exit">__exit</h1> +<h2 id="exit">__exit</h2> <ul lang="c"> - <li>par goto で生成された Task は __exit に継続することで終了する。</li> - <li>GearsOS の Task は Output Data Gear を生成した時点で終了する。</li> + <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認する(commit)</li> + <li>par goto で生成された Task は __exit に継続することで終了する</li> + <li>GearsOS の Task は Output Data Gear を生成した時点で終了する</li> <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li> <li>Code Gear と Data Gear の依存関係をノーマルレベルで記述できるようになる。</li> </ul> @@ -262,7 +301,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-2">スライドの流れ</h1> +<h2 id="section-2">スライドの流れ</h2> <ul> <li>CbC</li> <li>Gears OS における並列実行</li> @@ -276,7 +315,18 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="gears-os-">Gears OS の評価</h1> +<h2 id="gears-os--1">Gears OS の評価(目的)</h2> +<ul> + <li>並列構文とそれを実現する Meta Compitation が十分に揃っているかを確認したい</li> + <li>並列処理の台数効果を確認する</li> + <li>既存の並列言語と比較して不要なオーバーヘッドがあるか調べたい</li> +</ul> + + +</div> +<div class='slide '> +<!-- _S9SLIDE_ --> +<h2 id="gears-os--2">Gears OS の評価(環境)</h2> <ul> <li>CPU、GPU環境で Gears OS の測定を行う。</li> <li>使用した環境は次のようになる。 @@ -304,7 +354,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="twice">Twice</h1> +<h2 id="twice">Twice</h2> <ul> <li>評価には与えられた整数配列の全ての要素を2倍にする例題である Twice を使う。</li> <li>Twice では 通信時間を考慮しなければ、CPU より コア数の多い GPU が有利となる。</li> @@ -361,7 +411,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-3">評価の考察</h1> +<h2 id="section-3">評価の考察</h2> <ul> <li>コア数が上がるごとに、処理速度が上がっている。</li> <li>GPUでの実行は 32CPU に比べて約7.2倍の速度向上が見られた。</li> @@ -372,21 +422,21 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="go-">Go 言語との比較</h1> +<h2 id="go-">Go 言語との比較</h2> <ul> <li>Go 言語でも Twice を用いた検証を行い、Gears OS との速度比較を行なった。</li> <li>1CPU と 32CPU では約4.33倍の速度向上が見られた。</li> <li>CPU数による速度向上は、Gears OS の方が上だが、処理速度では Go言語の方が速い結果となった。</li> </ul> <div style="text-align: center;"> - <img src="./image/vsgo.svg" alt="message" width="500" /> + <img src="./image/vsgo.svg" alt="Goとの比較" width="500" /> </div> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-4">スライドの流れ</h1> +<h2 id="section-4">スライドの流れ</h2> <ul> <li>CbC</li> <li>Gears OS における並列実行</li> @@ -400,7 +450,7 @@ </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="section-5">今後の課題</h1> +<h2 id="section-5">今後の課題</h2> <ul> <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li> <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li>