Mercurial > hg > Papers > 2016 > kaito-master
changeset 10:571f9f8d99e1
eval
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 14 Feb 2016 02:52:17 +0900 |
parents | 7161b80a7e19 |
children | 2d9b3ad3e524 |
files | paper/chapter5.tex paper/master_paper.pdf paper/master_paper.sty paper/master_paper.tex |
diffstat | 4 files changed, 487 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter5.tex Wed Feb 10 14:12:31 2016 +0900 +++ b/paper/chapter5.tex Sun Feb 14 02:52:17 2016 +0900 @@ -1,5 +1,5 @@ \chapter{評価・考察} -今回の研究により実装した LLVM/clang 上での CbC コンパイラの評価を試みる. 評価は, コンパイルして出力されたアセンブリコードの確認と, CbC プログラムを Micro-C, GCC, LLVM でコンパイルして得られたプログラムの実行速度を計測により行う. +今回の研究で改良を行ったた LLVM/clang 上での CbC コンパイラの評価を試みる. 評価は, コンパイルして出力されたアセンブリコードの確認, 改良前の LLVM, 改良後の LLVM, Micro-C, GCC でコンパイルして得られたプログラムによる実行速度の比較, C で実装した類似のプログラムとの速度比較により行う. \section{アセンブリコードの評価} 以下のリスト \ref{evalCbC},\ref{evalAsmB}, \ref{evalAsmA} はそれぞれコンパイル前の CbC の code segment とコンパイル後のアセンブリコードを示している. リスト \ref{evalAsmB} は omit leaf frame pointer 強制前のアセンブリコード, リスト \ref{evalAsmA} は omit leaf frame pointer 強制後のアセンブリコードである. リスト \ref{evalAsmB} には push, pop 命令によるフレームポインタの操作が入っているのに対し, リスト \ref{evalAsmA} にはその操作がない. このことから, omit leaf frame pointer が正しく動作していることがわかる. \begin{lstlisting}[frame=lrbt,label=evalCbC,caption={コンパイル前}] @@ -50,6 +50,44 @@ \end{lstlisting} \section{実行速度の評価} -\section{C, ruby, アセンブラ, Scheme との比較} -\section{LLVM, clangの利点} +今回測定に使用したプログラムは環境付き継続と計算を繰り返すプログラムである. \footnote{ ソースコードは付録に掲載する. } 測定は x86-84 アーキテクチャの OS X 上で行った. 表 \ref{result} が測定結果である. +\begin{table}[htpb] + \centering + \begin{tabular}{|l|r|} \hline + LLVM/clang & 3.35 \\ \hline + LLVM/clang -O2 & 1.30 \\ \hline + LLVM/clang (old) & 23.30 \\ \hline + Micro-C & 1.29 \\ \hline + GCC & 14.73 \\ \hline + GCC -O2 & 12.96 \\ \hline + \end{tabular} + \caption{Mac OS X での Micro-C, GCC, LLVM/clang の実行速度比較 (単位 : 秒)} + \label{result} +\end{table} + + +結果から、改良前の LLVM/clang とくらべて現在のものが最適化込みで 10 倍以上, 最適化を除いても 7 倍近い速度が出ていることがわかる. このことから通常の setjmp, longjmp の処理の重さが伺える. また, GCC のコンパイラの速度を大きく上回っていることから, nested function を用いた実装よりもこちらのほうが速いということがわかる. Micro-C コンパイラは直接アセンブラを生成しているので非常に高速であるが, 最適化を利用することで同等の速度が実現できている. + +\section{C, Scheme との比較} +CbC と他の言語との比較を行う. 比較対象は構文が殆ど一緒である C, 継続を用いることのできる Scheme とした. Scheme のコンパイラには Chicken を使用した. +%最初に比較に使用したプログラムはフィボナッチ数を求めるプログラムである. 50000000 番目のフィボナッチ数を再帰を用いて求めるよう記述したところ, C ではスタックオーバーフローにより正しく結果を求めることが出来なかった. + +比較に使用したプログラムは四則演算を何度も繰り返し行うプログラムである. \footnote{ソースコードは付録に掲載する. } C はループにより計算を行い, CbC は goto による軽量継続を用いて計算を行う. + +結果は以下のようになった. + +\begin{table}[htpb] + \centering + \begin{tabular}{|l|r|} \hline + C & 4.85 \\ \hline + CbC & 3.10 \\ \hline + Scheme & 39.24 \\ \hline + \end{tabular} + \caption{Mac OS X での C, CbC の実行速度比較 (単位 : 秒)} + \label{result} +\end{table} + +結果より, CbC の軽量継続が関数呼び出しよりも高速であることがわかる. このことからも関数呼び出し, return の際に行われるスタック操作の処理の重さがわかるだろう. +%Scheme は書き方が行けない気がする. というか比べるなら環境付き継続とcall/cc? +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/master_paper.sty Sun Feb 14 02:52:17 2016 +0900 @@ -0,0 +1,444 @@ +% +% 修士卒業論文スタイルファイル master_papar.sty(ver. 2.1e) +% Time-stamp: <01/03/01 22:01:27 ryuji> +% +% ver 2.1e 2/3/01 ryuji +% ver 2.0e 17/12/00 ryuji +% ver 1.0e 05/11/99 hiroki +% +% modifier: Ryuji Gushiken(ryuji@ads.ie.u-ryukyu.ac.jp) +% +% author: Hiroki Taira(hiroki@ads.ie.u-ryukyu.ac.jp) + +% usage: +% +%\documentclass[a4j]{jreport} +% +%\usepackage{master_paper} +% +% +%\jtitle{修士論文スタイルファイル\\自律分散研バージョン} +%\etitle{\LaTeX style test file for master paper} +%\year{平成11年度} +%\affiliation{琉球大学大学院理工学研究科\\ 情報工学専攻} +%\author{名字 名前} +% +%\begin{document} +% +%\maketitle +% +%%要旨 +%\input{abstract.tex} +% +%%目次 +%\tableofcontents +% +%%図目次 +%\listoffigures +% +%%表目次 +%\listoftables +% +%%第一章 +%\input{chapter1.tex} +%%chapter1.texの\chapter{}の後ろに次のコマンドを追加してください。 +%%ページカウントがリセットされ、ページ数がアラビア文字になります。 +%% \pagenumbering{arabic} +%%第二章 +%\input{chapter2.tex} +%%第三章 +%\input{chapter3.tex} +% +%%付録 +%\input{appendix.tex} +% +%%謝辞 +%%\input{thanx.tex} +% +%%参考文献 +%\input{biblography.tex} +% +%\end{document} + +\typeout{****************************************************************} +\typeout{** 平成15年度 琉球大学大学院 学位論文(修士) ********************} +\typeout{** スタイルファイル(LaTeX2e) : 非公式 ********************} +\typeout{****************************************************************} + +%長さ設定 +\hoffset -1in \addtolength{\hoffset}{20mm} +\voffset -1in \addtolength{\voffset}{10mm} +\oddsidemargin 10mm +\topmargin 0mm +\headheight 10mm +\headsep 15mm +\textheight 39\baselineskip \addtolength{\textheight}{\topskip} +\textwidth 160mm +\marginparsep 3mm +\marginparwidth 15mm +\footskip \headsep + + +%年度 +\def\@year{} +\def\year#1{\gdef\@year{#1}} +\def\@eyear{} +\def\eyear#1{\gdef\@eyear{#1}} +%和文タイトル +\def\jetitle{} +\def\jtitle#1{\gdef\@title{#1}} +%英文タイトル +\def\@etitle{} +\def\etitle#1{\gdef\@etitle{#1}} +%所属 +%\def\@belongto{} +%\def\belongto#1{\gdef\@belongto{#1}} +\def\@affiliation{} +\def\affiliation#1{\gdef\@affiliation{#1}} +\let\belongto\affiliation +%名前 +\def\@author{} +\def\author#1{\gdef\@author{#1}} +\def\@eauthor{} +\def\eauthor#1{\gdef\@eauthor{#1}} + +\def\thesis{\tt 修士(工学)学位論文} +\def\ethesis{\rm Master's Thesis of Engineering} + +\def\university{\tt 琉球大学} +\def\euniversity{\rm Universty of the Ryukyus} + +\def\department{\tt 大学院理工学研究科} +\def\edepartment{\rm Graduate School of Engineering and Science} + +\def\course{\tt 情報工学専攻} +\def\ecourse{\rm Infomation Engineering Course} + +%表紙 +%\renewcommand{\maketitle}{% +%\newpage\null +%\thispagestyle{empty} +%\vskip 1cm% +%\begin{center}% +%\let\footnote\thanks +% {\huge \@title \par}% +% \vskip 1.5em% +% {\huge \@etitle \par}% +% \vskip 2.5em% +% {\LARGE \@year \ \thesis \par}% +% \vskip 10em% +%% {\huge \@belongto \par}% +% {\LARGE \@affiliation \par}% +% \vskip 1.5em% +% {\LARGE \@author \par}% +%\end{center}% +%%\par\vskip 1.5em +%} +\renewcommand{\maketitle}{% +\newpage\null +\thispagestyle{empty} +\vskip 1cm% +\begin{center}% + \let\footnote\thanks + {\Large\bfseries\thesis \par} + \vskip 0.3 em + {\Large\textbf\ethesis \par} + \vskip 2.0 em + {\LARGE\bfseries\mc\@title \par} + \vskip 0.3 em + {\LARGE\textbf{\@etitle} \par} + \vskip 2.0 em + {\large \@year \par} + \vskip 0.3 em + {\large\textbf\@eyear \par} + \vskip 1.0 em + {\large \@author \par} + \vskip 0.3 em + {\large\textbf\@eauthor \par} + \vskip 2.0 em + {\large \@affiliation \par} + \vskip 2.0 em + {\large\bfseries\university \par} + \vskip 0.3 em + {\large\bfseries\department \par} + \vskip 0.3 em + {\large\bfseries\course \par} + \vskip 1.0 em + {\large\textbf\ecourse \par} + \vskip 0.3 em + {\large\textbf\edepartment \par} + \vskip 0.3 em + {\large\textbf\euniversity \par} +\end{center}} + +%abstract +\renewenvironment{abstract}{% + \titlepage + \thispagestyle{empty} + \null\vfil + \@beginparpenalty\@lowpenalty + {\Huge \bfseries \abstractname}% + \begin{center}% + \@endparpenalty\@M + \end{center} +}% + +\newenvironment{abstract_eng}{% + \titlepage + \thispagestyle{empty} + \null\vfil + \@beginparpenalty\@lowpenalty + {\Huge \bfseries \abstractengname}% + \begin{center}% + \@endparpenalty\@M + \end{center} +}% + +%目次 +\renewcommand{\tableofcontents}{% + \pagestyle{plain} + \if@twocolumn\@restonecoltrue\onecolumn + \else\@restonecolfalse\fi + \chapter*{\contentsname + \@mkboth{\contentsname}{\contentsname}% + } \pagenumbering{roman}\@starttoc{toc}% + \if@restonecol\twocolumn\fi +} + +\newcommand\frontmatter{% + \cleardoublepage + %\@mainmatterfalse + \pagenumbering{roman} +} + +\newcommand\mainmatter{% + \cleardoublepage + % \@mainmattertrue + \pagenumbering{arabic} +} + +\newcommand\backmatter{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + % \@mainmatterfalse +} + +%付録 +\renewcommand{\appendix}{\par + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \renewcommand{\@chapapp}{\appendixname}% + \renewcommand{\@chappos}\space% + \renewcommand{\thechapter}{\@Alph\c@chapter} + \renewcommand{\thesection}{\thechapter-\arabic{section}}} + + +%章 +\renewcommand{\chapter}{% +% \pagestyle{plain} +% \pagestyle{m@tterheadings} + \pagestyle{anotherheadings} + \if@openright\cleardoublepage\else\clearpage\fi +% \thispagestyle{jpl@in}% + \thispagestyle{anotherplain}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter\space\@chappos (\thepage ページ)}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\@chapapp\thechapter\@chappos}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \@makechapterhead{#2}\@afterheading} +\def\@makechapterhead#1{\hbox{}% + \vskip2\Cvs + {\parindent\z@ + \raggedright +% + \reset@font\huge\bfseries + \ifnum \c@secnumdepth >\m@ne + \setlength\@tempdima{\linewidth}% + \setbox\z@\hbox{\@chapapp\thechapter\@chappos\hskip1zw}% + \addtolength\@tempdima{-\wd\z@}% + \unhbox\z@\nobreak + \vtop{\hsize\@tempdima#1}% + \else + #1\relax + \fi}\nobreak\vskip3\Cvs} + + +\renewcommand{\prepartname}{\relax} %\renewcommand{\prepartname}{第} +\renewcommand{\postpartname}{部} +\renewcommand{\prechaptername}{第}%\renewcommand{\prechaptername}{第} +\renewcommand{\postchaptername}{章} +\renewcommand{\contentsname}{目 次} +\renewcommand{\listfigurename}{図 目 次} +\renewcommand{\listtablename}{表 目 次} +\renewcommand{\bibname}{参考文献} +\renewcommand{\indexname}{索 引} +\renewcommand{\figurename}{図} +\renewcommand{\tablename}{表} +\renewcommand{\appendixname}{付 録} +\renewcommand{\abstractname}{要 旨} +\newcommand{\abstractengname}{Abstract} + + +%%%% new environment for me(ryuji) +%定義のための環境 +\newcounter{defnum}[chapter] +\newcommand{\predef}{定義} +\newcommand{\postdef}{\relax} +\newenvironment{definition}{\vskip5mm% + \center\begin{minipage}{.8\textwidth} + \addtocounter{defnum}{1} + \begin{description}\item[\textbf{\predef\thechapter.\thedefnum\postdef}] } + {\end{description}\end{minipage}\newline\vskip5mm} + +\newcommand{\preex}{例題} +\newcommand{\postex}{\relax} +\newenvironment{example}{\vskip5mm% + \center\begin{minipage}{.9\textwidth} + \begin{description}\item[\textbf{[\preex\postex]\hskip1zw}] } + {\end{description}\end{minipage}\newline\vskip5mm} + +%%%% customized by me(ryuji) +%footnoteの表示部 +\def\@makefnmark{\hbox{\@textsuperscript{\normalfont + 注\kern0.1em \@thefnmark}}} + +%%%%%% added by ryuji %%%%%%%%%% +% ヘディング +% c.f. 奥村晴彦,''LaTeX2e 美文書作成入門,'' 技術評論社, pp207--231, 1997. + +%ヘッダ、フッタに追加するもの +\def\@lefthead{} +\def\marklefthead#1{\gdef\@lefthead{\small #1}} +\def\@leftfoot{} +\def\markleftfoot#1{\gdef\@leftfoot{\small #1}} + + +%\def\ps@headings{% +\def\ps@m@tterheadings{% + \let\@mkboth\@gobbletwo + \let\ps@jpl@in\ps@headnombre + \let\@oddfoot\@empty\let\@evenfoot\@empty +% \def\@evenhead{\thepage\hfil\leftmark}% + \def\@oddhead{\hss\addtolength{\textwidth}{-4.5zw} +% \underline{\hbox to \textwidth{\hfil\textbf{\rightmark}}% + \underline{\hbox to \textwidth{\vfil\@lefthead\hfil\textbf{\leftmark}}% + \hfil\hskip4zw\thepage}}% + + \def\chaptermark##1{\markboth{% + \ifnum \c@secnumdepth >\m@ne + \@chapapp\thechapter\@chappos\hskip1zw + \fi + ##1}{}}% + \def\sectionmark##1{\markright{% + \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi + ##1}}% + } + + +%もう一個のバージョン:headings(本命) +\def\ps@anotherheadings{% + \let\@mkboth\@gobbletwo + \let\ps@jpl@in\ps@headnombre + \def\@oddfoot{\reset@font% + \textbf{\footnotesize \@leftfoot}\hfil\bf\thepage}% + \let\@evenfoot\@empty + \def\@oddhead{\hss +% \underline{\hbox to \textwidth{\hfil\textbf{\rightmark}}% + \underline{\hbox to \textwidth{\@lefthead\hfil\textbf{\leftmark}}% + \hfil}}% + + \def\chaptermark##1{\markboth{% + \ifnum \c@secnumdepth >\m@ne + \@chapapp\thechapter\@chappos\hskip1zw + \fi + ##1}{}}% + \def\sectionmark##1{\markright{% + \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi + ##1}}% + } +%もう一個のバージョン:plain(本命) +\def\ps@anotherplain{% + \let\@mkboth\@gobbletwo + \let\ps@jpl@in\ps@headnombre + \def\@oddfoot{\reset@font% + \textbf{\footnotesize \@leftfoot}\hfil\bf\thepage}% + \let\@evenfoot\@empty + \let\@oddhead\@empty + \def\chaptermark##1{\markboth{% + \ifnum \c@secnumdepth >\m@ne + \@chapapp\thechapter\@chappos\hskip1zw + \fi + ##1}{}}% + \def\sectionmark##1{\markright{% + \ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi + ##1}}% + } + +%スタイルセットのため +\renewenvironment{thebibliography}[1] +{\chapter*{\bibname\@mkboth{\bibname}{\bibname}}% + \markboth{\bibname}{\bibname} + \addcontentsline{toc}{chapter}{参考文献} + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy + \clubpenalty4000 + \@clubpenalty\clubpenalty + \widowpenalty4000% + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + + +%索引のため +\renewenvironment{theindex}{% + \clearpage + \columnseprule.4pt \columnsep 2zw + \markboth{\indexname}{\indexname} + \addcontentsline{toc}{chapter}{\indexname} + \begin{multicols}{3}[{\chapter*{\indexname}}] + \@mkboth{\indexname}{\indexname} + \thispagestyle{anotherplain}% + \parindent=0pt + \parskip=0pt plus .3pt \relax + \let\item=\@idxitem + \raggedright + \footnotesize\narrowbaselines + }{\end{multicols}} +\def\indexname{索引} +\def\narrowbaselines{\fontsize\@xpt\@xiipt\selectfont} +\def\@idxitem{\par \hangindent4zw} +\def\subitem{\par \hangindent4zw \hspace*{2zw}} +\def\subsubitem{\par \hangindent4zw \hspace*{3zw}} + +%禁則処理の追加 + %事前でのブレークを禁止(禁止>=10000) +\prebreakpenalty\jis`,=10000 % , +\prebreakpenalty\jis`.=10000 % . +%\prebreakpenalty\jis"2124=10000 % , +%\prebreakpenalty\jis"2125=10000 % . +%\prebreakpenalty\jis`、=10000 % 、 +%\prebreakpenalty\jis`。=10000 % 。 +%%\prebreakpenalty\jis"2124=10000 % 、 +%%\prebreakpenalty\jis"2125=10000 % 。
--- a/paper/master_paper.tex Wed Feb 10 14:12:31 2016 +0900 +++ b/paper/master_paper.tex Sun Feb 14 02:52:17 2016 +0900 @@ -7,7 +7,7 @@ \usepackage{comment} %\input{dummy.tex} %% font -\jtitle{LLVM Clang 上の Continuation based C コンパイラの改良} +\jtitle{LLVM, Clang 上の Continuation based C コンパイラの改良} \etitle{Improvement of Continuation based C compiler on LLVM and Clang} \year{2016年 3月} \eyear{March 2016} @@ -26,7 +26,7 @@ \end{minipage}} \markleftfoot{% 左下に挿入 \begin{minipage}{.8\textwidth} - LLVM Clang 上の Continuation based C コンパイラの改良 + LLVM, Clang 上の Continuation based C コンパイラの改良 \end{minipage}} \newcommand\figref[1]{図 \ref{fig:#1}}