Mercurial > hg > Papers > 2014 > masakoha-thesis > final
diff slide/index.html @ 76:e13727d01f7a
fix slide
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 26 Feb 2014 19:24:11 +0900 |
parents | ec6ddf37a60b |
children | 5903492cd498 |
line wrap: on
line diff
--- a/slide/index.html Wed Feb 26 04:15:25 2014 +0900 +++ b/slide/index.html Wed Feb 26 19:24:11 2014 +0900 @@ -24,53 +24,61 @@ --> <article > <h1>Cerium による並列処理向け I/O の設計と実装</h1> - <h3 class="title">Masataka Kohagura 12th, February</h3> + <h3 class="title">Masataka Kohagura 27th, February</h3> <div align="right">担当教官 : 河野 真治</div> </article> <article> - <h3>研究背景と目的</h3> + <h3>研究概要</h3> + <p> + 当研究室ではCellおよびLinux、 Mac OS X上で動く並列プログラミングフレームワーク、 Ceriumの開発・改良を行っている + </p> + <img src='images/resources.png' style="height:200px" align="middle"> <p> - 近年のCPUのほとんどはマルチコアであり、それらの性能を引き出すためには並列プログラミングが必須となっている。 - そこで当研究室では、並列プログラミング用フレームワーク、Cerium 及び Cerium Task Manager の開発を行い、提供することによって並列プログラミングを容易にしている。 + 本研究では + <font color=red> + <ul> + <li>ファイル読み込みと文字列検索の分離 + </li> + <li>I/O専用の Threadを追加 + </li> + </ul> + </font> </p> <p> - 先行研究では Task の並列化によって、プログラム全体の処理速度は向上している。しかし、ファイル読み込み等の I/O処理 と Task が並列に動作するようにはされていない。 + I/0 を含む Task の動作改善を行った </p> - <p> - 本研究では I/O処理 と Task が並列に動作するような設計、実装によってプログラム全体の並列度、及び処理速度を上げていく。 - </p> + + </article> - <article> - <h3>Cerium Task Manager について</h3> - <ul> - <li> - 当研究室で開発している並列プログラミングフレームワーク。 - </li> - <li> - PS3 に搭載されている Cell 向けに開発を行っていた。近年では、Mac OS X、Linux でも使用ができるように改良された。 - </li> - </ul> - </article> - <article> - <h3>並列処理向け I/O の 設計と実装</h3> - <br> - <ul> - <li>I/O を含む Task の説明</li> - <li>mmap の説明</li> - <li>Blocked Read の設計と実装</li> - <li>IO専用 therad の追加</li> - <li>ベンチマーク</li> - </ul> + <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> + I/O 専用の Thread を用意することにより、読み込みに専念させることができる + </p> </article> <article> <h3>I/O を含む Task の説明</h3> <br> - <img src='images/includeIOTask.png' style="height:250px" align="middle"> + <img src='images/includeIOTask.png' style="height:270px" align="middle"> <ol> <li>テキストファイルの読み込み後、ファイルをある一定の大きさに分割する</li> <li>分割したテキストファイルに対して、それぞれ計算を行う</li> @@ -112,7 +120,9 @@ </li> <li> ファイルがメモリに展開されるタイミングは、そのファイルに対して文字列検索を行うときである。<br><br> + <font color=red> →つまり、文字列検索が行われるときに初めてメモリにファイルが格納されるので、ファイル読み込みと文字列検索が分離できない。 + </font> </li> </ul> </article> @@ -129,10 +139,10 @@ メモリへの呼び出しを自分で書ける(制御できる) </li> </ul> - 以後、ファイルに対して文字列検索を行う処理を Task と定義する。 + 以後、文字列検索を行う処理を Task と定義する。 </article> - <article class='smaller'> + <article> <h3>Blocked Read の実装</h3> <br> <img src='images/blockread.png' style="height:250px"align="middle"> @@ -140,21 +150,16 @@ <ul> <li> - Task を 1 つずつ生成するのではなく、ブロック単位で生成する。<br> - この図では、1 Block 当たり n 個の Task を生成する。<br> + Task を 1 つずつ生成するのではなく、ブロック単位で生成して起動する<br> (1つずつ生成すると、生成された Task でメモリを圧迫するため) </li> <li> - Task 1つ当たりの読み込む領域を L とする。<br> - Blocked Read Task 1つ当たり、メモリに格納する大きさは L × n となる。 - </li> - <li> - Blocked Read Task が読み込み終わるまで、Task Block に wait を掛ける。<br> - (Read Task がファイルをメモリに格納する前に走ると、まだ格納していない領域を読みこんでしまう。) + Blocked Read Task が読み込み終わるまで、Task Blockを待たせる<br> </li> </ul> </article> +<!-- <article class = 'smaller'> <h3>I/O 専用の therad を追加 (1/2)</h3> <br> @@ -171,24 +176,22 @@ </li> </ul> </article> +--> - <article class='smaller'> - <h3>I/O 専用の therad を追加 (2/2)</h3> + <article> + <h3>I/O 専用の therad を追加</h3> <br> <img src='images/IO_0blockread.png' style="height:350px"> <ul> - <li>IO_0 という I/O 専用の Thread を追加した。</li> <li>Blocked Read Task が最優先されるので、他の Task に割り込まれなくなる<br> - これにより、Blocked Read Task が連続で動作する。 </li> </ul> </article> <article> - <h3>ベンチマーク(1/2)</h3> + <h3>実験環境</h3> <br> - <h3 class="yellow">実験環境</h3> <ul> <li> Mac OS X 10.9.1</li> <li> 2*2.66 GHz 6-Core Intel Xeon</li> @@ -200,71 +203,51 @@ </ul> </article> - <article class = 'smaller'> - <h3>ベンチマーク(2/2)</h3> - <ul> - <li> - ファイルがキャッシュに残っていない状態での測定 - </li> - <li> - one task size 128KByte - </li> - <li> - Task Blocks 48 - </li> - <li> - CPU num 12 - </li> - </ul> - <br> - <h3 class="yellow">結果</h3> + <article> + <h3>実験結果</h3> <table border="0" 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>154.6</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>Blocked Read(SPE_ANY)</td> + <td>12</td> <td>106.0</td> </tr> <tr> - <td>Blocked Read & IO_0</td> - <td>99.2</td> - </tr> - <tr> - <td>[参考] mmap (CPU num:2)</td> - <td>106.2</td> + <td bgcolor="#ffffcc">Blocked Read(IO_0)</td> + <td bgcolor="#ffffcc">(I/0) 1 + (Task) 11</td> + <td bgcolor="#ffffcc">99.2</td> </tr> </tbody> </table> - </article> - - - <article> - <h3>考察</h3> - <br> <ul> <li> - 実験結果から、mmap より、Blocked Read & IO_0 の実行速度が36%改善された。<br> + Blocked Read & IO_0 が mmap より<font color=red>1.55倍</font>実行速度が向上した。<br> </li> <li> - mmap では 1つ1つの Task がファイルの読み込みを行うが、Blocked Read だと複数 Task 分のファイルを読み込んでいるので、メモリへの呼び出し回数が少ない Blocked Read のほうが速くなったと考えられる。 - </li> - <li> - I/Oを含む並列処理を mmap で実装すると遅くなるので、このような例題の場合は Blocked Read で読み込む必要がある。 + mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。 </li> </ul> - </article> <article>