view paper/chapter3.tex @ 34:472f45ab9fca draft default tip

fix
author Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
date Thu, 16 Feb 2012 23:46:16 +0900
parents 140aec35135c
children
line wrap: on
line source

\chapter{TaskManagerを使った例題}
本章では、TaskManager を使った例題を紹介する
\section{WordCount}
例題としTaskManagerを使ったWordCountを実装した。Taskの構成は以下のである。
\begin{enumerate}
\item WordCountTask
\item PrintTask
\end{enumerate}

WordCountTaskは、input された data を word count し、単語数と行数を output に指定された data 領域に書きこむTaskである。
分割されたデータが送られてくるため、分割された前後のテキストがどうなっているかはわからない。そのため担当範囲であるデータの先頭と末尾のパラメータを単語数と行数の他に付け加える。後にそのデータを他のword count 結果と照らし合わせ、分割されたテキストを正しく整合する。
PrintTask は WordCountTask によって書き出された単語数と行数を集計し、出力するTaskである。WordCountTask を wait する設定で、すべてのWordCountTaskが終了したあとに、動作する。
word count 対象として入力されたファイルは、mmapを用いてメモリに展開する。その後データを16kbyteの大きさに分割しながら、WordCountTaskに割り当てていく。(\figref{wc-graf})

\begin{figure}[htb]
  \begin{center}
    \includegraphics[scale=0.70]{./images/wc_graf1.pdf}
  \end{center}
  \caption{wordcount flow}
  \label{fig:wc-graf}
\end{figure}

サイズを 100MB, 200MB としたテキストファイルを対象に、速度の測定を行った。Linux wc は PS3上の Linux のが提供するwcコマンドを用いた結果で PPE 1基を利用したものである。Cerium wc は SPE 6基 を用い今回実装した word count の計測結果である。(\tabref{wc_speed}) 

\begin{table}[!htb]
  \begin{center}
    \caption{speed of WordCount} \label{tab:wc_speed}
    \hbox to\hsize{\hfil
      \begin{tabular}{|c|c|c|c|} \hline
           wc     & file size(MB) & time(sec) \\ \hline
         Linux    &  100         & 30.9      \\ \hline
         Linux    &  200         & 62.8      \\ \hline
         Cerium   &  100         & 2.2       \\ \hline
         Cerium   &  200         & 12.8       \\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}

100MBのテキストを扱う場合には、Linux と比べ15倍ほどの差が見られた。200MB の場合は約5倍ほどであるのは、PPE のメモリ容量が256MBとなっており、200MBのファイルを扱う場合には、頻繁にスワップなどが起きているため、ファイルのIOの部分でのオーバヘッドが高いと考えられる。通常のwcコマンドよりも Cerium を用いた wc が高い性能を示した。

% 適当に加筆修正してください
\section{Sort}
例題としてTaskManagerを使ったSortを実装した。Taskの構成は以下の通りである。
\begin{enumerate}
\item SortSimpleTask
\item QuickSortTask
\end{enumerate}

指定された数の乱数を生成し、Sort を行う例題である。
SortSimpleTask は、Task の割り当てを行う Task である。
始めに乱数列を分割し、QuickSortTask に割り当てる。
QuickSortTask は、割り当てられた範囲を Sort する。
次に、SortSimpleTask は、最初に分割して割り当てた範囲の中間から次の範囲の中間までをQuickSortTaskに割り当てる。
このようなTaskの割り当てを分割数分、繰り返し実行することで全体を Sort する。(\figref{sort-graf})

\begin{figure}[htb]
  \begin{center}
    \includegraphics[scale=0.70]{./images/sort.pdf}
  \end{center}
  \caption{Sort flow}
  \label{fig:sort-graf}
\end{figure}

10万入力のソートの速度の測定を行った。 PPE 1基のみを利用したものと、SPE 6 基を利用したものの計測結果である。(\tabref{sort_speed})

\begin{table}[!htb]
  \begin{center}
    \caption{speed of Sort} \label{tab:sort_speed}
    \hbox to\hsize{\hfil
      \begin{tabular}{|c|c|c|c|} \hline
         Sort    	 & time(sec) \\ \hline
         PPE  	 	 & 6.2       \\ \hline
         PPE + SPE   & 1.1       \\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}

\section{Prime Counter}
例題としてTaskManagerを使ったPrime Counterを実装した。Taskの構成は以下の通りである。
\begin{enumerate}
\item PrimeTask
\item PrintTask
\end{enumerate}

PrimeTaskは、指示された範囲を素数判定し、渡された配列に結果を収めるTaskである。
ミラー-ラビン素数判定法を用いて、2, 3, 5, 7 及び 11 について調べることで、$2{,}152{,}302{,}898{,}747$以下において決定的アルゴリズムにしている。\cite{Jaeschke93}
% 参考文献 http://primes.utm.edu/prove/prove2_3.html
% Jaeschkeによる
PrintTaskは、PrimeTaskによって判定された素数を出力するTaskである。出力指示がされている場合のみ、素数を出力する。


10万までの範囲の全ての素数の数え上げを行った。 PPE 1基のみを利用したものと、SPE 6 基を利用したものの計測結果である。(\tabref{prime_speed})

\begin{table}[!htb]
  \begin{center}
    \caption{speed of Prime Counter} \label{tab:prime_speed}
    \hbox to\hsize{\hfil
      \begin{tabular}{|c|c|c|c|} \hline
         Sort    	 & time(sec) \\ \hline
         PPE  	 	 & 2.1       \\ \hline
         PPE + SPE   & 0.6       \\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}