Mercurial > hg > Papers > 2016 > nozomi-sigos
view paper/benchmark.tex @ 33:9dd4a1aa4475 default tip
final
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 30 May 2016 23:16:41 +0900 |
parents | 0127effb8fcd |
children |
line wrap: on
line source
\section{Benchmark} 本章では、WordCount, FFT を例題として用い、本研究で実装した GpuScheduler および CudaScheduler の測定を行う。 測定環境 \begin{itemize} \item OS : MacOS 10.9.2 \item CPU : 2*2.66GHz 6-Core Intel Xeon \item GPU : NVIDIA Quadro K5000 4096MB \item Memory : 16GB 1333MHz DDR3 \item Compiler : Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) \end{itemize} \section{WordCount} 今回は 100MB のテキストファイルに対して WordCount を行なった。 表:\ref{table:wordcount}は実行結果である。 \begin{table}[!h] \begin{center} \small \begin{tabular}[t]{c||r} \hline & Run Time \\ \hline 1 CPU & 0.73s \\ \hline 2 CPU & 0.38s \\ \hline 4 CPU & 0.21s \\ \hline 8 CPU & 0.12s \\ \hline OpenCL(no pipeline) & 48.32s \\ \hline OpenCL(pipeline) & 46.74s \\ \hline OpenCL Data Parallel & 0.38s \\ \hline CUDA(no pipeline) & 55.71s \\ \hline CUDA(pipeline) & 10.26s \\ \hline CUDA Data Parallel & 0.71s \\ \hline \end{tabular} \caption{WordCount} \label{table:wordcount} \end{center} \end{table} パイプライン処理を行うことで CUDA では5.4倍の性能向上が見られた。 しかし、OpenCL ではパイプライン処理による性能向上が見られなかった。 OpenCL と CUDA を用いたそれぞれの Scheduler はほぼ同等な実装である。 OpenCL でパイプライン処理を行うために実行機構を見直す必要がある。 一方で、データ並列による実行は 1CPU に対して OpenCL では1.9倍、CUDA では1.02倍という結果になった。 どちらもタスク並列による実行よりは優れた結果になっている。 CUDA によるデータ並列実行の機構を見直す必要がある。 \subsection{FFT} 次に、フーリエ変換と周波数フィルタによる画像処理を行う例題を利用し測定を行う。 使用する画像のサイズは512*512で、画像に対して High Pass Filter をかけて変換を行う。 表:\ref{table:fft}は実行結果である。 \begin{table}[!h] \begin{center} \small \begin{tabular}[t]{c||r} \hline & Run Time \\ \hline 1 CPU & 0.48s \\ \hline 2 CPU & 0.26s \\ \hline 4 CPU & 0.17s \\ \hline 8 CPU & 0.11s \\ \hline OpenCL & 0.09s \\ \hline CUDA & 0.21s \\ \hline \end{tabular} \label{table:fft} \caption{FFT} \end{center} \end{table} 1CPU に対して OpenCL ではの5.3倍、CUDA では2.2倍の性能向上が見られた。 しかし、WordCount の場合と同様に OpenCL と CUDA で差がある。 WordCount と FFT の結果から CudaScheduler によるデータ並列実行機構を見直す必要がある。 また、FFT の OpenCL の kernel は cl\_float2 というベクター型を用いている。 CUDA では cl\_float2 を float に変換して演算している。 OpenCL ではベクターの演算なので、その部分に最適化がかかっており結果が良くなっている可能性がある。