Mercurial > hg > Papers > 2011 > nobu-prosym
comparison Paper/nobu-prosym.tex @ 11:9314b8c2dfd9
modify bib
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 19 Nov 2011 20:35:18 +0900 |
parents | 3d1f778dc358 |
children | 8ea8be1671d0 |
comparison
equal
deleted
inserted
replaced
10:3d1f778dc358 | 11:9314b8c2dfd9 |
---|---|
1 \documentclass[private]{ipsjpapers} | 1 \documentclass[private]{ipsjpapers} |
2 %\documentstyle{ipsjpapers} | 2 %\documentstyle{ipsjpapers} |
3 \Usepackage[dvipdfmx]{graphicx} | 3 \usepackage[dvipdfmx]{graphicx} |
4 \usepackage{url} | 4 \usepackage{url} |
5 \usepackage{multirow} %% tabularの上下の結合 | 5 \usepackage{multirow} %% tabularの上下の結合 |
6 \usepackage{slashbox} %% tabularでの斜め線 | 6 \usepackage{slashbox} %% tabularでの斜め線 |
7 \usepackage{listings} | 7 \usepackage{listings} |
8 \usepackage{jtygm} | |
8 | 9 |
9 | 10 |
10 % 巻数,号数などの設定 | 11 % 巻数,号数などの設定 |
11 %\setcounter{巻数}{41} | 12 %\setcounter{巻数}{41} |
12 %\setcounter{号数}{6} | 13 %\setcounter{号数}{6} |
217 ここからは GCC-4.6 への実装について述べていく. | 218 ここからは GCC-4.6 への実装について述べていく. |
218 | 219 |
219 | 220 |
220 %\subsection{“\_\_code” のパース} | 221 %\subsection{“\_\_code” のパース} |
221 | 222 |
222 | |
223 \subsection{Tail Call Elimination} | 223 \subsection{Tail Call Elimination} |
224 CbC の継続の実装には GCC の最適化の1つ, Tail Call Elimination (末尾除去) を強制することで実装する. | 224 CbC の継続の実装には GCC の最適化の1つ, Tail Call Elimination (末尾除去) を強制することで実装する. |
225 これにより, コードセグメント間の移動を, call ではなく jmp 命令で実現する. | 225 これにより, コードセグメント間の移動を, call ではなく jmp 命令で実現する. |
226 %Tail Call Elimination とは関数の最後の処理で別の関数呼び出しを行った際に, | 226 %Tail Call Elimination とは関数の最後の処理で別の関数呼び出しを行った際に, |
227 %call ではなく jmp を用いることができるという最適化である. | 227 %call ではなく jmp を用いることができるという最適化である. |
331 | 331 |
332 | 332 |
333 \subsection{引数渡し} | 333 \subsection{引数渡し} |
334 通常コードセグメントの継続において, 引数は C の関数と同じスタックを用いて渡される. | 334 通常コードセグメントの継続において, 引数は C の関数と同じスタックを用いて渡される. |
335 GCC には引数渡しをスタックではなくレジスタを用いて行う機能として fastcall がある. | 335 GCC には引数渡しをスタックではなくレジスタを用いて行う機能として fastcall がある. |
336 fastcall を用いてコードセグメントを宣言することで, レジスタを用いた速度の向上を図る. | 336 fastcall を用いてコードセグメントへ継続することで, 速度の向上を図る. |
337 | 337 |
338 \subsubsection{fastcall} | 338 \subsubsection{fastcall} |
339 C において fastcall を用いる場合は関数にキーワード “\_\_attribute\_\_ ((fastcall))” をつけて行う. | 339 C において fastcall を用いる場合は関数にキーワード “\_\_attribute\_\_ ((fastcall))” をつけて行う. |
340 だが, コードセグメントを全てこのキーワードをつけて宣言することは実用できではない. | 340 だが, コードセグメントを全てこのキーワードをつけて宣言することは実用できではない. |
341 そこで, コードセグメントで宣言された場合, fastcall が自動で付くように実装を行う. | 341 そこで, コードセグメントで宣言された場合, fastcall が自動で付くように実装を行う. |
354 | 354 |
355 if 文で条件を決めているのは, 64 bit の場合 fastcall が標準で行われ, | 355 if 文で条件を決めているのは, 64 bit の場合 fastcall が標準で行われ, |
356 fastcall 属性を付けると warning を出すからである. | 356 fastcall 属性を付けると warning を出すからである. |
357 | 357 |
358 | 358 |
359 | |
359 \subsection{typedefrecの実装の構想} | 360 \subsection{typedefrecの実装の構想} |
360 C を基本とした CbC には型推論がない. | 361 C を基本とした CbC には型推論がない. |
361 | |
362 | 362 |
363 \begin{figure}[h] | 363 \begin{figure}[h] |
364 \begin{minipage}[b]{.45\textwidth} | 364 \begin{minipage}[b]{.45\textwidth} |
365 \begin{lstlisting}[caption=typedefrecの例,label=code:typedefrec] | 365 \begin{lstlisting}[caption=typedefrecの例,label=code:typedefrec] |
366 typedefrec void *funcA(int, funcA); | 366 typedefrec void *funcA(int, funcA); |
367 | 367 |
368 typedefrec struct { | 368 typedefrec struct { |
369 node left; | 369 node left; |
370 node right; | 370 node right; |
371 } *NODE; | 371 } *NODE; |
372 \end{lstlisting} | |
372 \end{minipage} | 373 \end{minipage} |
373 \hfill | 374 \hfill |
374 \end{figure} | 375 \end{figure} |
375 | |
376 | |
377 | |
378 | |
379 | 376 |
380 \section{評価} | 377 \section{評価} |
381 今回実装を行った GCC-4.6 ベースのコンパイラを GCC-4.4 ベース, | 378 今回実装を行った GCC-4.6 ベースのコンパイラを GCC-4.4 ベース, |
382 Micro-C コンパイラとそれぞれ比較を行った. | 379 Micro-C コンパイラとそれぞれ比較を行った. |
383 比較を行うのはクイックソートのプログラムである. | 380 比較を行うのはクイックソートのプログラムである. |
425 \end{tabular} | 422 \end{tabular} |
426 \caption{アーキテクチャ毎のGCCとmicro-cの速度比較(単位: 秒)(速度最適化)} | 423 \caption{アーキテクチャ毎のGCCとmicro-cの速度比較(単位: 秒)(速度最適化)} |
427 \label{tab:speed-mc-vs-gcc-opt} | 424 \label{tab:speed-mc-vs-gcc-opt} |
428 \end{table} | 425 \end{table} |
429 | 426 |
430 | 427 \nocite{kono:2002a, kono:2008a, yogi:2008a, gcc_internals} |
431 \begin{thebibliography}{7} | 428 \bibliographystyle{junsrt} |
432 | 429 \bibliography{cbc.bib} |
433 \bibitem{1}{河野真治}: | |
434 “継続を基本とした言語 CbC の gcc 上の実装”. 日本ソフトウェア科学会第 19 回大会論文集, Sep, 2002 | |
435 | |
436 | |
437 \bibitem{2}{河野真治}: | |
438 “継続を持つ C の回言語によるシステム記述”. 日本ソフトウェア科学会第 17 回大会論文集, Sep, 2000 | |
439 | |
440 \bibitem{3}{与儀健人,河野真治}: | |
441 “Continuation based CコンパイラのGCC-4.2による実装”. 琉球大学 情報工学科 学位論文, 2008 | |
442 | |
443 \bibitem{4}{与儀健人,河野真治}: | |
444 “組み込み向け言語Continuation based C のGCC上の実装”. 琉球大学大学院 理工学研究科 学位論文(修士), 2010 | |
445 | |
446 \bibitem{5}{下地篤樹,河野真治}: | |
447 “線形時相論理を用いたContinuation based C プログラムの検証”. 琉球大学大学院 理工学研究科 情報工学専攻 学位論文(修士), 2008 | |
448 | |
449 \bibitem{6}{楊挺,河野真治}: | |
450 “Continuation based C の実装”. 琉球大学大学院 理工学研究科 情報工学専攻 学位論文(修士), 2002 | |
451 | |
452 \bibitem{7}{GNU Compiler Collection (GCC) Internals}: | |
453 “http://gcc.gnu.org/onlinedocs/gccint/” | |
454 | |
455 | |
456 \end{thebibliography} | |
457 | 430 |
458 \end{document} | 431 \end{document} |