# 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 の構造
- 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;
}
-
+