view slide/index.html @ 17:5b584f09d356

revision
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Wed, 17 Feb 2016 18:58:23 +0900
parents
children 4dcfec1bf1e7
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8">
   <title>Code Segment と Data Segment を持つ Gears OS の設計</title>

<meta name="generator" content="Slide Show (S9) 2.3.0 on Ruby 2.0.0 (2013-02-24) [x86_64-darwin12.3.0]">
<meta name="author"    content="Shohei KOKUBO" >

<!-- 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');
        el.style.display = 'block';
      }
    });
    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">Code Segment と Data Segment を持つ Gears OS の設計</font></h1>
          </div>
        </td>
      </tr>
      <tr>
        <td>
          <div align="left">
            Shohei KOKUBO
            琉球大学大学院修士2年
            <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.1.1 on Ruby 2.0.0 (2013-02-24) [x86_64-darwin12.3.0]
                on 2016-02-17 18:33:20 +0900 with Markdown engine kramdown (1.4.0)
                  using options {}
  -->

<!-- _S9SLIDE_ -->
<h1 id="section">並列環境下におけるプログラミング</h1>
<p>マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。
これはアムダールの法則により、並列化できない部分が並列化による性能向上を制限することから言える。
つまり、プログラムを並列処理に適した形で記述するためのフレームワークが必要になる。</p>

<p>マルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。
並列処理をする上でこれらのリソースを無視することはできない。
しかし、これらのプロセッサで性能を引き出すためにはそれぞれのアーキテクチャに合わせた並列プログラミングが必要になる。
並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="cerium">Cerium</h1>
<p>Cerium は本研究室で開発している並列プログラミングフレームワークである。</p>

<p>Cerium では関数またはサブルーチンを Task として定義する。
Task 間で依存関係を設定することができ、TaskManager が依存関係を解決することで実行可能な状態となる。
実行可能な状態となると Task に設定された実行デバイスの Scheduler に転送され実行される。</p>

<p><img src="./pictures/createTask.svg" alt="Cerium の構成" /></p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="cerium-12">Cerium の問題点(1/2)</h1>
<p>Cerium では Task 間の依存関係を設定することで並列処理を実現する。
しかし、本来 Task は必要なデータが揃うことで実行可能になるものである。
Task 同士の依存関係だけでは前の Task が不正な処理を行いデータがおかしくなっても Task の終了は通知され、そのまま処理が続行されてしまう。
データがどこでおかしくなったのか特定するのは難しく、デバックに時間が取られる。</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="cerium-22">Cerium の問題点(2/2)</h1>
<p>Task は汎用ポインタでデータの受け渡しを行うのでそこで型情報が落ちる。
Task 側で正しく型変換を行うことで正しい処理を行うことができるが、間違った型変換を行うとデータ構造を破壊する可能性がある。
型システムによるプログラムの正しさを保証することもできず、型に基づく一連の不具合が起こる危険性がつきまとう。</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="gears-os">Gears OS</h1>
<p>本研究では Code Segment と Data Segment によって構成される Gears OS の設計・実装を行った。
プログラムを Code/Data Segment で分割して記述することでプログラム全体の並列度を高めて効率的に並列処理することを可能にする。</p>

<p>Gears OS の基本的な機能の実装には本研究室で開発している CbC(Continuation based C)を用いた。</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="codedata-gear">Code/Data Gear</h1>
<p>Gears OS ではプログラムの単位として Gear を用いる。
Gear は並列実行の単位、データ分割、Gear 間の接続などになる。</p>

<p>Code Gear は Code Segment と同等のものである。
Code Gear には任意の数の Data Gear を参照し、処理が完了すると任意の数の Data Gear に書き込みを行う。
接続された Data Gear 以外にアクセスすることは</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-1">測定結果</h1>
<ul>
  <li>OS X(10.10.5)</li>
  <li>2.3 GHz Intel Core i7</li>
  <li>length:1310720</li>
  <li>cpus/(length/task)/time
    <ul>
      <li>1/10/0.164748s</li>
      <li>2/10/0.230114s</li>
      <li>4/10/0.479126s</li>
      <li>8/10/0.553448s</li>
      <li>1/81920/0.010666s</li>
      <li>2/81920/0.005303s</li>
      <li>4/81920/0.002657s</li>
      <li>8/81920/0.002521s</li>
    </ul>
  </li>
</ul>
<!-- === end markdown block === -->
</div>


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