comparison slide.tex @ 6:3436da54f678

*** empty log message ***
author kent
date Wed, 02 Jul 2008 11:02:49 +0900
parents 448fb638bfa0
children 657e392afc09
comparison
equal deleted inserted replaced
5:a641d4977dfc 6:3436da54f678
3 % Last Change: 火 6 24 12:51 PM 2008 J 3 % Last Change: 火 6 24 12:51 PM 2008 J
4 % 4 %
5 \documentclass[mathserif]{beamer} 5 \documentclass[mathserif]{beamer}
6 \usepackage{graphicx} 6 \usepackage{graphicx}
7 \usepackage{verbatim} 7 \usepackage{verbatim}
8 \usepackage{ulem}
8 %\usepackage{beamerthemesplit} 9 %\usepackage{beamerthemesplit}
9 %manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf 10 %manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf
10 11
11 \title[CbC on GCC]{組み込み向け低レベル言語 CbC の GCC による実装} 12 \title[CbC on GCC]{組み込み向け低レベル言語 CbC の GCC による実装}
12 \author{与儀 健人 \and 河野真治} 13 \author{与儀 健人 \and 河野真治}
72 \item Cよりも下位、アセンブラより上位の言語 73 \item Cよりも下位、アセンブラより上位の言語
73 \item 入力、出力インターフェイスの組み合わせから、検証を自身で表現できる 74 \item 入力、出力インターフェイスの組み合わせから、検証を自身で表現できる
74 \item OS、デバイスドライバ、ハードウェアの記述が可能 75 \item OS、デバイスドライバ、ハードウェアの記述が可能
75 \end{itemize} 76 \end{itemize}
76 \end{exampleblock} 77 \end{exampleblock}
77 \begin{exampleblock}{Recent work} 78 \begin{exampleblock}{Recent works}
78 \begin{itemize} 79 \begin{itemize}
79 \item Micro-Cによる実装 (i386,PPC,mips,spu,arm) 80 \item Micro-Cによる実装 (i386,PPC,mips,spu,arm)
80 \item タブロー法によるCbCプログラムの検証 81 \item タブロー法によるCbCプログラムの検証
81 %タブロー法を用いたContinuation based Cプログラムの検証, 下地 篤樹, 河野 真治(琉球大学) 日本ソフトウェア科学会第23回大会論文集, Sep, 2006 82 %タブロー法を用いたContinuation based Cプログラムの検証, 下地 篤樹, 河野 真治(琉球大学) 日本ソフトウェア科学会第23回大会論文集, Sep, 2006
82 \item CbCによるハードウェア記述 83 \item CbCによるハードウェア記述
174 \end{columns} 175 \end{columns}
175 \end{frame} 176 \end{frame}
176 177
177 \begin{frame}[fragile] 178 \begin{frame}[fragile]
178 \frametitle{実装に必要な構文} 179 \frametitle{実装に必要な構文}
180 構文は以下の二つが通れば良い。
179 \begin{itemize} 181 \begin{itemize}
180 \huge 182 \huge
181 \item \verb|__code cs(int a, char *b)| 183 \item \verb|__code cs(int a, char *b)|
182 \item \verb|goto cs(10, "abc");| 184 \item \verb|goto cs(10, "abc");|
183 \end{itemize} 185 \end{itemize}
209 \end{columns} 211 \end{columns}
210 \end{frame} 212 \end{frame}
211 213
212 214
213 \section{Tail call} 215 \section{Tail call}
216
217 \begin{frame}
218 \frametitle{Tail call elimination}
219 \begin{exampleblock}{Waht is it?}
220 \begin{itemize}
221 \item 関数呼び出しに関する最適化
222 \item call命令じゃなく、jmp命令を使用する (i386)
223 \item スタックを拡張せず、現在のスタックフレームを書き潰す
224 \end{itemize}
225 \end{exampleblock}
226 GCCへの実装ではこの最適化を利用して行う
227 \end{frame}
228
214 \begin{frame} 229 \begin{frame}
215 \frametitle{Tail call elimination} 230 \frametitle{Tail call elimination}
216 a%\includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps} 231 a%\includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps}
217 \end{frame} 232 \end{frame}
218 233
219 \begin{frame}[fragile] 234 \begin{comment}[fragile]
220 \begin{columns}[t] 235 \begin{columns}[t]
221 \column{.5\textwidth} 236 \column{.5\textwidth}
222 \begin{verbatim} 237 \begin{verbatim}
223 A: 238 A:
224 pushl %ebp 239 pushl %ebp
244 addl %eax, 16(%ebp) 259 addl %eax, 16(%ebp)
245 popl %ebp 260 popl %ebp
246 jmp B 261 jmp B
247 \end{verbatim} 262 \end{verbatim}
248 \end{columns} 263 \end{columns}
249 \end{frame} 264 \end{comment}
250 265
251 \begin{frame} 266 \begin{frame}
252 \frametitle{Tail callの条件} 267 \frametitle{Tail callの条件}
253 \begin{enumerate} 268 \begin{enumerate}
254 \item 関数コールがreturnの直前にある 269 \item 関数コールがreturnの直前にある
255 \item 関数の返す型がcallerとcalleeで一致している 270 \item 関数の返す型がcallerとcalleeで一致している
256 \item caller側の引数サイズがcallee側の引数サイズより大きいもしくは等しい 271 \item caller側の引数サイズがcallee側の引数サイズより大きいもしくは等しい
257 \item 書き込んだ引数が、その後書き込む引数を上書きしてはならない 272 \item 書き込んだ引数が、その後書き込む引数を上書きしてはならない
258 \end{enumerate} 273 \end{enumerate}
259 \center 274 %\center
260 \visible<2>{引数をすべて固定数とすることで対応} 275 %\visible<2>{引数をすべて固定数とすることで対応}
261 \end{frame} 276 \end{frame}
262 277
263 \section{実装} 278 \section{実装}
264 \begin{frame} 279 \begin{frame}
265 \frametitle{実装} 280 \frametitle{実装}
271 \item \alert<2>{tree/RTL変換 (expand\_call)} \hfill RTL Generator \hspace{5em} 286 \item \alert<2>{tree/RTL変換 (expand\_call)} \hfill RTL Generator \hspace{5em}
272 \item その他(エラー検出など) 287 \item その他(エラー検出など)
273 \end{itemize} 288 \end{itemize}
274 \end{frame} 289 \end{frame}
275 290
276 \begin{frame} 291 \begin{comment}
277 \frametitle{expand\_call} 292 \frametitle{expand\_call}
278 \begin{exampleblock}{What is the function?} 293 \begin{exampleblock}{What is the function?}
279 \begin{itemize} 294 \begin{itemize}
280 \item 関数呼び出しのtreeからRTLへ変換する 295 \item 関数呼び出しのtreeからRTLへ変換する
281 \item Tail callが可能ならその最適化を行う 296 \item Tail callが可能ならその最適化を行う
282 \item この関数のみで1200行もある 297 \item この関数のみで1200行もある
283 \item そのほとんどがTail call可否の判定 298 \item そのほとんどがTail call可否の判定
284 \item そして読みづらい 299 \item そして読みづらい
285 \end{itemize} 300 \end{itemize}
286 \end{exampleblock} 301 \end{exampleblock}
287 \end{frame} 302 \end{comment}
288 303
289 \begin{frame} 304 \begin{comment}
290 \frametitle{expand\_cbc\_goto} 305 \frametitle{expand\_cbc\_goto}
291 \begin{exampleblock}{What is it doing?} 306 \begin{exampleblock}{What is it doing?}
292 \begin{itemize} 307 \begin{itemize}
293 \item code segmentへのgotoを表したtreeをRTLに変換 308 \item code segmentへのgotoを表したtreeをRTLに変換
294 \item 無駄なTail call可否判定を削除 309 \item 無駄なTail call可否判定を削除
295 \item Tail callの条件を強制 310 \item Tail callの条件を強制
296 \item 確実にTail callを適用 311 \item 確実にTail callを適用
297 \item 500行程度 312 \item 500行程度
298 \end{itemize} 313 \end{itemize}
299 \end{exampleblock} 314 \end{exampleblock}
300 \end{frame} 315 \end{comment}
301
302 \section{環境付き継続に関する考察}
303 \begin{frame}[fragile]
304 \frametitle{環境付き継続}
305 未実装の構文
306 \begin{verbatim}
307 env = malloc(STACKSIZE);
308 goto cs( 10 ), env;
309 \end{verbatim}
310 \begin{itemize}
311 \item envは現在とは違うメモリ空間を表す
312 \begin{itemize}
313 \item mallocで取得
314 \item 中断した別スレッドのスッタクフレーム
315 \item 関数から継続した場合の元のスタックフレーム
316 \end{itemize}
317 \item そのenvで表される環境(スタック)へスタックフレームを変更したあと継続 \\
318 具体的には\verb|%ebp|を変更
319 \end{itemize}
320 \end{frame}
321
322 \begin{frame}
323 \frametitle{実装における問題}
324 \end{frame}
325 316
326 \section{評価} 317 \section{評価}
327 \begin{frame}[fragile] 318 \begin{frame}[fragile]
328 \frametitle{評価(ベンチマーク)} 319 \frametitle{評価(ベンチマーク)}
329 \begin{itemize} 320 \begin{itemize}
343 \item[+omit] -fomit-frame-pointerオプションを付加 334 \item[+omit] -fomit-frame-pointerオプションを付加
344 \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加 335 \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加
345 \end{description} 336 \end{description}
346 \end{frame} 337 \end{frame}
347 338
348 %\begin{frame} 339 \renewcommand<>{\sout}[1]{\temporal#2{#1}{\beameroriginal{\sout}{#1}}{#1}}
349 %\frametitle{考察} 340 \section{環境付き継続に関する考察}
350 %\end{frame} 341 \begin{frame}[fragile]
351 342 \frametitle{環境付き継続}
343 %\sout<2>{未実装の構文}\\
344 未実装の構文
345 %\uncover<2>{新たに実装された構文}
346 \begin{verbatim}
347 goto cs( 10 ), env;
348 \end{verbatim}
349 %env = malloc(STACKSIZE);
350 \begin{itemize}
351 \item envは現在とは別のスタック空間を表す
352 \begin{itemize}
353 \item mallocで取得
354 \item 中断した別スレッドのスッタクフレーム
355 \item 関数から継続した場合の元のスタックフレーム
356 \end{itemize}
357 \item そのenvで表される環境(スタック)へスタックフレームを変更したあと継続する \\
358 具体的には\verb|%ebp|を変更
359 \end{itemize}
360 \end{frame}
361
362 \begin{frame}[fragile]
363 \frametitle{環境付き継続}
364 Micro-CでのCbCでは以下の使い方が主となっている
365 \begin{verbatim}
366 int func(void){
367 /* something */
368 goto cs( __environment, __return );
369 }
370 __code cs(void *env, void *ret){
371 /* something */
372 goto ret(20), env;
373 }
374 \end{verbatim}
375 このように、\verb|__environment,__return|を使用して、呼び出し元関数の環境へ戻れる。
376 この使用方法に限れば、GCCでも実装完了。
377 \end{frame}
378
379 \begin{frame}
380 \frametitle{実装方法}
381
382 \end{frame}
383
384 \section{まとめ}
352 \begin{frame} 385 \begin{frame}
353 \frametitle{まとめ} 386 \frametitle{まとめ}
354 \begin{block}{Conclusion} 387 \begin{block}{Conclusion}
355 \begin{itemize} 388 \begin{itemize}
356 \item GCCにCbCコンパイラを実装 389 \item GCCにCbCコンパイラを実装
357 \item そのベンチマークによる性能向上の確認 390 \item そのベンチマークによる性能向上の確認
358 \item 環境付き継続の実装方法の考察 391 \item 環境付き継続の実装及び問題点の考察
359 \end{itemize} 392 \end{itemize}
360 \end{block} 393 \end{block}
361 394
362 \begin{block}{TO DO} 395 \begin{block}{TO DO}
363 \begin{itemize} 396 \begin{itemize}
364 \item environment 397 \item environmentの強化
365 \item PPCのRTL変換不能 398 \item PPCのRTL変換不能
366 \item オプションの強制 399 \item オプションの強制
367 \item SPU対応とGCCのversion 400 \item SPU対応とGCCのversion
368 \end{itemize} 401 \end{itemize}
369 \end{block} 402 \end{block}
375 %\end{thebibliography} 408 %\end{thebibliography}
376 %継続を持つCの下位言語によるシステム記述 409 %継続を持つCの下位言語によるシステム記述
377 %河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese) 410 %河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese)
378 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003 411 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003
379 412
380 \appendix 413 %\appendix
381 \begin{frame} 414 %\begin{frame}
382 a%\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps} 415 %a%\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps}
383 \end{frame} 416 %\end{frame}
384 417
385 \end{document} 418 \end{document}
386 419
387 420
388 421