Mercurial > hg > Papers > 2008 > kent-dsw
comparison slide.tex @ 7:657e392afc09 default tip
*** empty log message ***
author | kent |
---|---|
date | Tue, 08 Jul 2008 14:48:13 +0900 |
parents | 3436da54f678 |
children |
comparison
equal
deleted
inserted
replaced
6:3436da54f678 | 7:657e392afc09 |
---|---|
1 % File: slide.tex | 1 % File: slide.tex |
2 % Created: 火 6 24 12:51 PM 2008 J | 2 % Created: 火 6 24 12:51 PM 2008 J |
3 % Last Change: 火 6 24 12:51 PM 2008 J | 3 % Last Change: 火 7 3 11:58 AM 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{ulem} |
9 %\usepackage{beamerthemesplit} | 9 %\usepackage{beamerthemesplit} |
10 %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 |
11 | 11 |
12 \title[CbC on GCC]{組み込み向け低レベル言語 CbC の GCC による実装} | 12 \title[CbC on GCC]{組み込み向け低レベル言語 CbC の GCC による実装} |
13 \author{与儀 健人 \and 河野真治} | 13 \author{与儀健人 \and 河野真治} |
14 \institute[IE Ryukyu Univ]{琉球大学大学院理工学研究科情報工学専攻} | 14 \institute[IE Ryukyu Univ]{琉球大学大学院理工学研究科情報工学専攻} |
15 \date{\today} | 15 \date{\today} |
16 | 16 |
17 \usetheme{Boadilla} | 17 \usetheme{Boadilla} |
18 %\usetheme{default} | 18 %\usetheme{default} |
78 \begin{exampleblock}{Recent works} | 78 \begin{exampleblock}{Recent works} |
79 \begin{itemize} | 79 \begin{itemize} |
80 \item Micro-Cによる実装 (i386,PPC,mips,spu,arm) | 80 \item Micro-Cによる実装 (i386,PPC,mips,spu,arm) |
81 \item タブロー法によるCbCプログラムの検証 | 81 \item タブロー法によるCbCプログラムの検証 |
82 %タブロー法を用いたContinuation based Cプログラムの検証, 下地 篤樹, 河野 真治(琉球大学) 日本ソフトウェア科学会第23回大会論文集, Sep, 2006 | 82 %タブロー法を用いたContinuation based Cプログラムの検証, 下地 篤樹, 河野 真治(琉球大学) 日本ソフトウェア科学会第23回大会論文集, Sep, 2006 |
83 \item CbCによるハードウェア記述 | 83 \item CbCによるハードウェア記述の可能性 |
84 %検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用 , 河野 真治 (琉球大学), 電子情報通信学会VLSI設計技術研究会, March, 2008 | 84 %検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用 , 河野 真治 (琉球大学), 電子情報通信学会VLSI設計技術研究会, March, 2008 |
85 \item 組み込みソフトウェアへの適用 | 85 \item 組み込みソフトウェアへの適用法 |
86 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003 | 86 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003 |
87 \end{itemize} | 87 \end{itemize} |
88 \end{exampleblock} | 88 \end{exampleblock} |
89 \end{frame} | 89 \end{frame} |
90 | 90 |
92 \frametitle{GCCによるCbCコンパイラの実装} | 92 \frametitle{GCCによるCbCコンパイラの実装} |
93 \begin{exampleblock}{Why is it needed?} | 93 \begin{exampleblock}{Why is it needed?} |
94 \begin{itemize} | 94 \begin{itemize} |
95 \item 十数種のアーキテクチャへの対応が可能 | 95 \item 十数種のアーキテクチャへの対応が可能 |
96 \item 構文木、RTLレベルでの高度な最適化 | 96 \item 構文木、RTLレベルでの高度な最適化 |
97 \item | 97 \item ポータビリティー |
98 \item Tailcallを使った実装方法が示されている | 98 \end{itemize} |
99 \end{itemize} | 99 \end{exampleblock} |
100 \end{exampleblock} | 100 %Tailcallを使った実装方法が示されている |
101 \end{frame} | 101 \end{frame} |
102 | 102 |
103 \begin{comment} | 103 \begin{comment} |
104 \frametitle{目標} | 104 \frametitle{目標} |
105 \begin{exampleblock}{Purposes} | 105 \begin{exampleblock}{Purposes} |
169 } | 169 } |
170 \end{verbatim} | 170 \end{verbatim} |
171 \column{.1\textwidth} | 171 \column{.1\textwidth} |
172 \column{.3\textwidth} | 172 \column{.3\textwidth} |
173 \flushright | 173 \flushright |
174 a%\includegraphics[width=\textwidth]{figures/CbC-loop.eps} | 174 \includegraphics[width=\textwidth]{figures/CbC-loop.eps} |
175 \end{columns} | 175 \end{columns} |
176 \end{frame} | 176 \end{frame} |
177 | 177 |
178 \begin{frame}[fragile] | 178 \begin{frame}[fragile] |
179 \frametitle{実装に必要な構文} | 179 \frametitle{実装に必要な構文} |
199 | 199 |
200 \begin{frame} | 200 \begin{frame} |
201 \frametitle{GCCコンパイルパス} | 201 \frametitle{GCCコンパイルパス} |
202 \begin{columns} | 202 \begin{columns} |
203 \column{.5\textwidth} | 203 \column{.5\textwidth} |
204 a%\includegraphics[width=\textwidth]{figures/GCC-pass-slide.eps} | 204 \includegraphics[width=\textwidth]{figures/GCC-pass-slide.eps} |
205 \column{.4\textwidth} | 205 \column{.4\textwidth} |
206 \begin{description} | 206 \begin{description} |
207 \item[Generic Tree] 構文木 | 207 \item[Generic Tree] 構文木 |
208 \item[GIMPLE] SSA | 208 \item[GIMPLE] SSA |
209 \item[RTL] 中間コード | 209 \item[RTL] 中間コード |
226 GCCへの実装ではこの最適化を利用して行う | 226 GCCへの実装ではこの最適化を利用して行う |
227 \end{frame} | 227 \end{frame} |
228 | 228 |
229 \begin{frame} | 229 \begin{frame} |
230 \frametitle{Tail call elimination} | 230 \frametitle{Tail call elimination} |
231 a%\includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps} | 231 \includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps} |
232 \end{frame} | 232 \end{frame} |
233 | 233 |
234 \begin{comment}[fragile] | 234 \begin{comment}[fragile] |
235 \begin{columns}[t] | 235 \begin{columns}[t] |
236 \column{.5\textwidth} | 236 \column{.5\textwidth} |
281 \begin{itemize} | 281 \begin{itemize} |
282 \item \_\_code トークンの追加 | 282 \item \_\_code トークンの追加 |
283 \item code segmentのパース \hfill Parser \hspace{5em} | 283 \item code segmentのパース \hfill Parser \hspace{5em} |
284 \item gotoのパース \hfill Parser \hspace{5em} | 284 \item gotoのパース \hfill Parser \hspace{5em} |
285 \item code segment/goto を表すGeneric Tree | 285 \item code segment/goto を表すGeneric Tree |
286 \item \alert<2>{tree/RTL変換 (expand\_call)} \hfill RTL Generator \hspace{5em} | 286 \item tree/RTL変換 (expand\_call) \hfill RTL Generator \hspace{5em} |
287 \item その他(エラー検出など) | 287 \item その他(エラー検出など) |
288 \end{itemize} | 288 \end{itemize} |
289 \end{frame} | 289 \end{frame} |
290 | 290 |
291 \begin{comment} | 291 \begin{comment} |
313 \end{itemize} | 313 \end{itemize} |
314 \end{exampleblock} | 314 \end{exampleblock} |
315 \end{comment} | 315 \end{comment} |
316 | 316 |
317 \section{評価} | 317 \section{評価} |
318 \begin{frame}[fragile] | 318 |
319 \begin{frame} | |
319 \frametitle{評価(ベンチマーク)} | 320 \frametitle{評価(ベンチマーク)} |
321 GCCとMicro-Cの間でベンチマーク測定をする | |
320 \begin{itemize} | 322 \begin{itemize} |
321 \item 環境 i386 fedora core | 323 \item 環境 i386 fedora core |
322 \item 使用したプログラム conv1 | 324 \item 使用したプログラム conv1 |
323 \end{itemize} | 325 \item 関数コールと演算の交互実行 |
326 \end{itemize} | |
327 引数の値によって同じ内容の別のソースを実行する | |
328 \begin{description} | |
329 \item[0] Cの関数を用いた演算 | |
330 \item[1] 上を機械的にコードセグメントに変換したもの | |
331 \item[2] さらに手動で最適化したもの | |
332 \item[3] 別の手法で最適化したもの | |
333 \end{description} | |
334 \end{frame} | |
335 | |
336 \begin{frame}[fragile] | |
337 \frametitle{評価(ベンチマーク)} | |
324 \centering | 338 \centering |
325 \begin{tabular}{|l|r|r|r|r|} \hline | 339 \begin{tabular}{|l|r|r|r|r|} \hline |
326 & ./conv1 0 & ./conv1 1 & ./conv1 2 & ./conv1 3 \\ \hline | 340 & ./conv1 0 & ./conv1 1 & ./conv1 2 & ./conv1 3 \\ \hline |
327 Micro-C & 5.25 & 8.97 & 2.19 & 2.73 \\ \hline \hline | 341 Micro-C & 5.25 & 8.97 & 2.19 & 2.73 \\ \hline \hline |
328 GCC & 3.69 & 4.87 & 3.08 & 3.65 \\ \hline | 342 GCC & 3.69 & 4.87 & 3.08 & 3.65 \\ \hline |
334 \item[+omit] -fomit-frame-pointerオプションを付加 | 348 \item[+omit] -fomit-frame-pointerオプションを付加 |
335 \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加 | 349 \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加 |
336 \end{description} | 350 \end{description} |
337 \end{frame} | 351 \end{frame} |
338 | 352 |
353 \begin{frame} | |
354 \frametitle{評価結果} | |
355 \begin{exampleblock}{Result} | |
356 \begin{itemize} | |
357 \item GCCの最適化を使うことで、Micro-Cより早く動作する | |
358 \item 単にCからCbCに機械的に変換しただけでは若干遅くなる が、 | |
359 \item そのコードを修正することで、C より高速化できる | |
360 \end{itemize} | |
361 \end{exampleblock} | |
362 \end{frame} | |
363 | |
339 \renewcommand<>{\sout}[1]{\temporal#2{#1}{\beameroriginal{\sout}{#1}}{#1}} | 364 \renewcommand<>{\sout}[1]{\temporal#2{#1}{\beameroriginal{\sout}{#1}}{#1}} |
340 \section{環境付き継続に関する考察} | 365 \section{環境付き継続に関する考察} |
341 \begin{frame}[fragile] | 366 \begin{frame}[fragile] |
342 \frametitle{環境付き継続} | 367 \frametitle{環境付き継続} |
343 %\sout<2>{未実装の構文}\\ | 368 %\sout<2>{未実装の構文}\\ |
344 未実装の構文 | 369 未実装の構文 |
345 %\uncover<2>{新たに実装された構文} | 370 %\uncover<2>{新たに実装された構文} |
346 \begin{verbatim} | 371 \begin{verbatim} |
372 env = malloc(STACKSIZE); | |
347 goto cs( 10 ), env; | 373 goto cs( 10 ), env; |
348 \end{verbatim} | 374 \end{verbatim} |
349 %env = malloc(STACKSIZE); | |
350 \begin{itemize} | 375 \begin{itemize} |
351 \item envは現在とは別のスタック空間を表す | 376 \item envは現在とは別のスタック空間を表す |
352 \begin{itemize} | 377 \begin{itemize} |
353 \item mallocで取得 | 378 \item mallocで取得 |
354 \item 中断した別スレッドのスッタクフレーム | 379 \item 中断した別スレッドのスッタクフレーム |
370 __code cs(void *env, void *ret){ | 395 __code cs(void *env, void *ret){ |
371 /* something */ | 396 /* something */ |
372 goto ret(20), env; | 397 goto ret(20), env; |
373 } | 398 } |
374 \end{verbatim} | 399 \end{verbatim} |
375 このように、\verb|__environment,__return|を使用して、呼び出し元関数の環境へ戻れる。 | 400 このように、\verb|__environment,__return|を使用して、呼び出し元関数の環境へ戻れる。\\ |
376 この使用方法に限れば、GCCでも実装完了。 | 401 この使用方法に限れば、GCCでも実装完了。 |
377 \end{frame} | 402 \end{frame} |
378 | 403 |
379 \begin{frame} | 404 \begin{frame}[fragile] |
380 \frametitle{実装方法} | 405 \frametitle{実装方法} |
381 | 406 \begin{exampleblock}{``環境''を表すのに必要な物} |
407 \begin{itemize} | |
408 \item スタックフレーム (\%ebp) | |
409 \item 継続の引数を格納する位置 | |
410 \end{itemize} | |
411 \end{exampleblock} | |
412 この二つをメンバに持つ構造体を\verb|__environment|として渡す。 | |
413 | |
414 この構造体のスペースはどこからとる? | |
415 \begin{itemize} | |
416 \item malloc? --- freeの問題がある | |
417 \item static変数でも問題ない? --- スレッド、再帰関数の場合に問題が | |
418 \item Thread-Local strage? | |
419 \end{itemize} | |
420 | |
421 setjmpとの違いは? | |
382 \end{frame} | 422 \end{frame} |
383 | 423 |
384 \section{まとめ} | 424 \section{まとめ} |
385 \begin{frame} | 425 \begin{frame} |
386 \frametitle{まとめ} | 426 \frametitle{まとめ} |
387 \begin{block}{Conclusion} | 427 \begin{exampleblock}{Conclusion} |
388 \begin{itemize} | 428 \begin{itemize} |
389 \item GCCにCbCコンパイラを実装 | 429 \item GCCにCbCコンパイラを実装 |
390 \item そのベンチマークによる性能向上の確認 | 430 \item そのベンチマークによる性能向上の確認 |
431 \item 環境付き継続を一部実装 | |
391 \item 環境付き継続の実装及び問題点の考察 | 432 \item 環境付き継続の実装及び問題点の考察 |
392 \end{itemize} | 433 \end{itemize} |
393 \end{block} | 434 \end{exampleblock} |
394 | 435 |
395 \begin{block}{TO DO} | 436 \begin{exampleblock}{TO DO} |
396 \begin{itemize} | 437 \begin{itemize} |
397 \item environmentの強化 | 438 \item 環境付き継続を完全にする |
398 \item PPCのRTL変換不能 | 439 \item PPCのindirect tailcall |
399 \item オプションの強制 | 440 \item オプションの強制 |
400 \item SPU対応とGCCのversion | 441 \end{itemize} |
401 \end{itemize} | 442 \end{exampleblock} |
402 \end{block} | |
403 \end{frame} | 443 \end{frame} |
404 | 444 |
405 | 445 |
406 %\begin{thebibliography} | 446 %\begin{thebibliography} |
407 %\item[CbC]{} 河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese) | 447 %\item[CbC]{} 河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese) |
410 %河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese) | 450 %河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese) |
411 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003 | 451 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003 |
412 | 452 |
413 %\appendix | 453 %\appendix |
414 %\begin{frame} | 454 %\begin{frame} |
415 %a%\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps} | 455 %\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps} |
416 %\end{frame} | 456 %\end{frame} |
417 | 457 |
418 \end{document} | 458 \end{document} |
419 | 459 |
420 | 460 |