changeset 27:9def91a908d6

add
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Tue, 11 Feb 2014 18:11:36 +0900
parents 54591c145fec
children 933c669d567e
files slide/images/blockread.graffle slide/images/blockread.png slide/index.html
diffstat 3 files changed, 82 insertions(+), 157 deletions(-) [+]
line wrap: on
line diff
--- a/slide/images/blockread.graffle	Tue Feb 11 15:47:57 2014 +0900
+++ b/slide/images/blockread.graffle	Tue Feb 11 18:11:36 2014 +0900
@@ -26,7 +26,7 @@
 	<key>MasterSheets</key>
 	<array/>
 	<key>ModificationDate</key>
-	<string>2014-02-11 05:26:28 +0000</string>
+	<string>2014-02-11 08:18:18 +0000</string>
 	<key>Modifier</key>
 	<string>MasaKoha</string>
 	<key>NotesVisible</key>
@@ -1034,7 +1034,7 @@
 {\colortbl;\red255\green255\blue255;}
 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
 
-\f0\fs24 \cf0 Block Read Task 2}</string>
+\f0\fs24 \cf0 Blocked Read Task 2}</string>
 						<key>VerticalPad</key>
 						<integer>0</integer>
 					</dict>
@@ -1201,7 +1201,7 @@
 {\colortbl;\red255\green255\blue255;}
 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
 
-\f0\fs24 \cf0  Block Read}</string>
+\f0\fs24 \cf0  Blocked Read}</string>
 						<key>VerticalPad</key>
 						<integer>0</integer>
 					</dict>
@@ -1275,7 +1275,7 @@
 {\colortbl;\red255\green255\blue255;}
 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
 
-\f0\fs24 \cf0 Block Read Task 1}</string>
+\f0\fs24 \cf0 Blocked Read Task 1}</string>
 						<key>VerticalPad</key>
 						<integer>0</integer>
 					</dict>
@@ -4070,7 +4070,7 @@
 	<key>WindowInfo</key>
 	<dict>
 		<key>CurrentSheet</key>
-		<integer>3</integer>
+		<integer>0</integer>
 		<key>ExpandedCanvases</key>
 		<array/>
 		<key>Frame</key>
@@ -4088,7 +4088,7 @@
 		<key>SidebarWidth</key>
 		<integer>120</integer>
 		<key>VisibleRegion</key>
-		<string>{{-53, 0}, {665.71428571428567, 422.28571428571428}}</string>
+		<string>{{0, 0}, {665.71428571428567, 422.28571428571428}}</string>
 		<key>Zoom</key>
 		<real>1.75</real>
 		<key>ZoomValues</key>
Binary file slide/images/blockread.png has changed
--- a/slide/index.html	Tue Feb 11 15:47:57 2014 +0900
+++ b/slide/index.html	Tue Feb 11 18:11:36 2014 +0900
@@ -38,14 +38,29 @@
         先行研究では Task の並列化によって、プログラム全体の処理速度は向上している。しかし、ファイル読み込み等の I/O と Task が並列に動作するようにはされていない。
         </p>
         <p>
-        現状では、ファイルを全て memory に mapping を行ってから Task が走るようになっているので、非常に大きいサイズのファイルを読み込むと、ファイルを memory に mapping するまでの時間がオーバーヘッドになってしまう。
+        現状では、ファイルを memory に mapping を行ってから Task が走るようになっているので、I/O と Task が並列に動作しない。
         </p>
         <p>
         本研究では I/O と Task が並列に動作するような設計、実装によってプログラム全体の
-        処理速度を上げていく。
+        並列度、及び処理速度を上げていく。
         </p>
       </article>
 
+
+        <article>
+        <h3>mmapでの実装の問題点</h3>
+        <ul>
+        <li>
+        mmap で file を読み込むと、file は memory 上にて即座には展開されない。
+        </li>
+        <li>
+        file が memory に展開されるタイミングは、その file に対して何らかの計算を行うときである。<br><br>
+        →つまり、Task が走るときに初めて memory に file を格納するので、I/O と Task が分離できない。
+        </li>
+        </ul>
+      </article>
+
+<!--
       <article>
         <h3>Cerium Task Manager の流れ</h3>
         <table  border="0" cellpadding="0" cellspacing="0">
@@ -66,60 +81,16 @@
           </tbody>
         </table>
       </article>
-
-      <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);
-// Task を実行する デバイスの設定
-multiply->set_cpu(SPE_ANY);
-// Task に入力データのアドレスを追加
-multiply->set_inData(0, (memaddr)A, sizeof(float)*length);
-multiply->set_inData(1, (memaddr)B, sizeof(float)*length);
-// Task に出力データのアドレスを追加
-multiply->set_outData(0, (memaddr)C, sizeof(float)*length);
-// Task へ値を1つだけ渡す
-multiply->set_param(0,length);
-// Task を TaskList に set する
-multiply->spawn(); </pre>
-      </article>
-
-      <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);
-    B = (float*)s->get_input(rbuf,1);
-    // 登録した outData を取得
-    C = (float*)s->get_output(wbuf,0);
-    // 登録した param を取得
-    long  length=(long)s->get_param(0);
-    for (int i=0;i &lt; length;i++) {
-        C[i] = A[i] * B[i];
-    }
-    return 0;
-} </pre>
-      </article>
+-->
 
       <article>
         <h3>並列処理向け I/O の 設計と実装</h3>
           <br>
           <ul>
             <li>I/O を含む Task の説明</li>
-            <li>mmap での実装</li>
             <li>mmap の説明</li>
-            <li>Block Read の設計</li>
-            <li>Block Read の実装</li>
+            <li>Blocked Read の設計と実装</li>
+            <li>ベンチマーク</li>
           </ul>
       </article>
 
@@ -128,7 +99,7 @@
           <br>
           <img src='images/includeIOTask.png' style="height:250px">
           <ol>
-            <li>file mmaping 後、file をある一定の大きさに分割する</li>
+            <li>file mapping 後、file をある一定の大きさに分割する</li>
             <li>分割した file に対して、それぞれ計算を行う</li>
             <li>計算した結果を集計する</li>
           </ol>
@@ -136,31 +107,6 @@
 
 
       <article>
-        <h3>mmap での I/O の実装</h3>
-          <br>
-          <h3 class="yellow">mmap の記述</h3>
-        <pre>
-mmap(SchedTask *s, void *in, void *out)
-{
-    // FileReadPtr : File情報などを格納している構造体
-    FileReadPtr fr = (FileReadPtr)in;
-    int map = MAP_PRIVATE;
-
-    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>
-
-      <article>
         <h3>mmap の説明</h3>
         <table  border="0" cellpadding="0" cellspacing="0">
           <tbody>
@@ -193,7 +139,7 @@
       </article>
 
       <article>
-        <h3>Block Read の設計</h3>
+        <h3>Blocked Read の設計</h3>
           <br>
           <img src='images/divide_read.png' style="height:250px">
           <br>
@@ -206,9 +152,6 @@
           先読みを自分で書ける(制御できる)
           </li>
           <li>
-          code が煩雑
-          </li>
-          <li>
           memory より大きなファイルを扱える
           </li>
         </ul>
@@ -253,38 +196,8 @@
       </article>
 -->
 
-
-
       <article class='smaller'>
-        <h3>Block Read の実装(1/3)</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);
-// ファイルディスクリプタの受け渡し
-t_read->set_param(0,w->fd);
-// ファイル読み込みの始点
-t_read->set_param(1,w->task_spawned*w->division_size);
-
-// run_tasks(manager,w, w->task_blocks, t_read, t_next, w->division_size + w->extra_len);
-// ここで、ファイルに対して何らかの計算を掛けるような Task を設定する
-run_tasks(manager,w, w->task_blocks,・・・ );
-
-// ファイル読み込みの終点
-t_read->set_param(2,w->task_spawned*w->division_size + w->extra_len);
-
-t_read->spawn();
-
-</pre>
-      </article>
-
-      <article class='smaller'>
-        <h3>Block Read の実装(2/3)</h3>
+        <h3>Blocked Read の実装</h3>
           <br>
           <img src='images/blockread.png' style="height:250px">
           <br>
@@ -297,38 +210,17 @@
           </li>
           <li>
           Task 1つ当たりの読み込む領域を L とする。<br>
-          Block Read Task 1つ当たり、memory に格納する大きさは L × n となる。
+          Blocked Read Task 1つ当たり、memory に格納する大きさは L × n となる。
           </li>
           <li>
-          Block Read Task が読み込み終わるまで、Task Block に wait を掛ける。<br>
+          Blocked Read Task が読み込み終わるまで、Task Block に wait を掛ける。<br>
           (Read Task が格納する前に走ると、まだ格納していない領域を読みこんでしまう。)
           </li>
         </ul>
       </article>
 
-
       <article>
-        <h3>Block Read の実装(3/3)</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);
-    long start_read_position = (long)s->get_param(1);
-    long end_read_position = (long)s->get_param(2);
-    char *read_text = (char*)s->get_output(wbuf,0);
-    long read_size = end_read_position - start_read_position;
-
-    pread(fd, read_text, read_size , start_read_position);
-    return 0;
-}
-</pre>
-      </article>
-
-      <article>
-        <h3>ベンチマーク(1/)</h3>
+        <h3>ベンチマーク(1/3)</h3>
           <br>
               <h3 class="yellow">実験環境</h3>
               <ul>
@@ -345,10 +237,18 @@
       </article>
 
       <article class = 'smaller'>
-        <h3>ベンチマーク(2/)</h3>
-        <p>
-        file が memory に残っていない状態での測定
-        </p>
+        <h3>ベンチマーク(2/3)</h3>
+        <ul>
+            <li>
+            file が memory に残っていない状態での測定
+            </li>
+            <li>
+            one task size 128KByte
+            </li>
+            <li>
+            Task Blocks 48
+            </li>
+        </ul>
         <br>
           <h3 class="yellow">結果</h3>
         <table  border="0" cellpadding="0" cellspacing="0">
@@ -356,8 +256,6 @@
             <tr>
               <td>read mode</td>
               <td>cpu num</td>
-              <td>one task size</td>
-              <td>task blocks</td>
               <td>min time(s)</td>
               <td>MAX time(s)</td>
               <td>ave time(s)</td>
@@ -365,8 +263,6 @@
             <tr>
               <td>mmap</td>
               <td>4</td>
-              <td>128kbyte</td>
-              <td>48</td>
               <td>135.2</td>
               <td>148.9</td>
               <td>142.3</td>
@@ -374,8 +270,6 @@
             <tr>
               <td>BRead</td>
               <td>4</td>
-              <td>128kbyte</td>
-              <td>48</td>
               <td>94.5</td>
               <td>109.2</td>
               <td>98.8</td>
@@ -384,8 +278,6 @@
             <tr>
               <td>mmap</td>
               <td>12</td>
-              <td>128kbyte</td>
-              <td>48</td>
               <td>147.0</td>
               <td>181.8</td>
               <td>154.6</td>
@@ -393,8 +285,6 @@
             <tr>
               <td>BRead</td>
               <td>12</td>
-              <td>128kbyte</td>
-              <td>48</td>
               <td>91.6</td>
               <td>117.5</td>
               <td>99.2</td>
@@ -402,8 +292,22 @@
           </tbody>
         </table>
 
+      </article>
 
+      <article class = 'smaller'>
+        <h3>ベンチマーク(3/3)</h3>
           <h3 class="yellow">考察</h3>
+            <ul>
+                <li>
+                mmap より、Blocked Readのほうが % ほど速くなった
+                </li>
+                <li>
+                I/O と Task が分離できた。
+                </li>
+                <li>
+                </li>
+            </ul>
+
       </article>
 
       <article>
@@ -414,15 +318,36 @@
             さらなる 並列処理向け I/O の動作を改善
             </li>
             <li>
-            分散バージョン I/0 の設計と実装
-            </li>
-            <li>
             I/O を利用した、マルチコアソフトウェアシンセサイザーを設計
             </li>
             </ul>
 
       </article>
 
+      <article>
+        <h3>マルチコアソフトウェアシンセサイザーの設計</h3>
+          <br>
+            <ul>
+            <li>
+            作曲をする際にはマシンパワーが必要となることが多い。
+            </li>
+            <li>
+            ソフトウェアシンセサイザー(以下、シンセサイザー)を使用する際にマシンパワーが必要となる。
+            </li>
+            <li>
+            シンセサイザーは1つだけで立ち上げる物ではなく、複数立ち上げる物なので、1つ1つの負荷を抑えることがキーポイントとなる。
+            </li>
+            <li>
+            シンセサイザーは様々なフィルターをかけることで音を作っていくのだが、フィルターを重ねても動作軽量なプログラムを作る。
+            </li>
+            </ul>
+      </article>
 
   </body>
 </html>
+            </ul>
+
+      </article>
+
+  </body>
+</html>