Mercurial > hg > Papers > 2012 > nobu-thesis
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 の最適化が修正されよりよくなっているのが確認できた.