Mercurial > hg > Papers > 2008 > kent-sigos
changeset 7:f8cf4a3ac7a8
$B$R$H$^$:(Bslide.tex$B40@.(B
author | kent |
---|---|
date | Tue, 22 Apr 2008 14:13:29 +0900 |
parents | bfb290984b07 |
children | 0cca1c3a062d |
files | slide.tex |
diffstat | 1 files changed, 133 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/slide.tex Mon Apr 21 21:24:07 2008 +0900 +++ b/slide.tex Tue Apr 22 14:13:29 2008 +0900 @@ -4,6 +4,7 @@ % \documentclass[mathserif]{beamer} \usepackage{graphicx} +\usepackage{verbatim} \usepackage{beamerthemesplit} %manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf @@ -11,8 +12,36 @@ \author{与儀 健人} \date{\today} +\usetheme{Boadilla} + \begin{document} +\section{背景} +\begin{frame} + \frametitle{研究背景} + \begin{itemize} + \item Continuation based C (CbC) + \item Micro-CによるCbCコンパイラの実装 + \item 以前の論文により、GCCでコンパイラを実装する方法が示された + \end{itemize} +\end{frame} +\begin{comment} + 私たちの研究室ではCbCという言語を提案しています。 + CbCはCから関数の概念を取り払って、代わりに継続という概念を追加したもので、.. + + CbCはこれまでMicro-Cというコンパイラを本研究室で独自に改良したもの + つかってコンパイルしていました。 + このMicro-CによるコンパイラもGCCとくらべて遜色ないほど、良いコードをはくのですが\ldots + 細かな最適化などを比べると及ばない。 + 対応アーキテクチャ + + そこでGCCに移植する + 以前の論文によりGCCへの実装方法がしめされた。 + そこで、本研究ではGCCへの実装を行いました。 +\end{comment} + + +\section{CbC} \begin{frame} \frametitle{Continuation based Cについて} \begin{itemize} @@ -24,8 +53,9 @@ \frametitle{CbCコード例} \begin{columns} \column{.4\textwidth} + \flushleft \small \begin{verbatim} -__code while_process(int total, int count){ +__code while_process(int total,int count){ total += count; count++; goto while_cond(total, count); @@ -41,46 +71,123 @@ goto cs_exit(0); } \end{verbatim} + \column{.1\textwidth} \column{.3\textwidth} - \includegraphics[width=.9\textwidth]{figures/CbC-loop.eps} + \flushright + \includegraphics[width=\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");| + \large + \item コードセグメント宣言 \hfill\verb|__ code cs(int a, char *b)| + \item 継続 \hfill\verb|goto cs(10, "abc");| + \end{itemize} +\end{frame} + +\section{GCC} +\begin{frame} + \frametitle{GNU Compiler Collection} + \begin{itemize} + \item UNIXにおける標準的なコンパイラ + \item C, C++, java, FORTRAN, Ada .. + \item i386, PowerPC, MIPS, SPARC .. + \item 強力な最適化機構 + \item コンパイルだけでなくas, ldなどの統合環境 \end{itemize} \end{frame} \begin{frame} - \frametitle{GNU Compiler Collection} + \frametitle{GCCコンパイルパス} \begin{columns} \column{.5\textwidth} \includegraphics[width=\textwidth]{figures/GCC-pass-slide.eps} - \column{.3\textwidth} - \begin{itemize} - \item aiueo - \item aiueo - \end{itemize} + \column{.4\textwidth} + \begin{description} + \item[Generic Tree] 構文木 + \item[GIMPLE] SSA + \item[RTL] 中間コード + \end{description} + \end{columns} +\end{frame} +\begin{comment} + パーサによってGenericに変換 + 一般的にいう構文木、言語の構造をそのままツリーにしている + + Static Single Assignment であるGIMPLEに変換 + ここで、ほとんど言語の違いがなくなる + + RTLに変換 + アーキテクチャに依存しないアセンブラ + + 実装の際にはParserにのみ変更を加えることで、アーキテクチャへの依存がなくなる +\end{comment} + + +\section{Tail call} +\begin{frame} + \frametitle{Tail call elimination} + \includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps} +\end{frame} + +\begin{frame}[fragile] + \begin{columns}[t] + \column{.5\textwidth} + \begin{verbatim} +A: + pushl %ebp + movl %esp, %ebp + subl $24, %esp + movl 20(%ebp), %eax + addl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call B + leave + ret + \end{verbatim} + \column{.5\textwidth} + \begin{verbatim} +A: + pushl %ebp + movl %esp, %ebp + movl 20(%ebp), %eax + addl %eax, 16(%ebp) + popl %ebp + jmp B + \end{verbatim} \end{columns} \end{frame} - \begin{frame} - \frametitle{Tail call elimination} + \frametitle{Tail callの条件} + \begin{enumerate} + \item 関数コールがreturnの直前にある + \item 関数の返す型がcallerとcalleeで一致している + \item caller側の引数サイズがcallee側の引数サイズより大きいもしくは等しい + \item 書き込んだ引数が、その後書き込む引数を上書きしてはならない + \end{enumerate} \end{frame} \begin{frame} + \includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps} +\end{frame} + +\section{実装} +\begin{frame} \frametitle{実装} - \begin{description} + \begin{itemize} \item \_\_code トークンの追加 \item code segmentのパース \item gotoのパース \item \alert<2>{tree/RTL変換 (expand\_call)} \item その他(エラー検出など) - \end{description} + \end{itemize} \end{frame} \begin{frame} @@ -104,12 +211,13 @@ \end{frame} +\section{評価} \begin{frame}[fragile] \frametitle{評価(ベンチマーク)} \begin{itemize} \item 環境 i386 fedora core \item 使用したプログラム conv1 - \end{itemize}<++> + \end{itemize} \centering \begin{tabular}{|l|r|r|r|r|} \hline & ./conv1 0 & ./conv1 1 & ./conv1 2 & ./conv1 3 \\ \hline @@ -127,22 +235,18 @@ \begin{frame} \frametitle{まとめ} -\end{frame} + \begin{itemize} + \item GCCにCbCコンパイラを実装 + \item そのベンチマーク + \end{itemize} -\begin{frame} - \frametitle{} -\end{frame} -\begin{frame} - \frametitle{} -\end{frame} - -\begin{frame} - \frametitle{} -\end{frame} - -\begin{frame} - \frametitle{} + \begin{itemize} + \item environment + \item PPCのRTL変換不能 + \item オプションの強制 + \item SPU対応とGCCのversion + \end{itemize} \end{frame} \end{document}