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}