# HG changeset patch
# User Masataka Kohagura
# Date 1392109896 -32400
# Node ID 9def91a908d66cea9a6213938b91ad9607a290f7
# Parent 54591c145fec898c16ea2257c6f4aae19f976e08
add
diff -r 54591c145fec -r 9def91a908d6 slide/images/blockread.graffle
--- 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 @@
MasterSheets
ModificationDate
- 2014-02-11 05:26:28 +0000
+ 2014-02-11 08:18:18 +0000
Modifier
MasaKoha
NotesVisible
@@ -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}
+\f0\fs24 \cf0 Blocked Read Task 2}
VerticalPad
0
@@ -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}
+\f0\fs24 \cf0 Blocked Read}
VerticalPad
0
@@ -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}
+\f0\fs24 \cf0 Blocked Read Task 1}
VerticalPad
0
@@ -4070,7 +4070,7 @@
WindowInfo
CurrentSheet
- 3
+ 0
ExpandedCanvases
Frame
@@ -4088,7 +4088,7 @@
SidebarWidth
120
VisibleRegion
- {{-53, 0}, {665.71428571428567, 422.28571428571428}}
+ {{0, 0}, {665.71428571428567, 422.28571428571428}}
Zoom
1.75
ZoomValues
diff -r 54591c145fec -r 9def91a908d6 slide/images/blockread.png
Binary file slide/images/blockread.png has changed
diff -r 54591c145fec -r 9def91a908d6 slide/index.html
--- 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 が並列に動作するようにはされていない。
- 現状では、ファイルを全て memory に mapping を行ってから Task が走るようになっているので、非常に大きいサイズのファイルを読み込むと、ファイルを memory に mapping するまでの時間がオーバーヘッドになってしまう。
+ 現状では、ファイルを memory に mapping を行ってから Task が走るようになっているので、I/O と Task が並列に動作しない。
本研究では I/O と Task が並列に動作するような設計、実装によってプログラム全体の
- 処理速度を上げていく。
+ 並列度、及び処理速度を上げていく。
+
+
+ mmapでの実装の問題点
+
+ -
+ mmap で file を読み込むと、file は memory 上にて即座には展開されない。
+
+ -
+ file が memory に展開されるタイミングは、その file に対して何らかの計算を行うときである。
+ →つまり、Task が走るときに初めて memory に file を格納するので、I/O と Task が分離できない。
+
+
+
+
+
並列処理向け I/O の 設計と実装
- I/O を含む Task の説明
- - mmap での実装
- mmap の説明
- - Block Read の設計
- - Block Read の実装
+ - Blocked Read の設計と実装
+ - ベンチマーク
@@ -128,7 +99,7 @@
- - file mmaping 後、file をある一定の大きさに分割する
+ - file mapping 後、file をある一定の大きさに分割する
- 分割した file に対して、それぞれ計算を行う
- 計算した結果を集計する
@@ -136,31 +107,6 @@
- mmap での I/O の実装
-
- mmap の記述
-
-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);
-}
-
-
- -
- PROT_READ : 読み込み可
-
- -
- MAP_PRIVATE : 読み込んだ領域に対して書き込みが起こると複製し、複製した領域に対して書き込みを行う
-
-
-
-
-
mmap の説明
@@ -193,7 +139,7 @@
- Block Read の設計
+ Blocked Read の設計
@@ -206,9 +152,6 @@
先読みを自分で書ける(制御できる)
- code が煩雑
-
-
memory より大きなファイルを扱える
@@ -253,38 +196,8 @@
-->
-
-
- Block Read の実装(1/3)
-
- Block Read の実装
-
-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();
-
-
-
-
-
- Block Read の実装(2/3)
+ Blocked Read の実装
@@ -297,38 +210,17 @@
Task 1つ当たりの読み込む領域を L とする。
- Block Read Task 1つ当たり、memory に格納する大きさは L × n となる。
+ Blocked Read Task 1つ当たり、memory に格納する大きさは L × n となる。
- Block Read Task が読み込み終わるまで、Task Block に wait を掛ける。
+ Blocked Read Task が読み込み終わるまで、Task Block に wait を掛ける。
(Read Task が格納する前に走ると、まだ格納していない領域を読みこんでしまう。)
-
- Block Read の実装(3/3)
-
- Block Read の記述
-
-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;
-}
-
-
-
-
- ベンチマーク(1/)
+ ベンチマーク(1/3)
実験環境
- ベンチマーク(2/)
-
- file が memory に残っていない状態での測定
-
+ ベンチマーク(2/3)
+
+ -
+ file が memory に残っていない状態での測定
+
+ -
+ one task size 128KByte
+
+ -
+ Task Blocks 48
+
+
結果
@@ -356,8 +256,6 @@
read mode |
cpu num |
- one task size |
- task blocks |
min time(s) |
MAX time(s) |
ave time(s) |
@@ -365,8 +263,6 @@
mmap |
4 |
- 128kbyte |
- 48 |
135.2 |
148.9 |
142.3 |
@@ -374,8 +270,6 @@
BRead |
4 |
- 128kbyte |
- 48 |
94.5 |
109.2 |
98.8 |
@@ -384,8 +278,6 @@
mmap |
12 |
- 128kbyte |
- 48 |
147.0 |
181.8 |
154.6 |
@@ -393,8 +285,6 @@
BRead |
12 |
- 128kbyte |
- 48 |
91.6 |
117.5 |
99.2 |
@@ -402,8 +292,22 @@
+
+
+ ベンチマーク(3/3)
考察
+
+ -
+ mmap より、Blocked Readのほうが % ほど速くなった
+
+ -
+ I/O と Task が分離できた。
+
+ -
+
+
+
@@ -414,15 +318,36 @@
さらなる 並列処理向け I/O の動作を改善
- 分散バージョン I/0 の設計と実装
-
-
I/O を利用した、マルチコアソフトウェアシンセサイザーを設計
+
+ マルチコアソフトウェアシンセサイザーの設計
+
+
+ -
+ 作曲をする際にはマシンパワーが必要となることが多い。
+
+ -
+ ソフトウェアシンセサイザー(以下、シンセサイザー)を使用する際にマシンパワーが必要となる。
+
+ -
+ シンセサイザーは1つだけで立ち上げる物ではなく、複数立ち上げる物なので、1つ1つの負荷を抑えることがキーポイントとなる。
+
+ -
+ シンセサイザーは様々なフィルターをかけることで音を作っていくのだが、フィルターを重ねても動作軽量なプログラムを作る。
+
+
+