Mercurial > hg > Papers > 2016 > masa-master
view paper/c5.tex @ 68:4caaa1c0779c
fix
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 16 Feb 2016 18:16:21 +0900 |
parents | 9c16f6b18100 |
children | c01a514d33f7 |
line wrap: on
line source
\chapter{ベンチマーク} 本項で行なった実験の環境は以下の通りである。 \begin{itemize} \item Mac OS X 10.10.5 \item 2*2.66 GHz 6-Core Intel Xeon \item Memory 16GB 1333MHz DDR3 \item 1TB HDD \end{itemize} Cerium で実装した Word Count と Mac の wc の比較と、実装した正規表現と Mac の egrep の比較を行なった。 また、それぞれの結果に実装した並列処理向け I/O の結果も含む。 \section{Word Count} ファイルの大きさは 約500MByte で、このファイルには 約650万行、約8300万単語が含まれている。 表\ref{table:IOwordcount} は、ファイル読み込みを含めた Word Count の結果である。 Mac の wc ではこのファイルを処理するのに 10.59 秒かかる。それに対して、Cerium Word Count は mmap Blocked Read 全ての状況で Mac の wc よりも速いことを示している。 Cerium Word Count 12 CPU のとき、7.83 秒で処理をしており、Mac の wc の 1.4 倍ほど速くなっている。 mmap は読み込みを OS が制御しており、書き手が制御できない。 また Word Count が走る際ファイルアクセスはランダムアクセスとなる。 mmap はランダムアクセスを想定していなくてグラフにばらつきが起こっていると考えられる。 Blocked Read では読み込みをプログラムの書き手が制御しており、ファイルの読み込みもファイルの先頭から順次読み込みを行なっている。 そのため、読み込みを含めた結果にばらつきが起こりにくくなっていると予想される。 \begin{tiny} \begin{table}[ht] \begin{center} \begin{tabular}[t]{|r|r|r|r|} \hline CPU Num / 実行方式 & Mac(wc) & mmap & Blocked Read\\ \hline 1 & 10.590 & 9.96 & 9.33 \\ \hline 4 & --- & 8.63 & 8.52 \\ \hline 8 & --- & 10.35 & 8.04 \\ \hline 12 & --- & 9.26 & 7.82 \\ \hline \end{tabular} \caption{ファイル読み込みを含む Word Count} \label{table:IOwordcount} \end{center} \end{table} \end{tiny} \newpage 表\ref{fig:wordcount} はファイル読み込みを含まない Word Count の結果である。 Mac の wc ではこのファイルを処理するのに 4.08 秒かかる。それに対して、Cerium Word Count は 1 CPU で 3.70 秒、12 CPU だと 0.40 秒で処理できる。 1 CPU で動作させると Mac の wc よりも 1.1 倍ほど速くなり、12 CPU で動作させると wc よりも 10.2 倍ほど速くなった。 1 CPU と 12 CPU で比較すると、9.25 倍ほど速くなった。 ファイルを読み込んだ結果と比較すると、ファイルを読み込まないで実行したほうが 6,7 秒ほど速くなる。 これよりファイルを読み込んだ文字列処理の場合、処理時間の60\%から90\% はファイルの読み込みであることがわかる。 \begin{tiny} \begin{table}[ht] \begin{center} \begin{tabular}[t]{|r|r|} \hline 実行方式 & 実行速度(秒)\\ \hline Mac(wc) & 4.08 \\ \hline Cerium Word Count(CPU 1) & 3.70\\ \hline Cerium Word Count(CPU 4) & 1.00\\ \hline Cerium Word Count(CPU 8) & 0.52\\ \hline Cerium Word Count(CPU 12) & 0.40\\ \hline \end{tabular} \caption{ファイル読み込み無しの Word Count} \label{fig:wordcount} \end{center} \end{table} \end{tiny} \section{正規表現} 当実験では、Mac の egrep 、C で実装した逐次に DFA の状態遷移と照らし合わせる CGrep、Cerium で並列処理をする CeriumGrep を比較している。 表\ref{table:AZaz} は正規表現 '[A-Z][A-Za-z0-9]*s' を 500MB(単語数約8500万)、1GB(単語数約1.7億語)のファイルに対してマッチングを行なった。 \begin{tiny} \begin{table}[ht] \begin{center} \begin{tabular}[t]{|c|r|r|r|} \hline 実行方式/File Size(Match Num) & 500MB(536万) & 1GB(1072万) \\ \hline CGrep & 20.62 & 40.10\\ \hline CeriumGrep(CPU 12) mmap & 18.00 & 26.96\\ \hline CeriumGrep(CPU 12) bread & 12.48 & 21.14\\ \hline egrep & 59.51 & 119.23\\ \hline \end{tabular} \caption{ファイルサイズを変化させた各 grep の結果} \label{table:AZaz} \end{center} \end{table} \end{tiny} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 表\ref{table:metachar} 500MB(単語数約8500万) のファイルに対して正規表現 '[A-Z][A-Za-z0-9]*s' をマッチングした結果である。 これはファイル読み込みを含めた結果と読み込みを含めていない結果の比較である。 egrep は実行するたびにファイル読み込みを行うため、ファイル読み込み無しの測定はなし。 \begin{tiny} \begin{table}[ht] \begin{center} \begin{tabular}[t]{|c|r|r|} \hline 実行方式 & ファイル読み込み有 & ファイル読み込み無\\ \hline CGrep & 21.171 & 16.150\\ \hline CeriumGrep(CPU 2) & 27.061 & 15.401\\ \hline CeriumGrep(CPU 12) & 12.48 & 7.386\\ \hline egrep & 59.51 & --- \\ \hline \end{tabular} \caption{ファイル読み込み有りと無しを変化させた各 grep の結果} \label{table:metachar} \end{center} \end{table} \end{tiny} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 表\ref{table:abab} aとb が多く含まれている約500MB(単語数約2300万)のファイルに対して、正規表現の状態数を変化させてみた。 これは読み込みを含んでいる結果で、CeriumGrep のファイル読み込みは Blocked Read、CPU 数 12 にて実行した。 \begin{tiny} \begin{table}[ht] \begin{center} \begin{tabular}[t]{|l|r|r|r|} \hline 正規表現 & マッチ数 & CeriumGrep time (s) & egrep time(s)\\ \hline '(a \textbar b)*a(a \textbar b)(a \textbar b)' & 約1950万 & 38.67 & 86.66 \\ \hline '(a \textbar b)*a(a \textbar b)(a \textbar b)(a \textbar b)' & 約1640万 & 38.72 & 94.25 \\ \hline '(a \textbar b)*a(a \textbar b)(a \textbar b)(a \textbar b)(a \textbar b)' & 約1640万 & 39.59 & 100.98 \\ \hline '(a \textbar b)*a(a \textbar b)(a \textbar b)(a \textbar b)(a \textbar b)(a \textbar b)' & 約1550万 & 38.68 & 104.82 \\ \hline \end{tabular} \caption{正規表現の状態数を増やした Grep の結果} \label{table:abab} \end{center} \end{table} \end{tiny} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 表\ref{table:nomatch} ab の文字列がならんでいるところに (W \textbar w)ord の正規表現 aとb が多く含まれている約500MB(単語数約2300万)のファイルに対して、全くマッチしない正規表現を与えてパターンマッチングさせてみた。 \begin{tiny} \begin{table}[ht] \begin{center} \begin{tabular}[t]{|c|r|} \hline 実行方式/File Size(Match Num) & time (s)\\ \hline CGrep & 27.130\\ \hline CeriumGrep(CPU 12) mmap & 21.576\\ \hline CeriumGrep(CPU 12) bread & 19.986\\ \hline egrep & 28.332\\ \hline \end{tabular} \caption{全くマッチングしないパターンを grep した結果} \label{table:nomatch} \end{center} \end{table} \end{tiny} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 表\ref{table:abab} % % \begin{tiny} % \begin{table}[ht] % \begin{center} % \begin{tabular}[t]{|r|r|r|r|} % \hline % CPU Num / 実行方式 & egrep & mmap & Blocked Read\\ % \hline % 1 & 83.09 & 57.65 & 40.49 \\ % \hline % 2 & --- & 43.96 & 33.72 \\ % \hline % 4 & --- & 33.37 & 34.26 \\ % \hline % 8 & --- & 35.48 & 32.46 \\ % \hline % \end{tabular} % \caption{abab} % \label{table:abab} % \end{center} % \end{table} % \end{tiny} %