Mercurial > hg > Papers > 2014 > masakoha-thesis > final
changeset 78:0bf2c2ae2bf6
fix indent
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 26 Feb 2014 20:58:00 +0900 |
parents | 5903492cd498 |
children | 74e64dea2b49 |
files | paper/fig/blockread.graffle slide/index.html |
diffstat | 2 files changed, 334 insertions(+), 305 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/fig/blockread.graffle Wed Feb 26 20:15:41 2014 +0900 +++ b/paper/fig/blockread.graffle Wed Feb 26 20:58:00 2014 +0900 @@ -26,7 +26,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2014-02-26 09:31:22 +0000</string> + <string>2014-02-26 11:17:27 +0000</string> <key>Modifier</key> <string>masataka kohagura</string> <key>NotesVisible</key> @@ -39275,6 +39275,64 @@ <key>GraphicsList</key> <array> <dict> + <key>Bounds</key> + <string>{{291.8175309446778, 57.777776757385524}, {42.962962204209759, 14}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>Vertical</string> + <key>Flow</key> + <string>Resize</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>1</string> + </dict> + </dict> + <key>ID</key> + <integer>16</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Pad</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;\red255\green0\blue0;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf2 New!}</string> + <key>VerticalPad</key> + <integer>0</integer> + </dict> + </dict> + <dict> <key>Class</key> <string>LineGraphic</string> <key>Head</key> @@ -43707,11 +43765,11 @@ <key>WindowInfo</key> <dict> <key>CurrentSheet</key> - <integer>6</integer> + <integer>20</integer> <key>ExpandedCanvases</key> <array/> <key>Frame</key> - <string>{{1535, 1133}, {952, 850}}</string> + <string>{{1565, 1270}, {952, 850}}</string> <key>ListView</key> <true/> <key>OutlineWidth</key> @@ -43725,9 +43783,9 @@ <key>SidebarWidth</key> <integer>120</integer> <key>VisibleRegion</key> - <string>{{-28, 0}, {614.28569446444953, 534.58644891581844}}</string> + <string>{{-23, 0}, {605.18517449723038, 526.66665736539881}}</string> <key>Zoom</key> - <real>1.3300000429153442</real> + <real>1.3500000238418579</real> <key>ZoomValues</key> <array> <array>
--- a/slide/index.html Wed Feb 26 20:15:41 2014 +0900 +++ b/slide/index.html Wed Feb 26 20:58:00 2014 +0900 @@ -1,298 +1,270 @@ <!DOCTYPE html> <html> - <head> +<head> <title>Presentation</title> - <meta charset='utf-8'> - <script - src='./slides.js'></script> - </head> + <script src='./slides.js'></script> +</head> - <style> - /* Your individual styles here, or just use inline styles if that’s - what you want. */ +<style> +/* Your individual styles here, or just use inline styles if that’s + what you want. */ - </style> +</style> - <body style='display: none'> - <section class='slides layout-regular template-default'> +<body style='display: none'> +<section class='slides layout-regular template-default'> - <!-- - Your slides (<article>s) go here. Delete or comment out the - slides below. - --> - <article > - <h1>Cerium による並列処理向け I/O の設計と実装</h1> - <h3 class="title">Masataka Kohagura 27th, February</h3> - <div align="right">担当教官 : 河野 真治</div> - </article> +<!-- +Your slides (<article>s) go here. Delete or comment out the +slides below. +--> +<article> + <h1>Cerium による並列処理向け I/O の設計と実装</h1> + <h3 class="title">Masataka Kohagura 27th, February</h3> + <div align="right">担当教官 : 河野 真治</div> +</article> - <article> - <h3>研究概要</h3> - <p> - 当研究室ではCellおよびLinux、 Mac OS X上で動く並列プログラミングフレームワーク、 Ceriumの開発・改良を行っている - </p> - <img src='images/resources.png' style="height:200px" align="middle"> - <p> - 本研究では - <font color=red> - <ul> - <li>ファイル読み込みと文字列検索の分離 - </li> - <li>I/O専用の Threadを追加 - </li> - </ul> - </font> - </p> - <p> - I/0 を含む Task の動作改善を行った - </p> +<article> + <h3>研究概要</h3> + <p> + 当研究室ではCellおよびLinux、 Mac OS X上で動く並列プログラミングフレームワーク、 Ceriumの開発・改良を行っている + </p> + <img src='images/resources.png' style="height:170px" align="middle"> + <p> + 本研究では + <ul> + <li><font color=red>ファイル読み込みと文字列検索の分離</font> </li> + <li><font color=red>I/O専用の Threadを追加</font></li> + </ul> + </p> - - </article> + <p> + 以上2点を実装して<br> + I/O を含む Task の動作改善を行った + </p> +</article> - <article> - <h3>Cerium Task Manager</h3> - <table border="0" cellpadding="0" cellspacing="0"> - <tbody> +<article> + <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> + <td><img src='images/ceriumtaskmanager.png' style="height:280px"></td> + <td> <ol> - <li>Taskを生成</li> - <li>依存関係のチェック</li> - <li>Schedulerに転送</li> - <li>並列実行</li> + <li>Taskを生成</li> + <li>依存関係のチェック</li> + <li>Schedulerに転送</li> + <li>並列実行</li> </ol> - </td> + </td> </tr> - </tbody> - </table> - <p> - I/O 専用の Thread を用意することにより、読み込みに専念させることができる - </p> - </article> + </tbody> + </table> + <p> + I/O 専用の Thread を用意することにより、読み込みに専念させることができる + </p> +</article> + +<article> + <h3>I/O を含む Task の説明</h3> + <br> + <img src='images/includeIOTask.png' style="height:270px" align="middle"> + <ol> + <li>テキストファイルの読み込み後、ファイルをある一定の大きさに分割する</li> + <li>分割したテキストファイルに対して、それぞれ計算を行う</li> + <li>計算した結果を集計する</li> + </ol> + </article> - <article> - <h3>I/O を含む Task の説明</h3> - <br> - <img src='images/includeIOTask.png' style="height:270px" align="middle"> - <ol> - <li>テキストファイルの読み込み後、ファイルをある一定の大きさに分割する</li> - <li>分割したテキストファイルに対して、それぞれ計算を行う</li> - <li>計算した結果を集計する</li> - </ol> - </article> - - <article> - <h3>mmap の特徴</h3> - <table border="0" cellpadding="0" cellspacing="0"> - <tbody> +<article> + <h3>mmap の特徴</h3> + <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 は、C 及び C++ で使用でき、ファイルを読み込む API である。 - </li> - <li> - code がシンプル <br>(メモリを自分自身で malloc せず、read を書いて読み込まなくていいため) - </li> - </font> - </ul> - </td> + <td><img src='images/mmap.png' style="height:350px" align="middle"></td> + <td> + <ul> + <font size = 5> + <li> + mmap は、C 及び C++ で使用でき、ファイルを読み込む API である。 + </li> + <li> + code がシンプル <br>(メモリを自分自身で malloc せず、read を書いて読み込まなくていいため) + </li> + </font> + </ul> + </td> </tr> - </tbody> - </table> + </tbody> + </table> +</article> + +<article> + <h3>mmapでの実装の問題点</h3> + <ul> + <li> mmap でファイルを読み込むと、ファイルはメモリ上に即座に展開されるわけではない。 </li> + <li> + ファイルがメモリに展開されるタイミングは、そのファイルに対して文字列検索を行うときである。<br><br> + ->つまり、文字列検索が行われるときに初めてファイルが読み込まれるので、<font color=red>ファイル読み込みと文字列検索が分離できない。</font> + </li> + </ul> +</article> + - <ul> - </ul> - </article> +<article> + <h3>Blocked Read の設計</h3> + <br> + <img src='images/divide_read.png' style="height:250px" align="middle" > + <br> - <article> - <h3>mmapでの実装の問題点</h3> - <ul> + <ul> + <li> メモリへの呼び出しを自分で書ける(制御できる) </li> + <li> Read は 連続で動作する。 </li> + </ul> +</article> + +<article> + <h3>Blocked Read の実装</h3> + <br> + <img src='images/blockread.png' style="height:250px"align="middle"> + <br> + + <ul> <li> - mmap でファイルを読み込むと、ファイルはメモリ上に即座に展開されるわけではない。 + Task を 1 つずつではなく、ブロック単位で生成して起動する<br> + (1つずつ生成すると、生成された Task でメモリを圧迫するため) </li> <li> - ファイルがメモリに展開されるタイミングは、そのファイルに対して文字列検索を行うときである。<br><br> - <font color=red> - →つまり、文字列検索が行われるときに初めてファイルが読み込まれるので、ファイル読み込みと文字列検索が分離できない。 - </font> + Blocked Read Task が読み込み終わるまで、<br>Task Blockを待たせる </li> - </ul> - </article> - - - <article> - <h3>Blocked Read の設計</h3> - <br> - <img src='images/divide_read.png' style="height:250px" align="middle" > - <br> - - <ul> - <li> - メモリへの呼び出しを自分で書ける(制御できる) - </li> - <li> - Read は 連続で動作する。 - </li> - </ul> - 以後、文字列検索を行う処理を Task と定義する。 - </article> - - <article> - <h3>Blocked Read の実装</h3> - <br> - <img src='images/blockread.png' style="height:250px"align="middle"> - <br> - - <ul> - <li> - Task を 1 つずつではなく、ブロック単位で生成して起動する<br> - (1つずつ生成すると、生成された Task でメモリを圧迫するため) - </li> - <li> - Blocked Read Task が読み込み終わるまで、Task Blockを待たせる<br> - </li> - </ul> - </article> + </ul> +</article> <!-- - <article class = 'smaller'> - <h3>I/O 専用の therad を追加 (1/2)</h3> - <br> - <img src='images/SPE_ANYblockread.png' style="height:350px"align="middle"> - <ul> - <li> - Task 単位で使用するデバイスをセットすることができる。 - </li> - <li> - SPE_ANY でセットすると、Cerium Task Manager 側で自動的に CPU を割り振る。 - </li> - <li> - 自動的に割り振るので、Blocked Read に 他のTask が割り込むおそれがある。 - </li> - </ul> - </article> +<article class = 'smaller'> +<h3>I/O 専用の therad を追加 (1/2)</h3> +<br> +<img src='images/SPE_ANYblockread.png' style="height:350px"align="middle"> +<ul> +<li> +Task 単位で使用するデバイスをセットすることができる。 +</li> +<li> +SPE_ANY でセットすると、Cerium Task Manager 側で自動的に CPU を割り振る。 +</li> +<li> +自動的に割り振るので、Blocked Read に 他のTask が割り込むおそれがある。 +</li> +</ul> +</article> --> - <article> - <h3>I/O 専用の therad を追加</h3> - <br> - <img src='images/IO_0blockread.png' style="height:350px"> - <ul> - <li>Blocked Read Task が最優先されるので、他の Task に割り込まれなくなる<br> - </li> - </ul> - </article> +<article> + <h3>I/O 専用の thread を追加</h3> + <br> + <img src='images/IO_0blockread.png' style="height:350px"> + <ul> + <li>Blocked Read Task が最優先されるので、他の Task に割り込まれなくなる<br> + </li> + </ul> +</article> - <article> - <h3>I/O 専用の therad を使用しない場合</h3> - <br> - <img src='images/SPE_ANYblockread.png' style="height:350px"> - <ul> - <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。 - </li> - </ul> - </article> +<article> + <h3>I/O 専用の thread を使用しない場合</h3> + <br> + <img src='images/SPE_ANYblockread.png' style="height:350px"> + <ul> + <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。 </li> + </ul> +</article> - <article> - <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> - </article> +<article> +<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> +</article> - <article> - <h3>実験結果</h3> - <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">(I/0) 1 + (Task) 11</td> - <td bgcolor="#ffffcc">99.2</td> - </tr> - </tbody> - </table> +<article> +<h3>実験結果</h3> +<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">(I/0) 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> - mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。 - </li> - </ul> - </article> + <ul> + <li> Blocked Read & IO_0 が mmap より<font color=red>1.55倍</font>実行速度が向上した。<br> </li> + <li> mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。 </li> + </ul> +</article> - <article> - <h3>まとめ</h3> - <br> - <ul> - <li> - I/O と Task を分離し、同時に動くように改良した。 - </li> - <li> - I/O 専用の Thread の追加 - <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> - </ul> - </article> +<article> + <h3>まとめ</h3> + <br> + <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> + </ul> +</article> - <article> - <h3>Cerium Task の生成の例(1)</h3> - <p>(例題) multiply : 2つの数を掛け算するプログラム</p> - <h3 class="yellow">main.cc の記述</h3> - <pre> +<article> + <h3>Cerium Task の生成の例(1)</h3> + <p>(例題) multiply : 2つの数を掛け算するプログラム</p> + <h3 class="yellow">main.cc の記述</h3> +<pre> float* A, B, C; // Task の宣言 HTaskPtr multiply = manager->create_task(MULTIPLY_TASK); @@ -306,20 +278,21 @@ // Task へ値を1つだけ渡す multiply->set_param(0,length); // Task を TaskList に set する -multiply->spawn(); </pre> - </article> +multiply->spawn(); +</pre> +</article> - <article> - <h3> Cerium Task の生成(2)</h3> - <br> - <h3 class="yellow">Task の記述</h3> - <pre> +<article> + <h3> Cerium Task の生成(2)</h3> + <br> + <h3 class="yellow">Task の記述</h3> +<pre> static int multiply(SchedTask *s,void *rbuf, void *wbuf) { float *A,*B,*C - // 登録した inData を取得 - A = (float*)s->get_input(rbuf,0); + // 登録した inData を取得 + A = (float*)s->get_input(rbuf,0); B = (float*)s->get_input(rbuf,1); // 登録した outData を取得 C = (float*)s->get_output(wbuf,0); @@ -329,14 +302,15 @@ C[i] = A[i] * B[i]; } return 0; -} </pre> - </article> +} +</pre> +</article> - <article> - <h3>mmap での I/O の実装</h3> - <br> - <h3 class="yellow">mmap の記述</h3> - <pre> +<article> + <h3>mmap での I/O の実装</h3> + <br> + <h3 class="yellow">mmap の記述</h3> + <pre> mmap(SchedTask *s, void *in, void *out) { // FileReadPtr : File情報などを格納している構造体 @@ -346,28 +320,25 @@ fr->read_text = (char*)mmap(NULL,fr->filesize,PROT_READ,map,fr->fd,(off_t)0); } -</pre> - <ul> - <li> - PROT_READ : 読み込み可 - </li> - <li> - MAP_PRIVATE : 読み込んだ領域に対して書き込みが起こると複製し、複製した領域に対して書き込みを行う - </li> - </ul> - </article> + </pre> - <article class='smaller'> - <h3>Block Read の実装(1/2)</h3> - <br> - <h3 class="yellow">Block Read の実装</h3> - <pre> + <ul> + <li> PROT_READ : 読み込み可 </li> + <li> MAP_PRIVATE : 読み込んだ領域に対して書き込みが起こると複製し、複製した領域に対して書き込みを行う </li> + </ul> +</article> + +<article class='smaller'> +<h3>Block Read の実装(1/2)</h3> +<br> +<h3 class="yellow">Block Read の実装</h3> +<pre> HTaskPtr t_read = manager->create_task(READ_TASK); t_read->set_cpu(read_spe_cpu); // 読み出すファイルの格納場所を設定 t_read->set_outData(0, - w->file_mmap + w->task_spawned * w->division_size, - w->task_blocks * w->division_size); + w->file_mmap + w->task_spawned * w->division_size, + w->task_blocks * w->division_size); // ファイルディスクリプタの受け渡し t_read->set_param(0,w->fd); // ファイル読み込みの始点 @@ -383,14 +354,14 @@ t_read->spawn(); </pre> - </article> +</article> - <article> - <h3>Block Read の実装(2/2)</h3> - <br> - <h3 class="yellow"> Block Read の記述</h3> - <pre> -static int +<article> +<h3>Block Read の実装(2/2)</h3> +<br> +<h3 class="yellow"> Block Read の記述</h3> +<pre> + static int read_task(SchedTask *s, void *rbuf, void *wbuf) { long fd = (long)s->get_param(0); @@ -403,8 +374,8 @@ return 0; } </pre> - </article> +</article> - </body> +</body> </html>