# HG changeset patch # User Masataka Kohagura # Date 1393062471 -32400 # Node ID 6efbdf3218c59b9bc5e9e0bb32adde2a10a46a54 # Parent a56ad81ccdf9f73d2e6528cbf3961b4a4a4f73b1 finish?? diff -r a56ad81ccdf9 -r 6efbdf3218c5 preliminary/final-thesis.pdf Binary file preliminary/final-thesis.pdf has changed diff -r a56ad81ccdf9 -r 6efbdf3218c5 preliminary/final-thesis.tex --- a/preliminary/final-thesis.tex Sat Feb 22 16:36:51 2014 +0900 +++ b/preliminary/final-thesis.tex Sat Feb 22 18:47:51 2014 +0900 @@ -66,7 +66,7 @@ mmap でファイルを読み込むタイミングは、mmap 関数が呼ばれたときではなく、mmap した領域に対して何らかのアクセスをしたときに初めてファイルが読み込まれる。 つまり、分割された Task は文字列検索をすぐに行うのではなく、文字列検索を行おうとした時に初めてファイルが格納される。 -Task は複数一斉に実行されることが望ましいが、mmap だとそれぞれの Task で読み込みが起こってしまうので、I/O ネックによる Task の待ちが発生する恐れがある。 +Task は複数一斉に実行されることが望ましいが、mmap だとそれぞれの Task で読み込みが起こってしまうので、I/O ネックによる Task の待ちが発生する。 \subsection{Blocked Read の設計と実装} Blocked Read とは、あるサイズずつで読み込む処理と、それらに文字列検索行う処理を分離させるための実装方法である。 @@ -81,7 +81,7 @@ \begin{figure}[htbp] \begin{center} -\includegraphics[width=0.4\textwidth]{pic/blockedreadwait.pdf} +\includegraphics[width=0.5\textwidth]{pic/blockedreadwait.pdf} \end{center} \caption{Wait for Blocked Read} \label{fig:blockedreadwait} @@ -91,19 +91,20 @@ Cerium Task Manager では Task 単位で CPU Type の設定を変更することができる。 SPE\_ANY という CPU Type を設定すると、Cerium Task Manager 側が自動的に CPU を割り振ってくれる。 しかし、今回の実装でこのCPU Type を使用してしまうと、Blocked Read Task の隙間時間に Task が割り振られてしまう問題がある。 -(図\ref{fig:speany}) - -\begin{figure}[htbp] -\begin{center} -\includegraphics[width=0.4\textwidth]{pic/speany.pdf} -\end{center} -\caption{SPE\_ANYでの設定時} -\label{fig:speany} -\end{figure} - その問題を解決するために、IO\_0 という CPU Type を新しく実装した。 IO\_0 は他の CPU Type よりも priority を高く設定しているので、他の Task に割り込まれることがないようにした。 (図\ref{fig:io0}) +%% +%(図\ref{fig:speany}) +% +%\begin{figure}[htbp] +%\begin{center} +%\includegraphics[width=0.4\textwidth]{pic/speany.pdf} +%\end{center} +%\caption{SPE\_ANYでの設定時} +%\label{fig:speany} +%\end{figure} + \begin{figure}[htbp] \begin{center} @@ -115,37 +116,47 @@ \section{ベンチマーク} -\subsection{実験環境} \begin{itemize} \item Mac OS X Mavericks (10.9.1) \item HDD 1TB、Memory 16GB、CPU 2*2.66 GHz 6-Core Intel Xeon \item ファイルサイズ 10GBに対して検索文字列がいくつ含まれるのかカウント + \item 測定はファイルの読み込みから結果が返ってくるまでの時間 \end{itemize} -\subsection{実験結果} + +%以下の表\ref{table:result}に実行結果を示す。 +以下の表1に実行結果を示す。 \begin{tiny} \begin{table}[ht] \begin{center} - \label{table:preaddata} + \label{table:result} \small - \begin{tabular}[t]{c|l} + \begin{tabular}[t]{c|r} \hline - 読み込み方法 & 実行速度(s)\\ + 読み込み方法 & 平均実行速度(s)\\ \hline - mmap & XX.XXX \\ + mmap & 154.6 \\ \hline - Blocked Read \& SPE\_ANY & XX.XXX \\ + Blocked Read \& SPE\_ANY & 106.0 \\ \hline - Blocked Read \& IO\_0 & XX.XXX \\ + Blocked Read \& IO\_0 & 99.2 \\ \hline \end{tabular} - \caption{file read の実行結果} + \caption{実行結果} \end{center} \end{table} \end{tiny} +%\ref{table:result}より、mmap より Blocked Read \& IO\_0 の実行速度が 36 \% 改善された。 +表1より、mmap より Blocked Read \& SPE\_ANY の実行速度が 31\% 改善された。 +また、Blocked Read の CPU Type も SPE\_ANY から IO\_0 に変更することによって更に 4 \% の改善が見られた。 +これより、I/O を含む並列処理を行う場合は、mmap で OS に任せるのではなく、自分自身で読み込みを制御したほうが速くなることがわかる。 -\section{まとめと今後の課題} +\section{まとめ} +mmap で I/O を含む Task を実装するとき、mmap した領域に対して何らかの処理が加わった時にしか読み込みが行わないので、それぞれの Task に読み込みを任せてしまうことになる。 +それを解決する方法として、Blocked Read と Task を並列に行う実装を行った。また、Blocked Read は、他の Task に割り込まれないように改善した。 +その結果、35 \% の実行速度の改善が見られた。 + \thispagestyle{fancy} \begin{thebibliography}{9}