Mercurial > hg > Papers > 2015 > yuhi-master
view paper/chapter8.tex @ 79:7990a2abbf05 default tip
add file
author | Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 02 Mar 2015 11:21:40 +0900 |
parents | |
children |
line wrap: on
line source
\chapter{ベンチマーク} \section{実験環境} 今回使用する実験環境を表:\ref{tab:firefly_spec}、表:\ref{tab:dragonfly_spec}に示す. \begin{table}[!htbp] \begin{center} \begin{tabular}{|c||c|} \hline 名前 & 概要 \\ \hline \hline Model & MacPro Mid 2010 \\ \hline CPU & 6-Core Intel Xeon @2.66GHz \\ \hline Serial-ATA Device & HDD ST4000VN000-1H4168\\ \hline Memory & 16GB \\ \hline OS & MacOSX 10.10.1 \\ \hline Graphics & NVIDIA Quadro K5000 1536Core(4096MB) \\ \hline \end{tabular} \end{center} \caption{Ceriumを実行する実験環境1} \label{tab:firefly_spec} \end{table} \begin{table}[!htbp] \begin{center} \begin{tabular}{|c||c|} \hline 名前 & 概要 \\ \hline \hline Model & MacPro Late 2013 \\ \hline CPU & 6-Core Intel Xeon E5@3.5GHz \\ \hline Serial-ATA Device & Apple SSD SM0256 \\ \hline Memory & 16GB \\ \hline OS & MacOSX 10.10.1 \\ \hline Graphics & AMD FirePro D700 2048Core(6144MB) \\ \hline \end{tabular} \end{center} \caption{Ceriumを実行する実験環境2} \label{tab:dragonfly_spec} \end{table} なお、表:\ref{tab:firefly_spec}と表:\ref{tab:dragonfly_spec}は CPU クロック数の他にも Strage や GPU の性能にも違いがある。 実験環境1(表:\ref{tab:firefly_spec})は実験環境2(表:\ref{tab:dragonfly_spec})に比べてクロック数が低く、 Strage は HDD を使用している。GPU は NVIDIA を使用している。 実験環境2(表:\ref{tab:dragonfly_spec})はクロック数が高く、 Strage に SSD を使用している。 GPU は AMD を使用している。 以上の環境で今回新たに実装したマルチコア、GPGPU 、並列 I/O のベンチマークを行う。 \section{マルチコア} マルチコア CPU における並列実行について、 Sort(図:\ref{fig:sort_on_multicore}) と WordCount(図:\ref{fig:wordcount_on_multicore}) \if0、 FFT(図:\ref{fig:fft_on_multicore}) \fi によるベンチマークを行った。 \begin{figure}[htpb] \begin{center} \includegraphics[scale=1.0]{./figures/multicore/sort.pdf} \end{center} \caption{マルチコア CPU における Sort} \label{fig:sort_on_multicore} \end{figure} \begin{figure}[htpb] \begin{center} \includegraphics[scale=1.0]{./figures/multicore/word_count.pdf} \end{center} \caption{マルチコア CPU における WordCount} \label{fig:wordcount_on_multicore} \end{figure} MacPro 2013 において、6CPU を使用した場合、1CPU を利用した場合と比較して、 Sort は 5.2倍、WordCount は 4.9倍の速度向上が見られる。 MacPro 2010 においても Sort は5.65倍、WordCount は5.0倍の速度向上が見られた。 MacPro のコア数以上の Thread 数になると並列度の低下が見られる。 Cerium は実行時に -pre オプションをつけることで使い分ける事ができる。 DMA の prefetch 機能によるデータ転送のベンチマークを行った(図:\ref{fig:prefetch_bench})。 \begin{figure}[htpb] \begin{center} \includegraphics[scale=1.0]{./figures/dma/dmabench.pdf} \end{center} \caption{Word Count による prefetch機能のベンチマーク} \label{fig:prefetch_bench} \end{figure} 測定の結果、CPU数が1の場合は prefetch オプションを入れると1.17\%、CPU数が6の場合は1.63\%の性能向上が見られた。 \newpage \section{GPGPU} GPGPU を行う際はデータ並列による処理を行った時、充分に性能を発揮することができる(\ref{sec:shared_memory}節)。 WordCount による OpenCL、CUDA、マルチコア CPU 上における データ並列実行の性能評価を行った(図:\ref{fig:dataparallel})。 なお、MacPro 2013 (表:\ref{tab:dragonfly_spec}) は GPU が NVIDIA 製でないため、仕様上 CUDA による測定ができない。 MacPro 2010 で測定を行った。 \begin{figure}[htpb] \begin{center} \includegraphics[scale=1.0]{./figures/GPU/wordcount_dataparallel.pdf} \end{center} \caption{Word Count によるデータ並列実行のベンチマーク} \label{fig:dataparallel} \end{figure} データ並列実行することにより、 マルチコア CPU では 1.06倍の性能向上が見られた。 GPU に関しては特に性能向上が大きく、OpenCL においては115倍、CUDA においては14倍の性能向上が見られた。 この結果から、GPGPU を行う際はデータ並列による実行が必須であることがわかる。 更に、マルチコア CPU においても性能向上が見られた。 データ並列を行わない場合、OpenCL の実行時間が CUDA の約6倍かかっている。 これはMacPro2010 の GPU が NVIDIA 製であることが要因として考えられる。 CUDA は NVIDIA 製の GPU でのみ動作するため、 NVIDIA に特化した最適化が行われていると考えられる。 データ並列によって性能向上は実現できたが、 マルチコア CPU と比較すると実行時間が OpenCL では4.2倍、CUDA では 5.3倍かかっている。 WordCount の例題は特定の文字を区切り文字とし、区切り文字による分岐でカウントアップしている。 区切り文字による分岐がマルチコア CPU と比較して性能を落としていると考えられる。 GPU は分岐命令を苦手としており、GPU で並列度を維持するには分岐を最小限にする必要がある。 そこで、FFT(図:\ref{fig:fft_bench})による測定を行う。 このベンチマークにより、GPU の制約に当てはまる Task であれば並列度を維持できることを示す。 OpenCL、CUDA、マルチコアCPU の性能比較を行う。 更に、Cerium を用いないで OpenCL を使用した場合(OpenCL-original)についても測定を行う。 \begin{figure}[htpb] \begin{center} \includegraphics[scale=1.0]{./figures/GPU/fft_firefly.pdf} \end{center} \caption{マルチコア CPU、OpenCL、CUDA における FFT} \label{fig:fft_bench} \end{figure} CUDA は 1CPU に比べて3.5倍、6CPU に比べて1.1倍の性能向上が見られる。 OpenCL は 1CPU に比べて2.75倍の性能向上が見られたが、 6CPU と比べると0.87倍、OpenCL-original と比べると0.76倍の性能低下が見られた。 高性能の GPU を使用することで OpenCL でも並列度が向上が期待できる。 また、Cerium では Task のパイプライン実行により、 GPU よりも上のレイヤでの並列化を行っている。 CPU の性能を上げることで Scheduling 部分が高速になり、OpenCL-original と比較した場合の性能向上も見込める。 そこで、MacPro 2013 にて測定を行った(図:\ref{fig:fft_bench_dragonfly})。 \begin{figure}[htpb] \begin{center} \includegraphics[scale=1.0]{./figures/GPU/fft_dragonfly.pdf} \end{center} \caption{MacPro 2013 における FFT} \label{fig:fft_bench_dragonfly} \end{figure} より高性能な GPU を搭載した計算機(表:\ref{tab:dragonfly_spec})で測定したところ、 OpenCL が 1CPU に比べて6倍、6CPU に比べて1.6倍の性能向上が見られた。 マルチコア CPU での実行速度も向上しているため、 GPU の性能だけでなく、 CPU のクロック数やStrage に SSD を使用している事も性能向上の要因と考えられる。 SSD はランダムアクセスでのデータ読み込み性能が高く、ディスク読み書きに関するオーバーヘッドの改善が見込める。 Cerium による実行は OpenCL-original による実行とほぼ同じ性能で、約1\% OpenCL-original の方が速い。 Cerium のパイプライン構造を利用しており、 本来 OpenCL-original よりも高い並列度が期待できる、まだチューニングを行う余地がある事がわかる。 \section{並列 I/O} Cerium の従来のファイル読み込みである mmap、一般的な File Open であるread、 今回実装したBlocked Read を比較した測定を行った。 なお、Blocked Read については IO Threads を使用した場合としてない場合(SPE\_ANY)両方の測定を行う。 例題として Word Count を使用した測定を行った。 図:\ref{fig:io_bench_firefly}がMacPro 2010における測定で、 図:\ref{fig:io_bench_dragonfly}がMacPro 2013における測定となる。 \begin{figure}[htpb] \begin{center} \includegraphics[scale=1.0]{./figures/io/io_thread_firefly.pdf} \end{center} \caption{WordCount によるファイル読み込み方式のベンチマーク(MacPro2010)} \label{fig:io_bench_firefly} \end{figure} \begin{figure}[htpb] \begin{center} \includegraphics[scale=1.0]{./figures/io/io_thread_dragonfly.pdf} \end{center} \caption{WordCount によるファイル読み込み方式のベンチマーク(MacPro2013)} \label{fig:io_bench_dragonfly} \end{figure} 6CPU においてBlockedRead\_IO を使用した場合、mmap に比べて1.1倍、read に比べて1.58倍、 BlockedRead\_SPE\_ANY に比べて1.34倍の性能向上が見られた。 しかし、実験環境のコア数である6CPU 以上になると並列度は低下していき、 8CPU からは BlockedRead による並列実行に比べて mmap によるファイルの先読みが有効に働いている。 また、SPE\_ANY による BlockedRead は他の読み込み形式と違い、 10CPU の時、CPU 数を増やしたにも関わらず極端に処理が遅くなっている。 これは\ref{sec:spe_problem}節で述べた、ReadTask に対する 実行 Task の割り込みにより ロックがかかる問題が起きていると考えられる。 IO Thread を用いた BlockedRead では極端な速度低下は起きていない。 測定の結果から、IO Thread を用いることでロックの問題が解決できていることがわかる。