annotate paper/c3.tex @ 113:868e1eed4830 default tip

add some files
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Fri, 26 Feb 2016 17:40:40 +0900
parents 4b1ac04e01aa
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1 \chapter{並列処理向け I/O}
62
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
2 ファイル読み込みなどの I/O を含むプログラムは、読み込み時間が Task の処理時間と比較して大きくなってしまう。
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
3 計算処理の並列化を図ったとしても I/O がボトルネックになるので、読み込み時間の長さだけプログラム全体の処理速度が遅くなってしまう。
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
4 従来の例題のファイル読み込み部分では mmap を利用していたが、読み込みと Task が並列に動くような実装を行ない、プログラム全体の高速化を図った。
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
5
62
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
6 本章では mmap による読み込みと並列処理向け I/O について述べる。
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
7
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
8 \section{mmap}
62
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
9 Cerium の従来の例題ではファイル読み込みを mmap にて実装していた。
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
10 mmap は function call 後にすぐにファイルを読みに行くのではなく、仮想メモリ領域にファイルの中身を対応させ、 その後メモリ空間にアクセスされたときに OS が対応したファイルを読み込む。
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
11 そのため、mmap によるファイルを読み込みは読み込み後に Task を実行するので、その間は他の CPU が動作せず並列度が落ちる。
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
12
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
13 また、読み込む方法が OS 依存となってしまうため環境に左右されやすく、プログラムの書き手が読み込みの制御をすることが難しい。
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
14
62
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
15 図\ref{fig:mmap}は mmap で読み込んだファイルに対して Task1 、 Task2 が並列で動作し、それぞれの Task がファイルにアクセスしてそれぞれの処理を行うときのモデルである。
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
17 Task1 が実行されると仮想メモリ上に対応したファイルが読み込まれ、読み込み後 Task1 の処理が行われる。
62
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
18 それと同時に Task2 も Task1 と同様の処理が行われるが、Task1 が読み込みをしている間 Task2 が読み込みを行わない。
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
19
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
20 また、Task1 が実行されるときに初めてそれらの領域にファイルが読み込まれるので、Task1 の文字列処理を実行しない限り Task2 がさらに待たされてしまう。
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
21
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
22 mmap によるファイルの読み込みは Task と並列に実行されるべきであるが、OS の実装に依存してしまう。
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
23
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
24 \newpage
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
25
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
26 \begin{figure}[htpb]
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
27 \begin{center}
63
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
28 \includegraphics[scale=0.20]{images/cerium/mmap.pdf}
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
29 \end{center}
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
30 \caption{mmap Model}
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
31 \label{fig:mmap}
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
32 \end{figure}
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
33
62
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
34 \section{Blocked Read}
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
35 mmap ではファイル読み込みを細かく設定することができないので、読み込みを制御できるように実装した。さらに、読み込みと Task が並列に動作するようにした。
32
7a74aa1fe42f add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
36
94
masa
parents: 63
diff changeset
37 読み込みを独立した Thread で行ない、ファイルをある程度の大きさ(Block)ごとに読み込む。
masa
parents: 63
diff changeset
38 そして、読み込まれた部分に対して並列に Task を起動する。
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
39 これを Blocked Read と呼び、I/O の読み込みと Task の並列化を図った。
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
40
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
41 ファイルを読み込む Task (以下、Blocked Read) と、読み込んだファイルに対して計算を行う Task を別々に生成する。
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
42 Blocked Read は一度にファイル全体を読み込むのではなく、ある程度の大きさで分割してから読み込みを行う。
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
43 分割して読み込んだ範囲に対して Task を実行する。
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
44
94
masa
parents: 63
diff changeset
45 図\ref{fig:BlockedReadModel} では、Task をn 個単位でまとめた Task Block を生成する。1つのTask はファイルの長さ {\tt L} の部分を処理する。
masa
parents: 63
diff changeset
46 したがって、1つのTask Block は {\tt L x n} の部分を処理する。
masa
parents: 63
diff changeset
47
62
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
48 Task Block で計算される領域が Blocked Read で読み込む領域を追い越して実行してしまうと、まだ読み込まれていない領域に対して計算されてしまう。
94
masa
parents: 63
diff changeset
49 Blocked Read による読み込みが終わってから TaskBlock が起動されるように、Cerium の API である wait\_for を使って待ち合わせを行う。
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
50
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
51 \begin{figure}[htpb]
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
52 \begin{center}
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
53 \includegraphics[scale=0.5]{./images/cerium/blockedread.pdf}
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
54 \end{center}
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
55 \caption{BlockedRead Model}
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
56 \label{fig:BlockedReadModel}
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
57 \end{figure}
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
58
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
59 \section{I/O 専用 thread の追加}
62
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
60 Blocked Read は読み込みを含む処理なので、Blocked Read 1 つあたりの処理時間は大きくなる。
0d13c52a54fd remove bm_search explain
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
61 Blocked Read がファイルを読み込む前提で Task がその領域に対して計算を行うので、Blocked Read の処理によってプログラム全体の処理速度が左右されてしまう。
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
62
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
63 Cerium Task Manager では、それぞれの Task に対してデバイスを設定することができる。
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
64 SPE\_ANY 設定をすると、Task Manager が CPU の割り振りを自動的に行う。
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
65 しかし、自動的に割り振りを行なってしまうと、Blocked Read Task 間に Task が割り込まれてしまい、読み込みが遅延してしまう可能性がある。
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
66 (図\ref{fig:spe_any_blockedread})
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
67
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
68 \begin{figure}[htpb]
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
69 \begin{center}
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
70 \includegraphics[scale=0.7]{./images/cerium/speblockedread.pdf}
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
71 \end{center}
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
72 \caption{BlockedRead と Task を同じ thread で動かした場合}
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
73 \label{fig:spe_any_blockedread}
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
74 \end{figure}
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
75
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
76 そこで、Task が Blocked Read Task 間に割り込まれないようにするため、I/O 専用 thread である iO\_0 の設定を追加した。
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
77
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
78 IO\_0 は SPE\_ANY とは別 thread の scheduler で動作するので、SPE\_ANY で動作している Task に割り込むことはない。
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
79 しかし、読み込みの終了を通知し、次の read を行う時に他の Task がスレッドレベルで割り込んでしまう事があるため、
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
80 pthread\_getschedparam() で IO\_0 の priority の設定を行う必要がある(図:\ref{fig:iothread_blockedread})。
23
1803c5766d06 c3 finish
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
81
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
82 \begin{figure}[htpb]
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
83 \begin{center}
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
84 \includegraphics[scale=0.7]{./images/cerium/iothread.pdf}
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
85 \end{center}
16
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
86 \caption{IO Thread による BlockedRead}
a3c5125aea03 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
87 \label{fig:iothread_blockedread}
10
d6fd4f0e84f3 add images
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
88 \end{figure}