# HG changeset patch # User Masataka Kohagura # Date 1393420137 -32400 # Node ID 74e64dea2b499fcac2d10da77906e1bfeba5db63 # Parent 0bf2c2ae2bf6a705e9a3803c801e168b45782e9e fix slide diff -r 0bf2c2ae2bf6 -r 74e64dea2b49 paper/fig/blockread.graffle --- a/paper/fig/blockread.graffle Wed Feb 26 20:58:00 2014 +0900 +++ b/paper/fig/blockread.graffle Wed Feb 26 22:08:57 2014 +0900 @@ -26,7 +26,7 @@ MasterSheets ModificationDate - 2014-02-26 11:17:27 +0000 + 2014-02-26 12:37:11 +0000 Modifier masataka kohagura NotesVisible @@ -39344,8 +39344,8 @@ 15 Points - {292.9807554294768, 96.558044277146266} - {238.73188730179959, 129.8897293955992} + {299.13476199233236, 96.543735445649133} + {240.56404744769253, 129.90060972846385} Style @@ -39425,8 +39425,8 @@ 13 Points - {180.06149680284955, 96.738562124096788} - {197.44889096837204, 129.70763933348272} + {186.08965642949588, 96.758182184094579} + {199.73979653968107, 129.68644699366126} Style @@ -39460,8 +39460,8 @@ 12 Points - {123.46512194080368, 96.560698006030975} - {176.95379290708831, 129.88708453810307} + {119.06854569924865, 96.549883779268256} + {175.73059899626145, 129.89455577180576} Style @@ -39514,7 +39514,7 @@ Bounds - {{285.06002299166397, 71.851854207411748}, {56.47795071315111, 24.444438926962349}} + {{285.06002299166397, 71.851854207411748}, {71.939971923828125, 24.444438926962349}} Class ShapedGraphic ID @@ -39549,7 +39549,7 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 I/O CPU} +\f0\fs24 \cf0 I/O Thread} @@ -39582,7 +39582,7 @@ Bounds - {{145.14346380267656, 71.851859124931906}, {56.47795071315111, 24.444438926962349}} + {{152.5925898977105, 71.851857120776828}, {56.47795071315111, 24.444438926962349}} Class ShapedGraphic ID @@ -39610,7 +39610,7 @@ Bounds - {{75.185180446902166, 71.851853395522255}, {56.47795071315111, 24.444438926962349}} + {{69.629633216700995, 71.851855399677333}, {56.47795071315111, 24.444438926962349}} Class ShapedGraphic ID @@ -39633,7 +39633,7 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 Cell} +\f0\fs24 \cf0 CPU} @@ -39684,7 +39684,7 @@ Bounds - {{64.666665489290935, 46.888888025480028}, {285.92592546805753, 57.777778625488281}} + {{64.666665489290949, 46.888888025480028}, {298.25924682617188, 57.777778625488281}} Class ShapedGraphic ID diff -r 0bf2c2ae2bf6 -r 74e64dea2b49 slide/index.html --- a/slide/index.html Wed Feb 26 20:58:00 2014 +0900 +++ b/slide/index.html Wed Feb 26 22:08:57 2014 +0900 @@ -27,28 +27,22 @@
-

研究概要

+

I/Oを含むアプリケーションの並列化

- 当研究室ではCellおよびLinux、 Mac OS X上で動く並列プログラミングフレームワーク、 Ceriumの開発・改良を行っている + Cerium : CellおよびLinux、 Mac OS X上で動く並列プログラミングフレームワーク

-

- 本研究では

    -
  • ファイル読み込みと文字列検索の分離
  • +
  • ファイル読み込みとアプリケーションの分離
  • I/O専用の Threadを追加
-

- -

- 以上2点を実装して
- I/O を含む Task の動作改善を行った -

+ mmap 実装と比較して1.5倍の速度を得た +
-

Cerium Task Manager

+

Cerium Task Manager の構造

@@ -65,12 +59,12 @@

- I/O 専用の Thread を用意することにより、読み込みに専念させることができる + ファイルを読みながら、Word Count や grep などを並列実行したい

-

I/O を含む Task の説明

+

Block 単位の読み込みと並列計算


    @@ -82,6 +76,7 @@

    mmap の特徴

    + 従来では mmap を使って読み込んでいた @@ -90,10 +85,12 @@
    • - mmap は、C 及び C++ で使用でき、ファイルを読み込む API である。 + mmap は、ファイルを直接メモリ空間に map する。
      + アクセスされたメモリ部分を OS が自動的に読み込む。
      + 読み込みがおわるまでアクセスは任される。
    • - code がシンプル
      (メモリを自分自身で malloc せず、read を書いて読み込まなくていいため) + code がシンプルだが、読み込み終わるまで待たされる。
    @@ -103,27 +100,17 @@
    -
    -

    mmapでの実装の問題点

    -
      -
    • mmap でファイルを読み込むと、ファイルはメモリ上に即座に展開されるわけではない。
    • -
    • - ファイルがメモリに展開されるタイミングは、そのファイルに対して文字列検索を行うときである。

      - ->つまり、文字列検索が行われるときに初めてファイルが読み込まれるので、ファイル読み込みと文字列検索が分離できない。 -
    • -
    -
    -
    -

    Blocked Read の設計

    +

    読み込みながら計算を行う



      -
    • メモリへの呼び出しを自分で書ける(制御できる)
    • -
    • Read は 連続で動作する。
    • +
    • Read は 連続で動作しファイルを読み込む
    • +
    • Read の待ちは CPU を消費しない
    • +
    • 読み込み終わったブロックに対して、
      並列 Task を起動する
    @@ -135,12 +122,15 @@
    • - Task を 1 つずつではなく、ブロック単位で生成して起動する
      - (1つずつ生成すると、生成された Task でメモリを圧迫するため) + Task を一度に生成するとメモリを圧迫する。
      + Block 単位で徐々に起動していく。
    • Blocked Read Task が読み込み終わるまで、
      Task Blockを待たせる
    • +
    • + 待ち合わせには Cerium の wait for を使用する。 +
@@ -165,11 +155,13 @@
-

I/O 専用の thread を追加

+

I/O 専用 thread での Blocked Read の実装


    +
  • priority が最優先されるので、他の Task に割り込まれなくなる
  • Blocked Read Task が最優先されるので、他の Task に割り込まれなくなる
    +
  • pthread_setparam で実装
@@ -228,7 +220,7 @@ Blocked Read(IO_0) - (I/0) 1 + (Task) 11 + (I/O) 1 + (Task) 11 99.2 @@ -237,12 +229,12 @@
  • Blocked Read & IO_0 が mmap より1.55倍実行速度が向上した。
  • mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。
  • +
  • mmap で並列の Task で走らせると、ランダムアクセスとなってしまうため速度が遅くなってしまう。

まとめ

-
  • I/O と Task を分離し、同時に動くように改良した。
  • I/O 専用の Thread の追加
  • @@ -257,6 +249,9 @@
  • 様々な実装の試み
    (I/O threads を 2つ、分割 mmap・・・)
  • +
  • + grepの実装 +
@@ -329,10 +324,10 @@
-

Block Read の実装(1/2)

-
-

Block Read の実装

-
+    

Block Read の実装(1/2)

+
+

Block Read の実装

+
 HTaskPtr t_read = manager->create_task(READ_TASK);
 t_read->set_cpu(read_spe_cpu);
 // 読み出すファイルの格納場所を設定
@@ -353,14 +348,14 @@
 
 t_read->spawn();
 
-
+
-

Block Read の実装(2/2)

-
-

Block Read の記述

-
+    

Block Read の実装(2/2)

+
+

Block Read の記述

+
     static int
 read_task(SchedTask *s, void *rbuf, void *wbuf)
 {
@@ -373,7 +368,7 @@
     pread(fd, read_text, read_size , start_read_position);
     return 0;
 }
-
+