view paper/benchmark.tex @ 12:6f6f482b9f12

fix
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Sun, 20 Apr 2014 22:21:07 +0900
parents 91662ffcaf0b
children 84383e5e2e85
line wrap: on
line source

\section{Benchmark} \label{section:benchmark}

例題で紹介した Word Count に Blocked Read を組み込み、1 GB のファイルで計測を行った。

実験環境
\begin{itemize}
\item Mac OS X 10.9.1
\item 2*2.66 GHz 6-Core Intel Xeon
\item Memory 16GB 1333MHz DDR3
\item HHD 1TB
\item CPU num 12
\end{itemize}

\subsection{結果}

以下の表に読み込み時間を含めた場合の実行結果を示す。

\begin{tiny}
  \begin{table}[ht]
    \begin{center}
      \label{table:result}
      \small
      \begin{tabular}[t]{c|r}
        \hline
        読み込み方法 & 実行速度(s)\\
        \hline
        mmap & 15.875 \\
        \hline
        mmap (CPU num = 1)& 15.294 \\
        \hline
        一括 Read & 12.520 \\
        \hline
        一括 Read (CPU num = 1)& 18.758 \\
        \hline
        Blocked Read \& SPE\_ANY & 14.028 \\
        \hline
        Blocked Read \& IO\_0 & 10.295 \\
        \hline
      \end{tabular}
      \caption{読み込みを含めた実行結果}
    \end{center}
  \end{table}
\end{tiny}

また、キャッシュに入った場合での実行結果を以下に示す。

\begin{tiny}
  \begin{table}[ht]
    \begin{center}
      \label{table:result}
      \small
      \begin{tabular}[t]{c|r}
        \hline
        読み込み方法 & 実行速度(s)\\
        \hline
        mmap & 0.878 \\
        \hline
        一括 Read & 1.469 \\
        \hline
        Blocked Read \& IO\_0 & 0.866 \\
        \hline
      \end{tabular}
      \caption{キャッシュに入った時の実行結果}
    \end{center}
  \end{table}
\end{tiny}

読み込みを含めた場合の実験結果より、Blocked Read \& IO\_0 の実行速度が mmap と比較して 1.55 倍向上した。
また、Blocked Read の CPU Type も SPE\_ANY から IO\_0 に変更することによって 1.36 倍向上した。
% mmap だとそれぞれの WordCount の Task が実行されるときに、処理される範囲の読み込みが行われるので、I/O ネックでうまく並列に走ることができずに
Blocked Read で WordCount Task と Read Task を分離させた。
Blocked Read Task がファイル読み込みを行っている間も、WordCount Task は読み込んだ範囲に対して並列処理を行うことができた。
その結果、mmap より速く WordCount 処理を行うことができたと考える。

キャッシュに入った時は、mmap のほうが一括 Read と比較して 1.67 倍速くなる。そして、mmap と Blocked Read と mmap は、ほとんど同じ実行速度となった。


%\subsection{考察}

% mmap より Blocked Read で実装したほうが速くなったが、これは mmap の読み込み方法が問題であると考える。
% 
% I/O を含む例題の場合、シングルコアでの逐次実行であれば、mmap や pread で実装しても、Task は 読み込みを行って文字列検索を行うというシンプルな動作になる。
% しかし、マルチコアの並列実行であれば、mmap で実装してしまうと、Task それぞれで読み込みを行ってしまうので競合が発生してしまう。
% 
% 読み込みの競合が起こらないように Blocked Read にて読み込み部分と文字列検索部分を分けた結果、こちらのほうが速度が向上した。