6
|
1 % File: slide.tex
|
|
2 % Created: 月 4 21 08:00 PM 2008 J
|
|
3 % Last Change: 月 4 21 08:00 PM 2008 J
|
|
4 %
|
|
5 \documentclass[mathserif]{beamer}
|
|
6 \usepackage{graphicx}
|
|
7 \usepackage{beamerthemesplit}
|
|
8 %manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf
|
|
9
|
|
10 \title{Continuation based CコンパイラのGCC-4.2による実装}
|
|
11 \author{与儀 健人}
|
|
12 \date{\today}
|
|
13
|
|
14 \begin{document}
|
|
15
|
|
16 \begin{frame}
|
|
17 \frametitle{Continuation based Cについて}
|
|
18 \begin{itemize}
|
|
19 \item
|
|
20 \end{itemize}
|
|
21 \end{frame}
|
|
22
|
|
23 \begin{frame}[fragile]
|
|
24 \frametitle{CbCコード例}
|
|
25 \begin{columns}
|
|
26 \column{.4\textwidth}
|
|
27 \begin{verbatim}
|
|
28 __code while_process(int total, int count){
|
|
29 total += count;
|
|
30 count++;
|
|
31 goto while_cond(total, count);
|
|
32 }
|
|
33 __code while_cond(int total, int count){
|
|
34 if ( count <= 100 ){
|
|
35 goto while_process(total, count);
|
|
36 }else{
|
|
37 goto while_end(total);
|
|
38 }
|
|
39 }
|
|
40 __code while_end(int total){
|
|
41 goto cs_exit(0);
|
|
42 }
|
|
43 \end{verbatim}
|
|
44 \column{.3\textwidth}
|
|
45 \includegraphics[width=.9\textwidth]{figures/CbC-loop.eps}
|
|
46 \end{columns}
|
|
47 \end{frame}
|
|
48
|
|
49 \begin{frame}[fragile]
|
|
50 \frametitle{実装に必要な構文}
|
|
51 \begin{itemize}
|
|
52 \item コードセグメント宣言 \verb|\_\_ code cs(int a, char *b)|
|
|
53 \item 継続 \verb|goto cs(10, "abc");|
|
|
54 \end{itemize}
|
|
55 \end{frame}
|
|
56
|
|
57 \begin{frame}
|
|
58 \frametitle{GNU Compiler Collection}
|
|
59 \begin{columns}
|
|
60 \column{.5\textwidth}
|
|
61 \includegraphics[width=\textwidth]{figures/GCC-pass-slide.eps}
|
|
62 \column{.3\textwidth}
|
|
63 \begin{itemize}
|
|
64 \item aiueo
|
|
65 \item aiueo
|
|
66 \end{itemize}
|
|
67 \end{columns}
|
|
68 \end{frame}
|
|
69
|
|
70
|
|
71 \begin{frame}
|
|
72 \frametitle{Tail call elimination}
|
|
73 \end{frame}
|
|
74
|
|
75 \begin{frame}
|
|
76 \frametitle{実装}
|
|
77 \begin{description}
|
|
78 \item \_\_code トークンの追加
|
|
79 \item code segmentのパース
|
|
80 \item gotoのパース
|
|
81 \item \alert<2>{tree/RTL変換 (expand\_call)}
|
|
82 \item その他(エラー検出など)
|
|
83 \end{description}
|
|
84 \end{frame}
|
|
85
|
|
86 \begin{frame}
|
|
87 \frametitle{expand\_call}
|
|
88 \begin{itemize}
|
|
89 \item 関数呼び出しのtreeからRTLへ変換する
|
|
90 \item Tail callが可能ならその最適化を行う
|
|
91 \item この関数のみで1200行もある
|
|
92 \item そのほとんどがTail call可否の判定
|
|
93 \item そして読みづらい
|
|
94 \end{itemize}
|
|
95 \end{frame}
|
|
96
|
|
97 \begin{frame}
|
|
98 \frametitle{expand\_cbc\_goto}
|
|
99 \begin{itemize}
|
|
100 \item code segmentへのgotoを表したtreeを受け取る
|
|
101 \item 確実にTail callでcode segmentにgoto
|
|
102 \item 無駄なTail call可否判定を削除
|
|
103 \end{itemize}
|
|
104 \end{frame}
|
|
105
|
|
106
|
|
107 \begin{frame}[fragile]
|
|
108 \frametitle{評価(ベンチマーク)}
|
|
109 \begin{itemize}
|
|
110 \item 環境 i386 fedora core
|
|
111 \item 使用したプログラム conv1
|
|
112 \end{itemize}<++>
|
|
113 \centering
|
|
114 \begin{tabular}{|l|r|r|r|r|} \hline
|
|
115 & ./conv1 0 & ./conv1 1 & ./conv1 2 & ./conv1 3 \\ \hline
|
|
116 Micro-C & 5.25 & 8.97 & 2.19 & 2.73 \\ \hline \hline
|
|
117 GCC & 3.69 & 4.87 & 3.08 & 3.65 \\ \hline
|
|
118 GCC (+omit) & 2.74 & 4.20 & 2.25 & 2.76 \\ \hline
|
|
119 GCC (+fastcall) & 2.70 & 3.44 & 1.76 & 2.34 \\ \hline \hline
|
|
120 TCC & 4.15 &122.28& 84.91&102.59\\ \hline
|
|
121 \end{tabular}
|
|
122 \begin{description}
|
|
123 \item[+omit] -fomit-frame-pointerオプションを付加
|
|
124 \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加
|
|
125 \end{description}
|
|
126 \end{frame}
|
|
127
|
|
128 \begin{frame}
|
|
129 \frametitle{まとめ}
|
|
130 \end{frame}
|
|
131
|
|
132 \begin{frame}
|
|
133 \frametitle{}
|
|
134 \end{frame}
|
|
135
|
|
136 \begin{frame}
|
|
137 \frametitle{}
|
|
138 \end{frame}
|
|
139
|
|
140 \begin{frame}
|
|
141 \frametitle{}
|
|
142 \end{frame}
|
|
143
|
|
144 \begin{frame}
|
|
145 \frametitle{}
|
|
146 \end{frame}
|
|
147
|
|
148 \end{document}
|
|
149
|
|
150
|
|
151
|
|
152
|