comparison Paper/nobu-prosym.tex @ 36:6dbacec4745f

modify
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 22 Nov 2011 06:48:08 +0900
parents 6e50f1c7f914
children df94b86c5c58
comparison
equal deleted inserted replaced
35:6e50f1c7f914 36:6dbacec4745f
191 191
192 192
193 \subsection{GIMPLE Tree} 193 \subsection{GIMPLE Tree}
194 Generic Tree で表現されたデータは GIMPLE Tree に変換される. 194 Generic Tree で表現されたデータは GIMPLE Tree に変換される.
195 GIMPLE Tree は Generic Tree より制約がかかった状態で作成された構文木となる. 195 GIMPLE Tree は Generic Tree より制約がかかった状態で作成された構文木となる.
196 制約は「命令が3つ以下のオペランドになるように分解」等といったもので, 196 制約は「1つの枝につく子が3つ以下になるように分解」等といったもので,
197 GIMPLE Tree へと変換されたデータは Generic Tree より簡単な命令で表されることになる. 197 GIMPLE Tree へと変換されたデータは Generic Tree より簡単な命令で表されることになる.
198 CbC の実装では特に修正は加えていない. 198 CbC の実装では特に修正は加えていない.
199 199
200 \subsection{Tree SSA} 200 \subsection{Tree SSA}
201 Tree SSA (Static Single Assignment) は, プログラムの中で 201 Tree SSA (Static Single Assignment) は, プログラムの中で
551 typedefrec によりコードセグメントは自分自身に戻る構成ができるようになる. 551 typedefrec によりコードセグメントは自分自身に戻る構成ができるようになる.
552 より柔軟なプログラミングが行えるように typdefrec の実装を行う予定である. 552 より柔軟なプログラミングが行えるように typdefrec の実装を行う予定である.
553 553
554 \section{評価} 554 \section{評価}
555 今回実装を行った GCC-4.6 ベース, GCC-4.4 ベース, 555 今回実装を行った GCC-4.6 ベース, GCC-4.4 ベース,
556 Micro-C の CbC コンパイラでそれぞれ生成したプログラムの速度の比較を行った. 556 Micro-C の CbC コンパイラでベンチマークを行った.
557 Micro-C のベンチマークで使用されていたプログラムを使う.
558 また, 通常の C のプログラムを CbC へと変換した.
559 このプログラムは CbC の継続と計算を交互に行う.
560 引数 1 はただ CbC へと変換したプログラム,
561
562 引数 2 と 3 は Micro-C 用に手動で最適化を行ったプログラムになる.
557 563
558 比較を行うのは以下のアーキテクチャと OS になる. 564 比較を行うのは以下のアーキテクチャと OS になる.
559
560 %\begin{description} 565 %\begin{description}
561 \begin{itemize} 566 \begin{itemize}
562 \item x86/Linux 567 \item x86/Linux
563 \item x86/OS X 568 \item x86/OS X
564 \end{itemize} 569 \end{itemize}
565 %\end{description} 570 %\end{description}
566 571 32 bit, 64 bit の動作も確認する為, -m32 と -m64 オプションを付ける.
567 572 また, 最適化無し (-O0) と速度最適化 (-O2 -fomit-frame-pointer ) にかけたコードの比較を行う.
568 573 比較の結果を図\ref{fig:linux_conv}, \ref{fig:mac_conv} に示す
574 (ただしGCC-4.6 引数 1, 3 の最適化無しコードは, コードセグメントに対して末尾最適化を強制したことが
575 原因で segmentation fault を起こす為除外している).
576
577 \begin{figure}[htpb]
578 \begin{center}f
579 \scalebox{0.33}{\includegraphics{figure/linux_conv.pdf}}
580 \end{center}
581 \caption{それぞれのコンパイラにより生成されたコードの速度比較(Linux)}
582 \label{fig:linux_conv}
583 \end{figure}
584
585 \begin{figure}[htpb]
586 \begin{center}
587 \scalebox{0.33}{\includegraphics{figure/mac_conv.pdf}}
588 \end{center}
589 \caption{それぞれのコンパイラにより生成されたコードの速度比較(OS X)}
590 \label{fig:mac_conv}
591 \end{figure}
592
593 \subsection{評価の考察}
594 最適化無しの結果では Micro-C が早いが,
595 最適化有りでは GCC バージョンの方がどれも Micro-C に 2.5倍程の差をつけている.
596 また, 最適化有りでの GCC-4.4, 4.6 はどちらも 32bit よりも 64bit の結果が優れていることが確認できた.
597 ただし, 4.6 バージョンの方は 4.4 バージョンに比べると若干差が縮まっている.
569 598
570 599
571 600
572 \section{CbC のアップデート手法} 601 \section{CbC のアップデート手法}
573 最後に, CbC のアップデート手法について述べる. 602 最後に, CbC のアップデート手法について述べる.