Mercurial > hg > Papers > 2012 > nobu-thesis
diff 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 diff
--- a/paper/chapter4.tex Thu Feb 23 20:30:03 2012 +0900 +++ b/paper/chapter4.tex Fri Feb 24 14:31:58 2012 +0900 @@ -1,3 +1,51 @@ \chapter{評価} -\section{性能比較} +今回実装を行った 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 の最適化が修正されよりよくなっているのが確認できた. + + + +