view paper/chapter4.tex @ 15:6a667be77762 draft

modify Makefile
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Fri, 24 Feb 2012 14:31:58 +0900
parents b939c5aae834
children a6540714dda9
line wrap: on
line source

\chapter{評価}
今回実装を行った GCC-4.6 ベース と以前のバージョンある GCC-4.4 と GCC-4.5 ベース,
 それと Micro-C の CbC コンパイラでベンチマークを行った.
プログラムは Micro-C のベンチマークにも使用されるものである.
このプログラムは演算と継続を交互に行うものとなっている.
引数 1 は C で書かれたプログラムをただ CbC へと変換したプログラムになる.
引数 2 と 3 は Micro-C 用に手動で最適化を行ったプログラムである.

環境は以下の アーキテクチャと OS になる.
\begin{itemize}
  \item \verb+x86_64+/Linux
  \item \verb+x86_64+/OS X
\end{itemize}
32 bit, 64 bit の動作も確認する.
また, 最適化無し (-O0) と最適化有り (-O2) にかけたコードの比較を行う.
比較の結果を図\ref{fig:conv1_linux}, \ref{fig:conv1_mac} に示す.
ただし GCC-4.6 の最適化無しコードは, コードセグメントに対して末尾最適化を強制したことが
原因で segmentation fault を起こす為除外している.
(また Micro-C の 64bit 版は Linux では動かなかった為 OS X だけとなっている.)

\begin{figure}[htpb]
  \begin{center}
    \includegraphics[width=70mm]{figure/conv1_linux.pdf}
  \end{center}
  \caption{それぞれのコンパイラにより生成されたコードの速度比較(Linux)}
  \label{fig:conv1_linux}
\end{figure}

\begin{figure}[htpb]
  \begin{center}
    \includegraphics[width=70mm]{figure/conv1_mac.pdf}
  \end{center}
  \caption{それぞれのコンパイラにより生成されたコードの速度比較(OS X)}
  \label{fig:conv1_mac}
\end{figure}




\subsection{考察}
まず, Micro-C 版より GCC 版コンパイラの方が結果が良いことが確認できる.
次に GCC-4.5 と GCC-4.6 を比較してみる.
手動で最適化を行なっている引数 2 と 3 の時は余り差は無い.
だが, 引数 1 の時は GCC-4.6 版が GCC-4.5 に比べて 1.67 倍程早い.
アセンブラの比較も行なってみると, GCC-4.6 版の方では演算の結果が求められていて
必要最小限の継続だけを行なっていた.
アセンブラとこの結果から GCC-4.5 に比べ GCC-4.6 の最適化が修正されよりよくなっているのが確認できた.