Mercurial > hg > Papers > 2014 > masakoha-sigos
changeset 30:110e54772bf9
fix slide
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 06 May 2014 15:01:45 +0900 |
parents | ec6c5c55a19b |
children | 9b043cb87ee9 |
files | slide/April_25th.html slide/index.html |
diffstat | 2 files changed, 490 insertions(+), 364 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/April_25th.html Mon May 05 23:10:01 2014 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,364 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta http-equiv="content-type" content="text/html;charset=utf-8"> - <title>slide</title> - -<!-- - Notes on CSS media types used: - - 1) projection -> slideshow mode (display one slide at-a-time; hide all others) - 2) screen -> outline mode (display all slides-at-once on screen) - 3) print -> print (and print preview) - - Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key - - Questions, comments? - - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow ---> - -<!-- styles --> -<style media="screen,projection"> - -html, -body, -.presentation { margin: 0; padding: 0; } - -.slide { display: none; - position: absolute; - top: 0; left: 0; - margin: 0; - border: none; - padding: 2% 4% 0% 4%; /* css note: order is => top right bottom left */ - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - width: 100%; height: 100%; /* css note: lets use border-box; no need to add padding+border to get to 100% */ - overflow-x: hidden; overflow-y: auto; - z-index: 2; - } - -.slide.current { display: block; } /* only display current slide in projection mode */ - -.slide .stepcurrent { color: black; } -.slide .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */ - -.slide { -/* - background-image: -webkit-linear-gradient(top, blue, aqua, blue, aqua); - background-image: -moz-linear-gradient(top, blue, aqua, blue, aqua); -*/ -} -</style> - -<style media="screen"> -.slide { border-top: 1px solid #888; } -.slide:first-child { border: none; } -</style> - -<style media="print"> -.slide { page-break-inside: avoid; } -.slide h1 { page-break-after: avoid; } -.slide ul { page-break-inside: avoid; } -</style> - - -<!-- add js lib (jquery) --> -<script src="js/jquery-1.7.min.js"></script> - -<!-- S6 JS --> -<script src="js/jquery.slideshow.js"></script> -<script src="js/jquery.slideshow.counter.js"></script> -<script src="js/jquery.slideshow.controls.js"></script> -<script> - $(document).ready( function() { - Slideshow.init(); - - // Example 2: Start Off in Outline Mode - // Slideshow.init( { mode: 'outline' } ); - - // Example 3: Use Custom Transition - // Slideshow.transition = transitionScrollUp; - // Slideshow.init(); - - // Example 4: Start Off in Autoplay Mode with Custom Transition - // Slideshow.transition = transitionScrollUp; - // Slideshow.init( { mode: 'autoplay' } ); - } ); -</script> - -</head> -<body> - - -<div class="presentation"> - - <div class='slide cover'> - <table width="90%" height="90%" border="0" align="center"> - <tr> - <td><div align="center"> - <h1>Cerium による並列処理向け I/O の設計と実装</h1> - </div> - </td> - </tr> - <tr> - <td><div align="right"> - <name>琉球大学大学院 古波倉 正隆,河野 真治</name> - </div></td> - </tr> - </tr> - </table> - </div> - - - - <div id="cover"> - - <h3>I/Oを含むアプリケーションの並列化</h3> - I/O を含む Task は ディスクかの読み込む時間がかかる。<br> - -> <font color = red>I/O をどうにか速くできないか?</font> - <p> - Cerium : <br> - CellおよびLinux、 Mac OS X 上で動く並列プログラミングフレームワーク - </p> - <img src='images/resources.png' style="height:170px" align="middle"> - <ul> - <li><font color=red>ファイル読み込みとアプリケーションの分離</font> </li> - <li><font color=red>I/O専用の Threadを追加</font></li> - </ul> - mmap 実装と比較して1.5倍の速度を得た - - </div> - - <div id="cover"> - - <h3>Cerium Task Manager の構造</h3> - <table border="0" cellpadding="0" cellspacing="0"> - <tbody> - <tr> - <td><img src='images/ceriumtaskmanager.png' style="height:280px"></td> - <td> - <ol> - <li>Taskを生成</li> - <li>依存関係のチェック</li> - <li>Schedulerに転送</li> - <li>並列実行</li> - </ol> - </td> - </tr> - </tbody> - </table> - <p> - ファイルを読みながら、Word Count や grep などを<br> - 並列実行したい - </p> - <p> - 計算よりも読み込みを優先しなければならない。読み込みで待ちが入ってしまうので、IO Thread を追加 - </p> - - </div> - <!-- add slides here; example --> - - <div class='cover'> - <h3>Block 単位の読み込みと並列計算</h3> - <br> - <img src='images/includeIOTask.png' style="height:270px" align="middle"> - <ol> - <li>ファイルをある一定の大きさで読み込む</li> - <li>読み込んだテキストファイルに対して、それぞれ計算を行う</li> - <li>計算した結果を集計する</li> - </ol> - </div> - - - <div class='cover'> - <h3>mmap の特徴</h3> - 従来では mmap を使って読み込んでいた - <table border="0" cellpadding="0" cellspacing="0"> - <tbody> - <tr> - <td><img src='images/mmap.png' style="height:350px" align="middle"></td> - <td> - <ul> - <font size = 5> - <li> - mmap は、ファイルを直接メモリ空間に map する。<br> - アクセスされたメモリ部分を OS が自動的に読み込む。<br> - </li> - <li> - code がシンプルだが、読み込み終わるまで待たされる。 <br> - </li> - </font> - </ul> - </td> - </tr> - </tbody> - </table> - </div> - - - <div class='cover'> - <h3>読み込みながら計算を行う</h3> - <br> - <img src='images/divide_read.png' style="height:250px" align="middle" > - <br> - - <ul> - <li> Read は 連続で動作しファイルを読み込む </li> - <li> Read の待ちは CPU を消費しない </li> - <li> 読み込み終わったブロックに対して、<br>並列 Task を起動する </li> - </ul> - </div> - - - <div class='cover'> - <h3>Blocked Read の実装</h3> - <br> - <img src='images/blockread.png' style="height:250px"align="middle"> - <br> - - <ul> - <li> - Task を一度に生成するとメモリを圧迫する。<br> - Block 単位で徐々に起動していく。 - </li> - <li> - Blocked Read Task が読み込み終わるまで、<br>Task Blockを待たせる - </li> - <li> - 待ち合わせには Cerium の wait for を使用する。 - </li> - </ul> - </div> - - <div class='cover'> - <h3>I/O 専用 thread での Blocked Read の実装</h3> - <br> - <img src='images/IO_0blockread.png' style="height:350px"> - <ul> - <li>priority が最優先されるので、Blocked Read Task に割り込みが行われなくなる<br> - <li>pthread_setschedparam にて実装<br> - </li> - </ul> - </div> - - <div class="cover"> - <h3>I/O 専用の thread を使用しない場合</h3> - <br> - <img src='images/SPE_ANYblockread.png' style="height:350px"> - <ul> - <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。 </li> - </ul> - </div> - - <div class='cover'> -<h3>実験環境</h3> -<br> -<ul> - <li> Mac OS X 10.9.1</li> - <li> 2*2.66 GHz 6-Core Intel Xeon</li> - <li> Memory 16GB 1333MHz DDR3</li> - <li> HHD 1TB</li> - <li> file size : 約 10 GB</li> - <li> ファイルに対して Boyer-Moore String Seaech で文字列検索をかける </li> - <li> ファイルの読み込みから結果までを測定</li> -</ul> - </div> - - - <div class='cover'> -<table border="2" cellpadding="0" cellspacing="0"> - <tbody> - <tr> - <td>read mode</td> - <td>CPU num</td> - <td>ave time(s)</td> - </tr> - <tr> - <td>mmap</td> - <td>2</td> - <td>106.2</td> - </tr> - <tr> - <td bgcolor="#ffffcc">mmap</td> - <td bgcolor="#ffffcc">12</td> - <td bgcolor="#ffffcc">154.6</td> - </tr> - <tr> - <td>一括Read</td> - <td>12</td> - <td>114.9</td> - </tr> - <tr> - <td>Blocked Read(SPE_ANY)</td> - <td>12</td> - <td>106.0</td> - </tr> - <tr> - <td bgcolor="#ffffcc">Blocked Read(IO_0)</td> - <td bgcolor="#ffffcc">(IO) 1 + (Task) 11</td> - <td bgcolor="#ffffcc">99.2</td> - </tr> - </tbody> -</table> - - <ul> - <li> Blocked Read & IO_0 が mmap より<font color=red>1.55倍</font>速度が向上<br> </li> - <li> Blocked Read を IO 専用 thread で実装すると、<font color=red>6%</font>改善<br> </li> - <!-- - <li> mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。 </li> - - --> - <li> mmap で並列の Task で走らせると 1つ1つの Task がファイルを読み込み、ランダムアクセスとなって<br>しまうため速度が遅くなってしまう。</li> - </ul> - </div> - - - <div class='cover'> - <h3>まとめ</h3> - <ul> - <li> I/O と Task を分離し、同時に動くように改良した。 </li> - <li> I/O 専用の Thread の追加 </li> - <li> - I/O を含む Task をで並列実装するときに mmap では不向きであり、 - Blocked Read で読み込みを制御したほうが効果的。 - </li> - </ul> - <h3 class="yellow">今後の課題</h3> - <ul> - <li> Cerium の API として実装 </li> - <li> - 様々な実装の試み<br>(I/O threads を 2つ、分割 mmap・・・) - </li> - <li> - grepの実装 - </li> - </ul> - </div> - - <div class='cover'> - </div> - - <div class="cover"> - </div> - - <div class='cover'> - </div> - - - <div class='cover'> - </div> - - - <div class='cover'> - </div> - - <div class='cover'> - </div> - - <div class="cover"> - </div> - -</div> <!-- presentation --> -</body> -</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slide/index.html Tue May 06 15:01:45 2014 +0900 @@ -0,0 +1,490 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="content-type" content="text/html;charset=utf-8"> + <title>slide</title> + +<!-- + Notes on CSS media types used: + + 1) projection -> slideshow mode (display one slide at-a-time; hide all others) + 2) screen -> outline mode (display all slides-at-once on screen) + 3) print -> print (and print preview) + + Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key + + Questions, comments? + - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow +--> + +<!-- styles --> +<style media="screen,projection"> + +html, +body, +.presentation { margin: 0; padding: 0; } + +.slide { display: none; + position: absolute; + top: 0; left: 0; + margin: 0; + border: none; + padding: 2% 4% 0% 4%; /* css note: order is => top right bottom left */ + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; height: 100%; /* css note: lets use border-box; no need to add padding+border to get to 100% */ + overflow-x: hidden; overflow-y: auto; + z-index: 2; + } + +.slide.current { display: block; } /* only display current slide in projection mode */ + +.slide .stepcurrent { color: black; } +.slide .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */ + +.slide { +/* + background-image: -webkit-linear-gradient(top, blue, aqua, blue, aqua); + background-image: -moz-linear-gradient(top, blue, aqua, blue, aqua); +*/ +} +</style> + +<style media="screen"> +.slide { border-top: 1px solid #888; } +.slide:first-child { border: none; } +</style> + +<style media="print"> +.slide { page-break-inside: avoid; } +.slide h1 { page-break-after: avoid; } +.slide ul { page-break-inside: avoid; } +</style> + + +<!-- add js lib (jquery) --> +<script src="js/jquery-1.7.min.js"></script> + +<!-- S6 JS --> +<script src="js/jquery.slideshow.js"></script> +<script src="js/jquery.slideshow.counter.js"></script> +<script src="js/jquery.slideshow.controls.js"></script> +<script> + $(document).ready( function() { + Slideshow.init(); + + // Example 2: Start Off in Outline Mode + // Slideshow.init( { mode: 'outline' } ); + + // Example 3: Use Custom Transition + // Slideshow.transition = transitionScrollUp; + // Slideshow.init(); + + // Example 4: Start Off in Autoplay Mode with Custom Transition + // Slideshow.transition = transitionScrollUp; + // Slideshow.init( { mode: 'autoplay' } ); + } ); +</script> + +</head> +<body> + + +<div class="presentation"> + + <div class='slide cover'> + <table width="90%" height="90%" border="0" align="center"> + <tr> + <td><div align="center"> + <h1>Cerium による並列処理向け I/O の実装</h1> + </div> + </td> + </tr> + <tr> + <td><div align="right"> + <name>古波倉 正隆,河野 真治</name> + </div></td> + </tr> + </tr> + </table> + </div> + + <div id="cover"> + <h3>I/Oを含むアプリケーションの並列化</h3> + + ファイル内の文字列検索を行うようなプログラムを走らせたとき、 + <font color = red>文字列検索よりもファイルの読み込みに時間がかかる</font>ことが多い。 + + I/O は、ディスクからの読み込む時間がかかる。<br> + -> <font color = red>I/O をどうにか速くできないか?</font> + <p> + Cerium : <br> + CellおよびLinux、 Mac OS X 上で動く並列プログラミングフレームワーク + </p> + <img src='images/resources.png' style="height:170px" align="middle"> + <ul> + <li><font color=red>ファイル読み込みとアプリケーションの分離</font> </li> + <li><font color=red>I/O専用の Threadを追加</font></li> + </ul> + mmap 実装と比較して1.5倍の速度を得た + </div> + + <div id="cover"> + + <h3>Cerium Task Manager の構造</h3> + <table border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td><img src='images/ceriumtaskmanager.png' style="height:280px"></td> + <td> + <ol> + <li>Taskを生成</li> + <li>依存関係のチェック</li> + <li>Schedulerに転送</li> + <li>並列実行</li> + </ol> + </td> + </tr> + </tbody> + </table> + <p> + ファイルを読みながら、Word Count や grep などを<br> + 並列実行したい + </p> + <p> + 計算よりも読み込みを優先しなければならない。読み込みで待ちが入ってしまうので、IO Thread を追加 + </p> + + </div> + <!-- add slides here; example --> + <div class='cover'> + <h3>Cerium の例題 : WordCount</h3> + + </div> + + + <div class='cover'> + <h3>Block 単位の読み込みと並列計算</h3> + <br> + <img src='images/includeIOTask.png' style="height:270px" align="middle"> + <ol> + <li>ファイルをある一定の大きさで読み込む</li> + <li>読み込んだテキストファイルに対して、それぞれ計算を行う</li> + <li>計算した結果を集計する</li> + </ol> + </div> + + + <div class='cover'> + <h3>mmap の特徴</h3> + 従来では mmap を使って読み込んでいた + <table border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td><img src='images/mmap.png' style="height:350px" align="middle"></td> + <td> + <ul> + <font size = 5> + <li> + mmap は、ファイルを直接メモリ空間に map する。<br> + アクセスされたメモリ部分を OS が自動的に読み込む。<br> + </li> + <li> + code がシンプルだが、読み込み終わるまで待たされる。 <br> + </li> + </font> + </ul> + </td> + </tr> + </tbody> + </table> + </div> + + + <div class='cover'> + <h3>読み込みながら計算を行う</h3> + <br> + <img src='images/divide_read.png' style="height:250px" align="middle" > + <br> + + <ul> + <li> Read は 連続で動作しファイルを読み込む </li> + <li> Read の待ちは CPU を消費しない </li> + <li> 読み込み終わったブロックに対して、<br>並列 Task を起動する </li> + </ul> + </div> + + + <div class='cover'> + <h3>Blocked Read の実装</h3> + <br> + <img src='images/blockread.png' style="height:250px"align="middle"> + <br> + + <ul> + <li> + Task を一度に生成するとメモリを圧迫する。<br> + Block 単位で徐々に起動していく。 + </li> + <li> + Blocked Read Task が読み込み終わるまで、<br>Task Blockを待たせる + </li> + <li> + 待ち合わせには Cerium の wait for を使用する。 + </li> + </ul> + </div> + + <div class='cover'> + <h3>I/O 専用 thread での Blocked Read の実装</h3> + <br> + <img src='images/IO_0blockread.png' style="height:350px"> + <ul> + <li>Task とは別に Thread を割り当てているので、Read Task に割り込みが行われなくなる<br></li> + <li>pthread_setschedparam にて実装<br> + </li> + </ul> + </div> + + <div class="cover"> + <h3>I/O 専用の thread を使用しない場合</h3> + <br> + <img src='images/SPE_ANYblockread.png' style="height:350px"> + <ul> + <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。 </li> + </ul> + </div> + + <div class='cover'> +<h3>実験概要</h3> +<p>実験環境</p> +<ul> + <li> Mac OS X 10.9.1</li> + <li> 2*2.66 GHz 6-Core Intel Xeon</li> + <li> Memory 16GB 1333MHz DDR3</li> + <li> HDD 1TB 7200 rpm SATA 3.0 Gbps </li> + <li> ファイルに Word Count をかける</li> + <li> ファイルの読み込みから結果までを測定</li> +</ul> + </div> + + <div class='cover'> + <h3>実験 : CPU 数での比較</h3> + + <p>表内の数値の単位は全て秒である。</p> + +division size = 128k , 48 Task num / 1 Block +<table border="2" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td>read mode \ CPU num</td> + <td></td> + <td>CPU 1</td> + <td>CPU 4</td> + <td>CPU 8</td> + <td>CPU 12</td> + </tr> + <tr> + <td>mmap</td> + <td></td> + <td>20.179</td> + <td>22.861</td> + <td>22.789</td> + <td>22.713</td> + </tr> + <tr> + <td>read</td> + <td></td> + <td>21.351</td> + <td>15.737</td> + <td>14.785</td> + <td>12.520</td> + </tr> + <tr> + <td>Blocked Read(SPE_ANY)</td> + <td></td> + <td>18.531</td> + <td>15.646</td> + <td>15.287</td> + <td>14.028</td> + </tr> + <tr> + <td>Blocked Read(IO_0)</td> + <td></td> + <td>13.930</td> + <td>14.634</td> + <td>14.774</td> + <td>10.295</td> + <!-- + <td bgcolor="#ffffcc">Blocked Read(IO_0)</td> + <td bgcolor="#ffffcc">99.2</td> + --> + </tr> + </tbody> +</table> + + <ul> + <li> CPU 12 のとき、Blocked Read(IO_0) が mmap より<font color=red>2.21倍</font> 速度が向上した。<br> </li> + <li> Blocked Read を IO 専用 thread で実装すると、<font color=red>1.36 倍</font> の改善が見られた。<br> </li> + <li> mmap で並列の Task で走らせると 1つ1つの Task がファイルを読み込み、ランダムアクセスとなって<br>しまうため速度が遅くなってしまう。</li> + </ul> + + <h3>実験 : division size を変更してみる</h3> + +division size = <font color=red>16k</font> , 48 Task num / 1 Block +<table border="2" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td>read mode \ CPU num</td> + <td></td> + <td>CPU 1</td> + <td>CPU 4</td> + <td>CPU 8</td> + <td>CPU 12</td> + </tr> + <tr> + <td>mmap</td> + <td></td> + <td>15.353</td> + <td>11.287</td> + <td>11.707</td> + <td>11.137</td> + </tr> + <tr> + <td>read</td> + <td></td> + <td>16.846</td> + <td>11.730</td> + <td>11.487</td> + <td>11.437</td> + </tr> + <tr> + <td>Blocked Read(SPE_ANY)</td> + <td></td> + <td>13.297</td> + <td>11.984</td> + <td>10.887</td> + <td>11.146</td> + </tr> + <tr> + <td>Blocked Read(IO_0)</td> + <td></td> + <td>11.503</td> + <td>11.437</td> + <td>11.365</td> + <td>11.412</td> + <!-- + <td bgcolor="#ffffcc">Blocked Read(IO_0)</td> + <td bgcolor="#ffffcc">99.2</td> + --> + </tr> + </tbody> +</table> + + </div> + + <div class='cover'> +<h3>実験 : 使用 CPU 数での比較</h3> + +<table border="2" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td>read mode \ CPU num</td> + <td></td> + <td>CPU 1</td> + <td>CPU 4</td> + <td>CPU 8</td> + <td>CPU 12</td> + </tr> + <tr> + <td>mmap</td> + <td></td> + <td></td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>read</td> + <td></td> + <td></td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>Blocked Read(SPE_ANY)</td> + <td></td> + <td></td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>Blocked Read(IO_0)</td> + <td></td> + <td></td> + <td></td> + <td></td> + <td></td> + <!-- + <td bgcolor="#ffffcc">Blocked Read(IO_0)</td> + <td bgcolor="#ffffcc">99.2</td> + --> + </tr> + </tbody> +</table> + + <ul> + <li></li> + <li></li> + <li></li> + </ul> + </div> + + <div class='cover'> + <h3>まとめ</h3> + <ul> + <li> I/O と Task を分離し、同時に動くように改良した。 </li> + <li> I/O 専用の Thread の追加 </li> + <li> + I/O を含む Task をで並列実装するときに mmap では不向きであり、 + Blocked Read で読み込みを制御したほうが効果的。 + </li> + </ul> + <h3 class="yellow">今後の課題</h3> + <ul> + <li> Cerium の API として実装 </li> + <li> + 様々な実装の試み<br>(I/O threads を 2つ、分割 mmap・・・) + </li> + <li> + grepの実装 + </li> + </ul> + </div> + + <div class="cover"> + </div> + + <div class='cover'> + </div> + + + <div class='cover'> + </div> + + + <div class='cover'> + </div> + + <div class='cover'> + </div> + + <div class="cover"> + </div> + +</div> <!-- presentation --> +</body> +</html>