# HG changeset patch # User Masataka Kohagura # Date 1393079515 -32400 # Node ID d6f83dd6301f200b135a2837b345290e360a9c43 # Parent 6efbdf3218c59b9bc5e9e0bb32adde2a10a46a54 suspended to write io_0 diff -r 6efbdf3218c5 -r d6f83dd6301f paper/chapter4.tex --- a/paper/chapter4.tex Sat Feb 22 18:47:51 2014 +0900 +++ b/paper/chapter4.tex Sat Feb 22 23:31:55 2014 +0900 @@ -55,9 +55,9 @@ \begin{figure}[htbp] \begin{center} -\includegraphics[width=1.0\textwidth]{fig/mmap.pdf} +\includegraphics[width=0.7\textwidth]{fig/mmap.pdf} \end{center} -\caption{mmap のイメージ} +\caption{mmap image} \label{fig:mmap} \end{figure} \section{Bloked Read の設計と実装} @@ -68,47 +68,57 @@ Read Task はファイル全体を一度に読み込むのではなく、ある程度の大きさで分割を行う。 分割して読み込み終わったら、それぞれの Task が実行される。 (図\ref{fig:block}) -Read Task は常に実行されている必要があり、 - - - -・ TaskManager で allocate して、Task として呼び出した pread で allocate 部分に格納している - -・ pread で実装したものを、Task と IO が並列に動くようにしないといけない - -・ pread は常に走っていているのが理想 - - +Read Task が生成されて、その後 Task の生成となるので、Read Task は常に走っている必要がある。 \begin{figure}[htbp] \begin{center} -\includegraphics[width=1.0\textwidth]{fig/blockedreadimage.pdf} +\includegraphics[width=0.8\textwidth]{fig/blockedreadimage.pdf} \end{center} \caption{Blocked Read image} \label{fig:block} \end{figure} -・ これで IO と Task が同時にはしるようになった +図\ref{fig:block} では、Read Task 1つに対して Task 1つ起動しているが、このように1つ1つ生成、起動をすると Task 生成でメモリを圧迫してしまい、全体的な動作に影響を与えてしまう。 +実際には Task をある一定数まとめた単位で生成し、起動を行っている。この単位を Task Block と定義する。 -・ 実験結果?? +Task Block 1つ当たりの Task 量を $n$ とおく。Task 1つ当たりの読み込む量を $L$ とすると、Task Block 1つ当たりの読み込む量は $L \times n$ となる。 +Blocked Read が読み込み終わってから、Task Blockが起動するようにするので、Blocked Read 1つ当たりの読み込み量も $L \times n$となる。 -・ Task は実際には 1個1個生成しているのではなく +もし、Task Block が Blocked Read よりも先走ってしまうとどうなるであろうか。 +まだ読み込まれていない領域に対して何らかの処理を行ってしまうので、正しい結果が返ってこなくなってしまう。 +それを防止するために、Blocked Read が読み込み終わってから Task Block が起動されるように wait をかけている。 -・ Cerium の Task に CPU Type を設定することができる。しかし、同じCPU Type を使用すると、IO を担当している CPU に Task が割り振られて、read 全体の速度が遅くなってしまう。 +(図\ref{fig:block}) +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=1.0\textwidth]{fig/blockreadtask.pdf} +\end{center} +\caption{Blocked Read image} +\label{fig:block} +\end{figure} -図\ref{fig:speany} + + +\section{I/O 専用 thread の実装} +Cerium Task Manager では、各種 Task にデバイスを設定することができる。デバイスとは、GPU や CPU であり、GPUを利用するときは GPU\_ANY、CPU を利用するときは SPE\_ANYと設定することによってデバイスを利用できる。 + +SPE\_ANY を使用すると、Task Manager で CPU の割り振りを自動的に行ってくれる便利な機能である。しかし、この機能を使用すると、Blocked Read に影響を与えてしまう。 + +Blocked Read 、Task それぞれに SPE\_ANY で CPUを自動的に割り振ると、Task Manager 側で自動的に CPU を割り当てる。このように CPU を割り当ててしまうと、本来 Blocked Read は連続で読み込むはずが、他の Task を割り当てられてしまう。 +(図\ref{fig:speany}) \begin{figure}[htbp] \begin{center} \includegraphics[width=1.0\textwidth]{fig/speany.pdf} \end{center} -\caption{[image]priority を上げる前の image 図} +\caption{SPE\_ANY での実装時} \label{fig:speany} \end{figure} +この問題を解決するために、Task Manager に新しいデバイス設定を追加した。 -\section{I/O 専用 thread の実装} +・ Cerium の Task に CPU Type を設定することができる。しかし、同じCPU Type を使用すると、IO を担当している CPU に Task が割り振られて、read 全体の速度が遅くなってしまう。 ・ Cerium では ptherad で並列処理を記述している ・ SPY\_ANY という CPU Type は、Cerium 側が自動的に CPU 割り当てを行う便利なマクロ @@ -120,6 +130,7 @@ ・ pthread の API で CPU の priority をあげることができる。 + 図\ref{fig:io0} \begin{figure}[htbp] diff -r 6efbdf3218c5 -r d6f83dd6301f paper/fig/blockreadtask.bb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/fig/blockreadtask.bb Sat Feb 22 23:31:55 2014 +0900 @@ -0,0 +1,5 @@ +%%Title: ./fig/blockreadtask.pdf +%%Creator: extractbb 20090506 +%%BoundingBox: 0 0 564 265 +%%CreationDate: Sat Feb 22 22:35:40 2014 + diff -r 6efbdf3218c5 -r d6f83dd6301f paper/fig/blockreadtask.pdf Binary file paper/fig/blockreadtask.pdf has changed diff -r 6efbdf3218c5 -r d6f83dd6301f paper/thesis-paper.pdf Binary file paper/thesis-paper.pdf has changed