Mercurial > hg > Papers > 2014 > masakoha-sigos
view slide/April_25th.html @ 28:32c82211d53e
add slide
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 05 May 2014 23:09:26 +0900 |
parents | |
children |
line wrap: on
line source
<!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>