# HG changeset patch # User Masataka Kohagura # Date 1393154391 -32400 # Node ID 927df4d4c4d5196b831865b4ba45b6fcf94f5162 # Parent d6f83dd6301f200b135a2837b345290e360a9c43 fix diff -r d6f83dd6301f -r 927df4d4c4d5 paper/chapter4.tex --- a/paper/chapter4.tex Sat Feb 22 23:31:55 2014 +0900 +++ b/paper/chapter4.tex Sun Feb 23 20:19:51 2014 +0900 @@ -36,7 +36,7 @@ \hline int fd & 読み込むファイルのファイルディスクリプタ\\ \hline - off\_t offset & ファイル読み込みの先頭からの開始位置 \\ + off\_t offset & ファイル先頭からの読み込み開始位置 \\ \hline \end{tabular} \caption{mmap 関数の概要} @@ -60,8 +60,35 @@ \caption{mmap image} \label{fig:mmap} \end{figure} + \section{Bloked Read の設計と実装} -Blocked Read とは、読み込みの Task と、それに対する何らかの処理の Task を切り離すための実装方法で、pread 関数で実装した。 +Blocked Read とは、読み込みの Task と、それに対する何らかの処理の Task を切り離すための実装方法で、pread 関数にて実装した。 +pread 関数は、unistd.h に含まれているので、UNIX 専用の関数である。ファイルディスクリプタで指定したファイルの先頭 から +offset 分ずれた場所を基準として、その基準から count バイトを読み込み、それを buf に格納する。\ref{table:pread} + +\begin{tiny} + \begin{table}[ht] + \begin{center} + \label{table:pread} + \small + ssize\_t pread(int d, void *buf, size\_t nbyte, off\_t offset); + + \begin{tabular}[t]{c|l} + \hline + int d & 読み込むファイルのファイルディスクリプタ\\ + \hline + void *buf & 読み込んだファイルの格納場所 \\ + \hline + size\_t nbyte & 読み込むファイル量\\ + \hline + off\_t offset & ファイル先頭からの読み込み開始位置\\ + \hline + \end{tabular} + \caption{pread 関数の概要} + \end{center} + \end{table} +\end{tiny} + mmap での実装との違いは、ファイルの読み込みがどのタイミングで起こるかである。 mmap で実装したときは、Task 1つ 1つが読み込みを行ってから処理を行う。 それに対して、Blocked Readは、読み込み専用の Read Task と、処理専用の Task を別々に生成する。 @@ -99,7 +126,6 @@ - \section{I/O 専用 thread の実装} Cerium Task Manager では、各種 Task にデバイスを設定することができる。デバイスとは、GPU や CPU であり、GPUを利用するときは GPU\_ANY、CPU を利用するときは SPE\_ANYと設定することによってデバイスを利用できる。 @@ -116,7 +142,10 @@ \label{fig:speany} \end{figure} -この問題を解決するために、Task Manager に新しいデバイス設定を追加した。 +この問題を解決するために、Task Manager に IO\_0という新しいデバイス設定を追加した。 +この設定は他のデバイス設定よりも priority を高く設定している。SPE\_ANY よりも高く設定しているので、SPE\_ANY で設定した Task に割り込まれることがなくない。 + +Read Task には IO\_0、文字列検索の Task には SPE\_ANY でデバイスの設定を行うと、Read Task の隙間時間に 文字列検索の Task が割り込むことはなくなる。 ・ Cerium の Task に CPU Type を設定することができる。しかし、同じCPU Type を使用すると、IO を担当している CPU に Task が割り振られて、read 全体の速度が遅くなってしまう。 ・ Cerium では ptherad で並列処理を記述している diff -r d6f83dd6301f -r 927df4d4c4d5 paper/thesis-paper.pdf Binary file paper/thesis-paper.pdf has changed diff -r d6f83dd6301f -r 927df4d4c4d5 preliminary/final-thesis.pdf Binary file preliminary/final-thesis.pdf has changed diff -r d6f83dd6301f -r 927df4d4c4d5 preliminary/final-thesis.tex --- a/preliminary/final-thesis.tex Sat Feb 22 23:31:55 2014 +0900 +++ b/preliminary/final-thesis.tex Sun Feb 23 20:19:51 2014 +0900 @@ -70,7 +70,7 @@ \subsection{Blocked Read の設計と実装} Blocked Read とは、あるサイズずつで読み込む処理と、それらに文字列検索行う処理を分離させるための実装方法である。 -この方法では、読み込み専用の Blocked Read と、文字列検索を行う Task Blocks をを別々に生成し処理を行う。 +この方法では、読み込み専用の Blocked Read と、文字列検索を行う Task Blocks を別々に生成し処理を行う。 Read Task はファイル全体を一度に読み込むのではなく、ある程度の大きさで分割を行い、読み込みされ次第それぞれの文字列検索が行われる。 Task は 1つずつ起動すると、起動した Task でメモリを圧迫してしまうため、Task を複数まとめたブロック単位で起動を行う。