view final_main/chapter5.tex @ 0:ce014a8b669e draft default tip

wrote final thesis
author kaito
date Mon, 21 Apr 2014 21:42:23 +0900
parents
children
line wrap: on
line source

\chapter{評価と考察}
今回の研究により実装した LLVM/clang 上での CbC コンパイラの評価を試みる. 評価の手法は, CbC プログラムを Micro-C, GCC, LLVM でコンパイルし, その実行速度を計ることで行う. 今回測定に使用したプログラムは conv1 と呼ばれるもので, これは Micro-C での測定や, GCC 上に CbC コンパイラを実装した際の評価にも使用されたものである.\footnote{conv1 のソースコードは付録 A に掲載する.} conv1 の行う処理は CbC の継続と計算を交互に行うもので, 
%引数 0 の時には C の関数呼び出しのみを使用, 
引数 1 の時には CbC の継続を使用, 引数 2, 3 の時には Micro-C のための最適化が手動で施されたコードを使用するようになっている. 測定は x86-64 アーキテクチャの OS X 上で 32bit, 64bit 両方の場合で行った. 測定結果は表 \ref{result} に示される. 尚, GCC の最適化無しコードは, 末尾最適化の強制が原因で segmentation fault を起こすために除外している.
\begin{table}[htpb]
  \centering
  \begin{tabular}{|l|r|r|r|} \hline
    & ./conv1 1 & ./conv1 2 & ./conv1 3 \\ \hline
    Micro-C (32bit) & 6.56 & 2.21 & 2.40 \\ \hline
    Micro-C (64bit) & 6.06 & 2.20 & 2.40 \\ \hline
%    GCC -O0 -m32 & SF & 8.52  & SF \\ \hline
    GCC -O2 (32bit) & 1.99 & 0.16 & 1.11  \\ \hline
%    GCC -O0 -m64 & SF & 8.25  & SF \\ \hline
    GCC -O2 (64bit) & 1.26 & 0.16 & 0.96  \\ \hline
    LLVM/clang -O0 (32bit) & 5.90 & 3.97 & 4.81 \\ \hline
    LLVM/clang -O2 (32bit) & 1.62 & 0.24 & 1.06 \\ \hline
    LLVM/clang -O0 (64bit) & 5.52 & 3.95 & 4.74 \\ \hline
    LLVM/clang -O2 (64bit) & 1.42 & 0.24 & 0.95 \\ \hline
  \end{tabular}
  \caption{Mac OS X での Micro-C, GCC, LLVM/clang の実行速度比較 (単位 : 秒)}
  \label{result}
\end{table} 
\section{考察}
Micro-C と速度面で比較した場合, 最適化無しだと 引数が 1 の場合以外は LLVM/clang が大きく劣っている. しかし最適化を有効にすると全ての場合で LLVM/clang が 2 倍以上速いという結果になっており, 引数が 2 の場合には約 9 倍の速度が出ている. これより, 最適化によって Micro-C よりも性能の良いコードが得ることが可能になったといえる.
GCC と速度面で比較した場合, 引数が 3 の場合と 32bit で引数が 1 の場合は LLVM/clang の方が速く, それ以外の場合では GCC の方が速いという結果になった. しかし最短速度を比較すると, GCC の方が LLVM/clang よりも 1.5 倍速く, 出力されるコードの性能については GCC の方が優れるという結果になった. その他の点では, GCC では最適化無しの場合に発生する segmentation fault が LLVM/clang では発生していない. このことから LLVM/clang の方が GCC に比べて安定して CbC のコンパイルを行えると言え, これは最適化をかける前の CbC プログラムのデバッグが可能になったということも示している. \\
 また, 32bit と 64bit で比較した場合はいずれも 64bit の方が速いという結果になった.