view Slide/prosym.html @ 3:7f5c0330e711

add module API
author tobaru
date Sun, 20 May 2018 14:13:00 +0900
parents 60405cc47b3a
children c456e4d68e1a
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8">
   <title>Gears OS のモジュール化と並列 API</title>

<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15]">
<meta name="author"    content="Mitsuki Miyagi, Yu Tobaru, Shinji Kono" >

<!-- style sheet links -->
<link rel="stylesheet" href="s6/themes/projection.css"   media="screen,projection">
<link rel="stylesheet" href="s6/themes/screen.css"       media="screen">
<link rel="stylesheet" href="s6/themes/print.css"        media="print">
<link rel="stylesheet" href="s6/themes/blank.css"        media="screen,projection">

<!-- JS -->
<script src="s6/js/jquery-1.11.3.min.js"></script>
<script src="s6/js/jquery.slideshow.js"></script>
<script src="s6/js/jquery.slideshow.counter.js"></script>
<script src="s6/js/jquery.slideshow.controls.js"></script>
<script src="s6/js/jquery.slideshow.footer.js"></script>
<script src="s6/js/jquery.slideshow.autoplay.js"></script>

<!-- prettify -->
<link rel="stylesheet" href="scripts/prettify.css">
<script src="scripts/prettify.js"></script>

<script>
  $(document).ready( function() {
    Slideshow.init();

    $('code').each(function(_, el) {
      if (!el.classList.contains('noprettyprint')) {
        el.classList.add('prettyprint');
      }
    });
    prettyPrint();
  } );

  
</script>

<!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
<!--[if IE]>
<script src="s6/js/jquery.microsoft.js"></script>
<![endif]-->



</head>
<body>

<div class="layout">
  <div id="header"></div>
  <div id="footer">
    <div align="right">
      <img src="s6/images/logo.svg" width="200px">
    </div>
  </div>
</div>

<div class="presentation">

  <div class='slide cover'>
    <table width="90%" height="90%" border="0" align="center">
      <tr>
        <td>
          <div align="center">
            <h1><font color="#808db5">Gears OS のモジュール化と並列 API</font></h1>
          </div>
        </td>
      </tr>
      <tr>
        <td>
          <div align="left">
            Mitsuki Miyagi, Yu Tobaru, Shinji Kono
            琉球大学
            <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
          </div>
        </td>
      </tr>
    </table>
  </div>

<div class='slide '>
<!-- === begin markdown block ===

      generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15]
                on 2018-05-20 14:11:55 +0900 with Markdown engine kramdown (1.13.2)
                  using options {}
  -->

<!-- _S9SLIDE_ -->
<h1 id="gears-os">Gears OS</h1>
<ul>
  <li>現代のOS では拡張性と信頼性を両立させることが要求されている。
    <ul>
      <li>時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。</li>
      <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまう。</li>
    </ul>
  </li>
  <li>本研究室では、それらを実現することを目標に Gears OS の開発を行なっている。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="api-">API と実装の分離</h1>
<ul>
  <li>Gears OS は Continuation based C(以下、CbC)によって記述されている。</li>
  <li>CbC は Code Gear と Data Gear の単位でプログラムを記述していて、システムやアプリケーションを作る際に、この2つは柔軟に再利用する必要がある。</li>
  <li>この時に、機能を接続する API と実装の分離が可能であることが望ましい。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="api">並列API</h1>
<ul>
  <li>Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。</li>
  <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li>
  <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section">スライドの流れ</h1>
<ul>
  <li>
    <font color="red">CbC</font>
  </li>
  <li>Gears OS における並列実行</li>
  <li>比較</li>
  <li>今後の課題</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="cbc">CbC</h1>
<ul>
  <li>ノーマルレベルとメタレベルの計算を1つの言語で表現できる言語として、本研究室で設計した CbC(Continuation based C) を用いる。</li>
  <li>ノーマルレベルの計算
    <ul>
      <li>コンピュータの計算はプログラミング言語で計算される。</li>
      <li>その部分をノーマルレベルの計算と呼ぶ。</li>
    </ul>
  </li>
  <li>メタレベルの計算
    <ul>
      <li>コードが実行される際の以下の部分が、メタレベルの計算という。
        <ul>
          <li>処理系の詳細や使用する資源</li>
          <li>コードの仕様や型などの言語以外の部分</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="cbc-1">CbC</h1>
<ul>
  <li>CbC を用いることで、ノーマルレベルの計算の信頼性をメタレベルから保証できるようになる。</li>
  <li>CbC を用いてCode Gear と Data Gear、メタ構造を導入する。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="cbc-">CbC の構文</h1>
<ul lang="c">
  <li>CbC の Code Gear は __code という型を持つ関数として記述する。</li>
  <li>継続で次の Code Gear に遷移するので、戻り値は持たない。</li>
  <li>遷移は goto 文による継続で処理を行い、引数として入出力を行う。</li>
</ul>
<pre><code>__code cg0(int a, int b) {
    goto cg1(a+b);
}
__code cg1(int c) {
    goto cg2(c);
}
</code></pre>
<p># スライドの流れ
- CbC
- <font color="red">Gears OS における並列実行</font>
- 比較
- 今後の課題</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="gears-">Gears における並列実行</h1>
<ul>
  <li>Gears OS ではメタ計算を柔軟に記述するためのプログラミングの単位として Code Gear と Data Gear を用いる。</li>
  <li>それぞれにメタレベルの単位が存在し、Meta Data Gear と Meta Code Gear と呼ぶ。</li>
  <li>メタレベルの計算は Perl スクリプトによって生成され、Code 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>
<ul>
  <li>Context の複製には par goto を用いる。</li>
  <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="task">Task</h1>
<ul>
  <li>Context は Task でもある。</li>
  <li>実行する Code Gear と Data Gear を全て持っている。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="exit">__exit</h1>
<ul lang="c">
  <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>
<pre><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) {
    par goto add(integer1, integer2, output, __exit);
    goto code2();
}
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-1">スライドの流れ</h1>
<ul>
  <li>CbC</li>
  <li>Gears OS における並列実行</li>
  <li>
    <font color="red">比較</font>
  </li>
  <li>今後の課題</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="gears-os-">Gears OS の評価</h1>
<ul>
  <li>CPU、GPU環境で Gears OS の測定を行う。</li>
  <li>使用した環境は次のようになる。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="twice">Twice</h1>
<ul>
  <li>評価には与えられた整数配列の全ての要素を2倍にする例題である Twice を使う。</li>
  <li>Twice では 通信時間を考慮しなければ、CPU より コア数の多い GPU が有利となる。</li>
  <li>要素数2^27のデータに対する Twice の実行結果を示す。
    <ul>
      <li>CPU では2^27のデータを64個のデータに分割した。</li>
      <li>kernel only は 通信速度を除いた速度である。</li>
    </ul>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-2">評価の考察</h1>
<ul>
  <li>コア数が上がるごとに、処理速度が上がっている。</li>
  <li>GPUでの実行は 32CPU に比べて約7.2倍の速度向上が見られた。</li>
  <li>通信速度を含めると 16CPU より遅い。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="go-">Go 言語との比較</h1>
<ul>
  <li>Go 言語でも Twice を用いた検証を行い、Gears OS との速度比較を行なった。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="go--1">Go 言語との比較</h1>
<ul>
  <li>1CPU と 32CPU では約4.33倍の速度向上が見られた。</li>
  <li>CPU数による速度向上は、Gears OS の方が上だが、処理速度では Go言語の方が速い結果となった。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-3">スライドの流れ</h1>
<ul>
  <li>CbC</li>
  <li>Gears OS における並列実行</li>
  <li>比較</li>
  <li>
    <font color="red">今後の課題</font>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-4">今後の課題</h1>
<ul>
  <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li>
  <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li>
  <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li>
  <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li>
</ul>
<!-- === end markdown block === -->
</div>


</div><!-- presentation -->
</body>
</html>