# HG changeset patch # User kent # Date 1208780647 -32400 # Node ID bfb290984b07994aa176d35af80fb14033666356 # Parent 7fdca589238fa88bb367d8f93ee2bdb2b46c845e create slide.tex diff -r 7fdca589238f -r bfb290984b07 Makefile --- a/Makefile Tue Mar 25 23:16:29 2008 +0900 +++ b/Makefile Mon Apr 21 21:24:07 2008 +0900 @@ -8,7 +8,7 @@ TARGET1 = main #TARGET2 = resume #TARGET3 = resume2 -#SLIDE1 = slide +SLIDE1 = slide PDFs = $(TARGET1).pdf DVIs = $(TARGET1).dvi diff -r 7fdca589238f -r bfb290984b07 main.pdf Binary file main.pdf has changed diff -r 7fdca589238f -r bfb290984b07 slide.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slide.tex Mon Apr 21 21:24:07 2008 +0900 @@ -0,0 +1,152 @@ +% File: slide.tex +% Created: 月 4 21 08:00 PM 2008 J +% Last Change: 月 4 21 08:00 PM 2008 J +% +\documentclass[mathserif]{beamer} +\usepackage{graphicx} +\usepackage{beamerthemesplit} +%manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf + +\title{Continuation based CコンパイラのGCC-4.2による実装} +\author{与儀 健人} +\date{\today} + +\begin{document} + +\begin{frame} + \frametitle{Continuation based Cについて} + \begin{itemize} + \item + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{CbCコード例} + \begin{columns} + \column{.4\textwidth} + \begin{verbatim} +__code while_process(int total, int count){ + total += count; + count++; + goto while_cond(total, count); +} +__code while_cond(int total, int count){ + if ( count <= 100 ){ + goto while_process(total, count); + }else{ + goto while_end(total); + } +} +__code while_end(int total){ + goto cs_exit(0); +} + \end{verbatim} + \column{.3\textwidth} + \includegraphics[width=.9\textwidth]{figures/CbC-loop.eps} + \end{columns} +\end{frame} + +\begin{frame}[fragile] + \frametitle{実装に必要な構文} + \begin{itemize} + \item コードセグメント宣言 \verb|\_\_ code cs(int a, char *b)| + \item 継続 \verb|goto cs(10, "abc");| + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{GNU Compiler Collection} + \begin{columns} + \column{.5\textwidth} + \includegraphics[width=\textwidth]{figures/GCC-pass-slide.eps} + \column{.3\textwidth} + \begin{itemize} + \item aiueo + \item aiueo + \end{itemize} + \end{columns} +\end{frame} + + +\begin{frame} + \frametitle{Tail call elimination} +\end{frame} + +\begin{frame} + \frametitle{実装} + \begin{description} + \item \_\_code トークンの追加 + \item code segmentのパース + \item gotoのパース + \item \alert<2>{tree/RTL変換 (expand\_call)} + \item その他(エラー検出など) + \end{description} +\end{frame} + +\begin{frame} + \frametitle{expand\_call} + \begin{itemize} + \item 関数呼び出しのtreeからRTLへ変換する + \item Tail callが可能ならその最適化を行う + \item この関数のみで1200行もある + \item そのほとんどがTail call可否の判定 + \item そして読みづらい + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{expand\_cbc\_goto} + \begin{itemize} + \item code segmentへのgotoを表したtreeを受け取る + \item 確実にTail callでcode segmentにgoto + \item 無駄なTail call可否判定を削除 + \end{itemize} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{評価(ベンチマーク)} + \begin{itemize} + \item 環境 i386 fedora core + \item 使用したプログラム conv1 + \end{itemize}<++> + \centering + \begin{tabular}{|l|r|r|r|r|} \hline + & ./conv1 0 & ./conv1 1 & ./conv1 2 & ./conv1 3 \\ \hline + Micro-C & 5.25 & 8.97 & 2.19 & 2.73 \\ \hline \hline + GCC & 3.69 & 4.87 & 3.08 & 3.65 \\ \hline + GCC (+omit) & 2.74 & 4.20 & 2.25 & 2.76 \\ \hline + GCC (+fastcall) & 2.70 & 3.44 & 1.76 & 2.34 \\ \hline \hline + TCC & 4.15 &122.28& 84.91&102.59\\ \hline + \end{tabular} + \begin{description} + \item[+omit] -fomit-frame-pointerオプションを付加 + \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加 + \end{description} +\end{frame} + +\begin{frame} + \frametitle{まとめ} +\end{frame} + +\begin{frame} + \frametitle{} +\end{frame} + +\begin{frame} + \frametitle{} +\end{frame} + +\begin{frame} + \frametitle{} +\end{frame} + +\begin{frame} + \frametitle{} +\end{frame} + +\end{document} + + + +