Mercurial > hg > Papers > 2011 > nobu-prosym
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 のアップデート手法について述べる. |