Mercurial > hg > Papers > 2008 > gongo-sigos
changeset 15:6c558cd2ac8b
*** empty log message ***
author | gongo |
---|---|
date | Sat, 29 Mar 2008 09:33:55 +0900 |
parents | 091d888f7729 |
children | c66181a100e3 |
files | Makefile cell.tex cerium-manager.tex cerium-rendering.tex cerium-scene_graph.tex cerium_dev.tex compare.tex conclusion.tex figure/sync.bb figure/sync.graffle figure/sync.pdf introduction.tex ipsjsort.bst ipsjunsrt.bst osmesa.tex sigos.bib sigos.tex sigos2008.pdf |
diffstat | 18 files changed, 2654 insertions(+), 78 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Thu Mar 27 02:24:48 2008 +0900 +++ b/Makefile Sat Mar 29 09:33:55 2008 +0900 @@ -19,6 +19,8 @@ dvi: @echo "----------- make dvi file ($(TARGET).dvi) ----------" $(LATEX) $(TARGET) + $(BIBTEX) $(TARGET) + $(LATEX) $(TARGET) $(LATEX) $(TARGET) pdf: dvi $(DVIPDFM) $(DVIPDFMOPT) $(TARGET)
--- a/cell.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/cell.tex Sat Mar 29 09:33:55 2008 +0900 @@ -35,7 +35,7 @@ \subsection{SPURS} -ここでは、現在発表されている Cell の開発環境である SPURS について説明する。 +ここでは、現在発表されている Cell の開発環境である SPURS \cite{spurs} について説明する。 SPURS は、閉じた並列分散と考えることができる Cell の環境で、 いかに効率よく動作させるかということを考えたシステムである (\figref{fig-spurs-pipeline}) (\figref{fig-spurs-task}) 。
--- a/cerium-manager.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/cerium-manager.tex Sat Mar 29 09:33:55 2008 +0900 @@ -228,12 +228,31 @@ \subsubsection{PPE と SPE 間の同期} -\ref{sec:task} で述べたように、PPE から SPE へはタスクの実行命令を、 -SPE から PPE へはタスクの終了などを伝える必要がある。 -その際、待ち合わせを行うと処理が止まってしまい、並列度が下がってしまう。 +Cerium では、以下の二種類のスレッドを扱う。 + +\begin{enumerate} +\item SPE に対応した PPE 上の Thread \label{spe-thread} +\item Mailbox を待つ Thread \label{mail-thread} +\end{enumerate} + +スレッド (\ref{spe-thread}) では、各 SPE の起動と終了を見るだけである。 +スレッド (\ref{mail-thread}) では、Outbound Mailbox (SPE $\rightarrow$ PPE +メッセージ) を見て、その内容に対応する処理を PPE 上で行う。 +対処した結果を Inbound Mailbox (PPE $\rightarrow$ SPE メッセージ) で伝え、 +受け取った SPE はタスクを再実行する (\figref{fig-sync}) 。 -Cell では、PPE と SPE 間のメッセージのやりとりには -Mailbox という FIFO メッセージキューを用いることができる。 +\begin{figure}[tb] + \begin{center} + \includegraphics[scale=0.353]{figure/sync.pdf} + \caption{PPE, SPE threads} + \label{fig-sync} + \end{center} +\end{figure} + +Mailbox とは SPE の MFC 内の FIFO キューであり、 +PPE と SPE 間の 32 ビットメッセージの交換に用いられる \cite{mailbox} 。 +通常、スレッド間で待ち合わせを行うと処理が止まってしまい、 +並列度が下がってしまうことがあるが、Mailbox は メッセージ交換なので待ち合わせを避けることが可能である。 %%PPE が SPE からメールを受け取る場合、
--- a/cerium-rendering.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/cerium-rendering.tex Sat Mar 29 09:33:55 2008 +0900 @@ -12,25 +12,35 @@ \end{center} \end{figure} -Span はテクスチャ情報のアドレスと高さと幅、それに加えて -ポリゴンのある Y 座標に対する左端のピクセル情報、右端のピクセル情報、 -そして Span の長さを持つ。 +%%Span はテクスチャ情報のアドレスと高さと幅、それに加えて +%%ポリゴンのある Y 座標に対する左端のピクセル情報、右端のピクセル情報、 +%%そして Span の長さを持つ。 + +生成された Span を SPE が DMA で受け取り、Z Buffer を用いて +Frame Buffer に書き込むピクセルの座標に対応する RGB 値を、 +テクスチャデータから取り出して書き込む。 +テクスチャデータは、プログラム起動時に一度だけ DMA で全て取得する。 + +Frame Buffer は mmap されているので、ピクセルデータを DMA 転送することで +描画している。 -生成された Span を SPE に DMA 転送し描画処理を行うわけだが、 -全ての Span を SPE に送るのは問題がある。 -先に述べたように、SPE が扱えるメモリ領域は 256KB と非常に小さい。 -本研究の画面環境が 1920x1080 であるため、Span の情報は元より、 -描画に使う Z Buffer のサイズも、 -1 line だけで 1920 * 4byte(RGB$\alpha$) = 7 KB となる。 -そこで、SPE に DMA 転送する前に、Y 座標を 8 line 毎に -Span のリストを生成する。これを SpanPack とする。 -8 line 毎にとっている理由は、SPE が持てる Z Buffer が 8 line 分 (60KB) -ぐらいだろうという見解からくるものである。 - -Span が持つ情報からテクスチャを計算し、ピクセル毎の RGB$\alpha$情報を -取得する。しかし、SPE の メモリ領域の問題から、あらかじめ -全てのテクスチャを転送しておくことが不可能な場合がある。 -それらを考慮し、テクスチャを分割する必要がある。 -テクスチャは、8x8 の大きさに分割される。 -Span はそれぞれのテクスチャに沿って生成される。つまり、 -Span 一つにつき、分割したテクスチャ一つが DMA される。 +%% +%%生成された Span を SPE に DMA 転送し描画処理を行うわけだが、 +%%全ての Span を SPE に送るのは問題がある。 +%%先に述べたように、SPE が扱えるメモリ領域は 256KB と非常に小さい。 +%%本研究の画面環境が 1920x1080 であるため、Span の情報は元より、 +%%描画に使う Z Buffer のサイズも、 +%%1 line だけで 1920 * 4byte(RGB$\alpha$) = 7 KB となる。 +%%そこで、SPE に DMA 転送する前に、Y 座標を 8 line 毎に +%%Span のリストを生成する。これを SpanPack とする。 +%%8 line 毎にとっている理由は、SPE が持てる Z Buffer が 8 line 分 (60KB) +%%ぐらいだろうという見解からくるものである。 +%% +%%Span が持つ情報からテクスチャを計算し、ピクセル毎の RGB$\alpha$情報を +%%取得する。しかし、SPE の メモリ領域の問題から、あらかじめ +%%全てのテクスチャを転送しておくことが不可能な場合がある。 +%%それらを考慮し、テクスチャを分割する必要がある。 +%%テクスチャは、8x8 の大きさに分割される。 +%%Span はそれぞれのテクスチャに沿って生成される。つまり、 +%%Span 一つにつき、分割したテクスチャ一つが DMA される。 +%%
--- a/cerium-scene_graph.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/cerium-scene_graph.tex Sat Mar 29 09:33:55 2008 +0900 @@ -14,6 +14,12 @@ \end{center} \end{figure} +Scene Graph によりプログラムが個々のゲーム場面に分割され、 +ゲーム場面の遷移を StatePattern を用いて記述すると、 +if,case 文が排除できるので、プログラムの可読性と独立性が向上する。 +これにより、過去の PS、PS2 によるゲームプログラムの移植や改良にかかる +作業時間短縮が見込める。 + Scene Graph Node は以下のようなデータと動作を持つ。 \begin{itemize}
--- a/cerium_dev.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/cerium_dev.tex Sat Mar 29 09:33:55 2008 +0900 @@ -1,5 +1,6 @@ -\section{Cerium によるゲーム開発} \label{cerium_dev} -Cerium 自身や Cerium を用いた開発では、以下の段階にそれぞれ実装とテストを行う。 +\section{Cerium の開発行程} \label{cerium_dev} +Cerium 自身や Cerium を用いたプログラムの作成では、 +以下の段階にそれぞれ実装とテストを行う。 \begin{enumerate} \item C によるシーケンシャルな実装 \label{list_dev_1}
--- a/compare.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/compare.tex Sat Mar 29 09:33:55 2008 +0900 @@ -56,9 +56,9 @@ ことができない。SPE の LS の容量では、全てのタスクを SPE 上に乗せることは できないため、現在は Renderer のタスクだけを SPE 上にマッピングしてある。 -また、Texture の分割と、Texture の必要な部分だけ DMA で -取得するという機能も実装されていない。 -そのため、ここでは開始直後に Texture を全て SPE 上にロードしている。 +また、プログラム開始直後にテクスチャデータを全て SPE 上にロードしている。 +そのため、必要無いデータまで SPE 上に置いている状態なので、 +メモリ領域を無駄に消費している。 Cerium の描画領域の横幅が 640 に抑えてあるのも、上記の問題が原因で 1920 pixel 分の Z Buffer を SPE 上に置くスペースが無いからである。 @@ -67,5 +67,3 @@ また、パイプラインが正常に動いているかなど、 アルゴリズムの検証を行う必要もある。 -この場合、C の下位言語である Continuation based C (CbC) を用いて、 -開発過程の各段階で検証する手法がある \cite{kono} 。
--- a/conclusion.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/conclusion.tex Sat Mar 29 09:33:55 2008 +0900 @@ -1,32 +1,25 @@ \section{まとめ} -本研究では、Cell 上で動作する Task Manager を実装し、 -3D Graphics Renderer である Cerium を開発した。 -Cerium を用いることで、PlayStation 3 上という限られた環境だけでなく、 -Linux や Mac OS X でもテストやデバッグを行うことが出来る。 - -また、 Task Manager の実装を進めれば、Cell 以外の -Multi Core Architecture に対しても使用できると考えている。 +本研究では、Many Core Architecture 向けの Fine Grain Task OS を提案し、 +例題として Cell 上で動作する、ゲームプログラム用 OS である Cerium を開発した。 +Cerium を用いることで、PS3 上という限られた環境だけでなく、 +Linux や Mac OS X でもテストやデバッグを行うことが出来るため、 +並列プログラミング経験の低い学生の実験にも使用できる。 \section{今後の課題} +ここでは、Cerium に関する課題を示す。 \subsection{Scene Graph} カメラや光源、コントローラ等からの入力に対応するノードが未実装である -また、ネットワークを管理するノードを実装すれば、 -Federated Linda \cite{fuchita} を用いた -ネットワークゲーム開発も可能である。 - \subsection{Rendering} -必要最低限の機能は実装しているが、ゲームとしては +必要最低限の機能は実装しているが、ゲームとしては以下の機能が必須といえる。 \begin{itemize} \item Shading \item Alpha blending \end{itemize} -が欲しいところである。 - -現在は描画時に Z Buffer を用いているが、Z sort を用いることにより、 +また、現在は描画時に Z Buffer を用いているが、Z sort を用いることにより、 SPE 上に Z Buffer の領域は必要なくなる。 Z sort とは、面に対してどちらが手前にあるかというのを判断し、 おくにある面から描画していく手法である。 @@ -45,6 +38,3 @@ しかし、ユーザが勝手に DMA 命令を発効すると、DMA 完了待ちやデータ重複など、 パイプラインの流れが崩れてしまう恐れがある。 それを回避する実装が必要である。 - -現在は C++ で記述しているが、CbC に書き換えることで -モデル検査を行うことができ、高い信頼性を得られる。
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/sync.bb Sat Mar 29 09:33:55 2008 +0900 @@ -0,0 +1,5 @@ +%%Title: ./sync.pdf +%%Creator: ebb Version 0.5.2 (+ArtBox) +%%BoundingBox: 0 0 577 554 +%%CreationDate: Sat Mar 29 08:29:28 2008 +
--- a/introduction.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/introduction.tex Sat Mar 29 09:33:55 2008 +0900 @@ -1,26 +1,61 @@ \section{研究の目的} -PlayStation 3 (以下 PS3) では、搭載された Linux を用いて、 -PS3 上で動くゲーム開発することができる。 -しかし、現在 GPU (Graphics Processing Unit) の API は -一般には公開されていないため、GPU を使った描画はできない。 -Frame Buffer 上には直接描画することはできるため、 -我々は Frame Buffer 上に描画するゲームフレームワークを提案してきた。 -本研究では、PS3 上で高速な描画が可能な、独自のレンダリングエンジンとして、 -Cerium Rendering Engine の開発を行う。 +%% % これは研究の目的としては「近すぎる」 +%% % 最終目標は「レンダリングエンジンを作る」ではなく +%% % 「OSを作る」だから。(でいいのかな +%% +%%PlayStation 3 (以下 PS3) では、搭載された Linux を用いて、 +%%PS3 上で動くゲーム開発することができる。 +%%しかし、現在 GPU (Graphics Processing Unit) の API は +%%一般には公開されていないため、GPU を使った描画はできない。 +%%Frame Buffer 上には直接描画することはできるため、 +%%我々は Frame Buffer 上に描画するゲームフレームワークを提案してきた。 +%% +%%本研究では、PS3 上で高速な描画が可能な、独自のレンダリングエンジンとして、 +%%Cerium Rendering Engine の開発を行う。 +%%Cerium は、次の 3 つから構成される。 +%% +%%\begin{itemize} +%% \item Scene Graph +%% \item Rendering Engine +%% \item Task Manager +%%\end{itemize} +%% +%%Cerium は Cell 上だけでなく、Linux や Mac OS X 上でも +%%動く、シーケンシャルなプログラムも実装することが出来る。 +%%並列プログラムとシーケンシャルプログラムの相互の変換は容易である。 +%%これにより、全体の動作のデバッグはシーケンシャルプログラムで行い、 +%%仕様が正しいと確認できたら、 Cell 上などの特有の環境で +%%動作、デバッグを行えばいい。 +%% + +近年、CPU の性能向上は、クロックサイクルを上げることよりも、 +複数の CPU コア (Many Core Architecture) を導入することにより +得られるようになってきている。しかし、Many Core Architecture の +プログラムは複雑であり、その信頼性を確保することは難しい。 + +本研究では、Many Core Architecture 向けの Fine Grain Task OS を設計する。 +この OS では、Amdahl 則を考慮して、 +定常的な並列性を細粒度タスクを使って実現する。 +そのために、シーングラフレベルから並列実行を考慮したプログラムとする。 + +細粒度タスク自体や、タスク全体のデバッグを容易にするために、 +同じタスクが Mac OS X や Linux、PS3 上など複数の環境で動くようにする。 +また、Thread を多用せず、細粒度タスク内での同期は行わない。 +これにより、並列プログラミングの経験の低いプログラマでも +容易に使用できる。 + +例題として、本研究室で作成した、Rendering を含む PS3 上のゲームプログラム用 +OS である Cerium \cite{gongo} を用いる。 + Cerium は、次の 3 つから構成される。 \begin{itemize} \item Scene Graph \item Rendering Engine - \item Task Manager + \item Fine Grain Task Manager \end{itemize} -Cerium は Cell 上だけでなく、Linux や Mac OS X 上でも -動く、シーケンシャルなプログラムも実装することが出来る。 -並列プログラムとシーケンシャルプログラムの相互の変換は容易である。 -これにより、全体の動作のデバッグはシーケンシャルプログラムで行い、 -仕様が正しいと確認できたら、 Cell 上などの特有の環境で -動作、デバッグを行えばいい。 - - +Cerium では、Cell の性能を十分に引き出し、 +今まで作成してきた PS、PS2 のゲームプログラムを PS3 へ +容易に移植できることを目的とする。
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsjsort.bst Sat Mar 29 09:33:55 2008 +0900 @@ -0,0 +1,1285 @@ +% ipsjsort.bst 15-Jun-07 by Hiroshi Nakashima (ver 2.12) +% ipsjsort.bst 30-Jan-02 by Hiroshi Nakashima (ver 2.00) +% ipsjsort.bst 28-Dec-93 by Hiroshi Nakashima (ver 1.00) +% jssst.bst tomura@etl.go.jp (Satoru Tomura) +% BibTeX standard bibliography style `jplain' + % version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09. + % by Shouichi Matsui, matsui@denken.junet + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + yomi + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +INTEGERS { before.year } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'before.year := % 1.00(1) +} + +STRINGS { s t } + +FUNCTION {is.kanji} +{ is.kanji.str$ } % 1.00(2), 2.00(1) + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { duplicate$ is.kanji % 2.00(2) + { "," * write$ } + { ", " * write$ } + if$ + } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state before.year = % 1.00(1) + { " " * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {required.argument} +{ 't := + empty$ + {"Missing required argument " t * " in " * cite$ * warning$} + 'skip$ + if$ +} + +FUNCTION {required.exclusive.or.argument} +{ 't := + empty$ + { 's := + empty$ + { t " or " * s * " is missing in " * cite$ * warning$} + 'skip$ + if$ + } + { 's := + empty$ + 'skip$ + { "You can use only one of " t * " and " * s * " in " * cite$ * warning$} + if$ + } + if$ +} + +FUNCTION {required.and.or.argument} +{ 't := empty$ + { 's := empty$ + { "there's no " t * " and/or " * s * cite$ * warning$ } + 'skip$ + if$ + } + { pop$ pop$ } + if$ +} + +FUNCTION {optional.series.volume.number.argument} +{ series empty$ + { volume empty$ + { number empty$ + 'skip$ + { "there's a number but no series in " cite$ * warning$ } + if$ + } + { number empty$ + { "there's a volume but no series in " cite$ * warning$ } + { "you can use only one of volume and number in " cite$ * warning$} + if$ + } + if$ + } + { volume empty$ + { number empty$ + { "there's a series but neither volume nor number in " cite$ * warning$ } + 'skip$ + if$ + } + { number empty$ + 'skip$ + { "you can use only one of volume and number in " cite$ * warning$ } + if$ + } + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + before.all 'output.state := +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { duplicate$ is.kanji + 'skip$ % 1.00(3) + { "{\em " swap$ * "}" * } % 2.00(3) + if$ + } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} % 1.00(4), 2.00(4) +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff}{ll}" format.name$ duplicate$ is.kanji + { duplicate$ text.length$ #6 > + { 't := } + { pop$ s nameptr "{ff} {ll}" format.name$ 't := } + if$ + } + { pop$ s nameptr "{vv }{ll}{, jj}{, f.}" format.name$ 't := } + if$ + nameptr #1 > + { namesleft #1 > + { s is.kanji + { "," } + { ", " } + if$ + * t * } + { t "others" = + { s is.kanji + {"ほか" * } + {" et al." * } + if$ + } + { s is.kanji + {"," * t * } % put "," here for Kanji (H.N.) + {" and " * t * } + if$ + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {add.colon} % 2.00(5) +{ duplicate$ is.kanji + { "\:" * } % 2.12(1) + { ": " * } + if$ +} + +FUNCTION {format.editors.inparen} % 2.00(6) +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { editor is.kanji + {",編" * } {", eds." *} if$ + } + { editor is.kanji + {",編" *} {", ed." *} if$ + } + if$ + } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { editor is.kanji + {"(編)" * } {"(eds.)" *} if$ % 2.00(7) + } + { editor is.kanji + {"(編)" *} {"(ed.)" *} if$ % 2.00(7) + } + if$ + } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ before.year 'output.state := % 1.00(1) + year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + "" % 1.00(5) + } + if$ + } + { "(" year ")" * * } % 1.00(5) + if$ +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { "\ " } % 1.00(6) + if$ + swap$ * * +} + +FUNCTION {output.volume} +{ + volume empty$ + 'skip$ + { "Vol.~" volume * output} + if$ + +} + +FUNCTION {output.number} +{ + number empty$ + 'skip$ + { "No.~" number * output} + if$ +} + +FUNCTION {output.series.volume.number} +{ series empty$ + { output.volume + output.number } + { series is.kanji + volume empty$ + number empty$ + or + and + { series " " * volume * number * output} + { series output + output.volume + output.number} + if$ + } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} % 1.00(7) +{ pages empty$ + { "" } + { pages multi.page.check + { "pp." pages n.dashify tie.or.space.connect } + { "p." pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} % 1.00(8) +{ volume empty$ + { ""} + { " Vol.~" volume * } + if$ + number empty$ + 'skip$ + { volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + { "," *} + if$ + " No.~" number * * + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" chapter tie.or.space.connect } + { type is.kanji + { chapter type tie.or.space.connect } + { type "l" change.case$ chapter tie.or.space.connect } + if$ + } + if$ + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { booktitle emphasize + editor empty$ + 'skip$ + { booktitle is.kanji + { "(" * format.editors.inparen * ")" *} % 2.00(6,7) + { " (" * format.editors.inparen * ")" *} % 1.00(9), 2.00(6) + if$ + } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { title empty$ + { "Technical Report" } + { title is.kanji + { "技術報告" } + { "Technical Report" } + if$ + } + if$ + } + {type} + if$ + number empty$ + { "t" change.case$ } + { " " number * * } + if$ +} + +FUNCTION {format.article.crossref} % 2.00(8) +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { journal emphasize } % 1.00(10) + if$ + } + { "In " key * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} % 1.00(11) +{ editor #1 + editor is.kanji { "{ff}" } { "{vv }{ll}" } if$ + format.name$ + editor num.names$ duplicate$ + #2 > + { editor is.kanji + {pop$ "ほか" *} {pop$ " et al." * } if$ + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { editor is.kanji + {"ほか" *} {" et al." * } if$ + } + { editor is.kanji + {"・" * editor #2 "{ff}" format.name$ * } + {" and " * editor #2 "{vv }{ll}" format.name$ * } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} % 2.00(8) +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { series emphasize } % 1.00(10) + if$ + } + { "In " key * } + if$ + } + { format.crossref.editor } + if$ + " \cite{" * crossref * "}" * + volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ } + { duplicate$ is.kanji { "," } { ", "} if$ * + "Vol." * volume tie.or.space.connect + } + if$ +} + +FUNCTION {format.incoll.inproc.crossref} % 2.00(8) +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { booktitle emphasize } % 1.00(10) + if$ + } + { "In " key * } + if$ + } + { format.crossref.editor } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ +%%%% + author "author" required.argument + title "title" required.argument + journal "journal" required.argument + year "year" required.argument +%%%% jssst + volume "volume" + number "number" + required.and.or.argument + pages "pages" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + crossref missing$ + { journal emphasize output + format.vol.num.pages output % 1.00(12) + format.date output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {book} +{ +%%%% + author "author" + editor "editor" + required.exclusive.or.argument + title "title" required.argument + publisher "publisher" required.argument + year "year" required.argument + optional.series.volume.number.argument +%%%% + output.bibitem + author empty$ + { format.editors} + { format.authors} + if$ + add.colon % 2.00(5) + title emphasize output + crossref missing$ + { output.series.volume.number + publisher output + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ +%%%% + title "title" required.argument +%%%% jssst + author "author" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + howpublished output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ +%%%% + author "author" + editor "editor" + required.exclusive.or.argument + title "title" required.argument + chapter "chapter" + pages "pages" + required.and.or.argument + publisher "publisher" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + author empty$ + { format.editors} + { format.authors} + if$ + add.colon % 2.00(5) + title emphasize output + crossref missing$ + { output.series.volume.number + format.chapter.pages output + publisher output + } + { format.chapter.pages output + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date output % 1.00(13) + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ +%%%% + author "author" required.argument + title "title" required.argument + booktitle "booktitle" required.argument + publisher "publisher" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + crossref missing$ + { format.in.ed.booktitle output + output.series.volume.number + publisher output + address output + format.edition output + format.chapter.pages output % 1.00(13) + format.date output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ +%%%% + author "author" required.argument + title "title" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + crossref missing$ + { format.in.ed.booktitle output + booktitle "booktitle" required.argument + output.series.volume.number + address output + organization output + publisher output + format.pages output + format.date output % 1.00(13) + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ +%%%% + title "title" required.argument +%%%% jssst + author "author" + organization "organazaion" + required.exclusive.or.argument +%%%% + output.bibitem + author empty$ + { organization} + { format.authors} + if$ + add.colon % 2.00(5) + title emphasize output + author empty$ + 'skip$ + { organization output } + if$ + address output + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ +%%%% + author "author" required.argument + title "title" required.argument + school "school" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + author empty$ + { "Master's thesis" } + { author is.kanji + { "修士論文" } + { "Master's thesis" } + if$ + } + if$ + format.thesis.type output.nonnull + school output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ +%%%% +%%%% jssst + author "author" required.argument + title "title" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + howpublished output + format.date output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ +%%%% + author "author" required.argument + title "title" required.argument + school "school" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output % 2.00(9) + author empty$ + { "PhD Thesis" } + { author is.kanji + { "博士論文" } + { "PhD Thesis" } + if$ + } + if$ + format.thesis.type output.nonnull + school output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ +%%%% + title "title" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% jssst + editor "editor" + organization "organization" + required.exclusive.or.argument +%%%% + output.bibitem + editor empty$ + { organization } + { format.editors } + if$ + add.colon % 2.00(5) + title emphasize output + output.series.volume.number + address output + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ +%%%% + author "author" required.argument + title "title" required.argument + institution "institution" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + format.tr.number output.nonnull + institution output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ +%%%% + author "author" required.argument + title "title" required.argument + note "note" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {sort.format.names} +{ 's := + yomi empty$ + 'skip$ + { yomi 's := } + if$ + + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsjunsrt.bst Sat Mar 29 09:33:55 2008 +0900 @@ -0,0 +1,1135 @@ +% ipsjunsrt.bst 15-Jun-07 by Hiroshi Nakashima (ver 2.12) +% ipsjunsrt.bst 30-Jan-02 by Hiroshi Nakashima (ver 2.00) +% ipsjunsrt.bst 28-Dec-93 by Hiroshi Nakashima (ver 1.00) +% jssst.bst tomura@etl.go.jp (Satoru Tomura) +% BibTeX standard bibliography style `jplain' + % version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09. + % by Shouichi Matsui, matsui@denken.junet + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + yomi + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +INTEGERS { before.year } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'before.year := % 1.00(1) +} + +STRINGS { s t } + +FUNCTION {is.kanji} +{ is.kanji.str$ } % 1.00(2), 2.00(1) + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { duplicate$ is.kanji % 2.00(2) + { "," * write$ } + { ", " * write$ } + if$ + } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state before.year = % 1.00(1) + { " " * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {required.argument} +{ 't := + empty$ + {"Missing required argument " t * " in " * cite$ * warning$} + 'skip$ + if$ +} + +FUNCTION {required.exclusive.or.argument} +{ 't := + empty$ + { 's := + empty$ + { t " or " * s * " is missing in " * cite$ * warning$} + 'skip$ + if$ + } + { 's := + empty$ + 'skip$ + { "You can use only one of " t * " and " * s * " in " * cite$ * warning$} + if$ + } + if$ +} + +FUNCTION {required.and.or.argument} +{ 't := empty$ + { 's := empty$ + { "there's no " t * " and/or " * s * cite$ * warning$ } + 'skip$ + if$ + } + { pop$ pop$ } + if$ +} + +FUNCTION {optional.series.volume.number.argument} +{ series empty$ + { volume empty$ + { number empty$ + 'skip$ + { "there's a number but no series in " cite$ * warning$ } + if$ + } + { number empty$ + { "there's a volume but no series in " cite$ * warning$ } + { "you can use only one of volume and number in " cite$ * warning$} + if$ + } + if$ + } + { volume empty$ + { number empty$ + { "there's a series but neither volume nor number in " cite$ * warning$ } + 'skip$ + if$ + } + { number empty$ + 'skip$ + { "you can use only one of volume and number in " cite$ * warning$ } + if$ + } + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + before.all 'output.state := +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { duplicate$ is.kanji + 'skip$ % 1.00(3) + { "{\em " swap$ * "}" * } % 2.00(3) + if$ + } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} % 1.00(4), 2.00(4) +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff}{ll}" format.name$ duplicate$ is.kanji + { duplicate$ text.length$ #6 > + { 't := } + { pop$ s nameptr "{ff} {ll}" format.name$ 't := } + if$ + } + { pop$ s nameptr "{vv }{ll}{, jj}{, f.}" format.name$ 't := } + if$ + nameptr #1 > + { namesleft #1 > + { s is.kanji + { "," } + { ", " } + if$ + * t * } + { t "others" = + { s is.kanji + {"ほか" * } + {" et al." * } + if$ + } + { s is.kanji + {"," * t * } % put "," here for Kanji (H.N.) + {" and " * t * } + if$ + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {add.colon} % 2.00(5) +{ duplicate$ is.kanji + { "\:" * } % 2.12(1) + { ": " * } + if$ +} + +FUNCTION {format.editors.inparen} % 2.00(6) +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { editor is.kanji + {",編" * } {", eds." *} if$ + } + { editor is.kanji + {",編" *} {", ed." *} if$ + } + if$ + } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { editor is.kanji + {"(編)" * } {"(eds.)" *} if$ % 2.00(7) + } + { editor is.kanji + {"(編)" *} {"(ed.)" *} if$ % 2.00(7) + } + if$ + } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ before.year 'output.state := % 1.00(1) + year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + "" % 1.00(5) + } + if$ + } + { "(" year ")" * * } % 1.00(5) + if$ +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { "\ " } % 1.00(6) + if$ + swap$ * * +} + +FUNCTION {output.volume} +{ + volume empty$ + 'skip$ + { "Vol.~" volume * output} + if$ + +} + +FUNCTION {output.number} +{ + number empty$ + 'skip$ + { "No.~" number * output} + if$ +} + +FUNCTION {output.series.volume.number} +{ series empty$ + { output.volume + output.number } + { series is.kanji + volume empty$ + number empty$ + or + and + { series " " * volume * number * output} + { series output + output.volume + output.number} + if$ + } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} % 1.00(7) +{ pages empty$ + { "" } + { pages multi.page.check + { "pp." pages n.dashify tie.or.space.connect } + { "p." pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} % 1.00(8) +{ volume empty$ + { ""} + { " Vol.~" volume * } + if$ + number empty$ + 'skip$ + { volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + { "," *} + if$ + " No.~" number * * + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" chapter tie.or.space.connect } + { type is.kanji + { chapter type tie.or.space.connect } + { type "l" change.case$ chapter tie.or.space.connect } + if$ + } + if$ + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { booktitle emphasize + editor empty$ + 'skip$ + { booktitle is.kanji + { "(" * format.editors.inparen * ")" *} % 2.00(6,7) + { " (" * format.editors.inparen * ")" *} % 1.00(9), 2.00(6) + if$ + } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { title empty$ + { "Technical Report" } + { title is.kanji + { "技術報告" } + { "Technical Report" } + if$ + } + if$ + } + {type} + if$ + number empty$ + { "t" change.case$ } + { " " number * * } + if$ +} + +FUNCTION {format.article.crossref} % 2.00(8) +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { journal emphasize } % 1.00(10) + if$ + } + { "In " key * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} % 1.00(11) +{ editor #1 + editor is.kanji { "{ff}" } { "{vv }{ll}" } if$ + format.name$ + editor num.names$ duplicate$ + #2 > + { editor is.kanji + {pop$ "ほか" *} {pop$ " et al." * } if$ + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { editor is.kanji + {"ほか" *} {" et al." * } if$ + } + { editor is.kanji + {"・" * editor #2 "{ff}" format.name$ * } + {" and " * editor #2 "{vv }{ll}" format.name$ * } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} % 2.00(8) +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { series emphasize } % 1.00(10) + if$ + } + { "In " key * } + if$ + } + { format.crossref.editor } + if$ + " \cite{" * crossref * "}" * + volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ } + { duplicate$ is.kanji { "," } { ", "} if$ * + "Vol." * volume tie.or.space.connect + } + if$ +} + +FUNCTION {format.incoll.inproc.crossref} % 2.00(8) +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { booktitle emphasize } % 1.00(10) + if$ + } + { "In " key * } + if$ + } + { format.crossref.editor } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ +%%%% + author "author" required.argument + title "title" required.argument + journal "journal" required.argument + year "year" required.argument +%%%% jssst + volume "volume" + number "number" + required.and.or.argument + pages "pages" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + crossref missing$ + { journal emphasize output + format.vol.num.pages output % 1.00(12) + format.date output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {book} +{ +%%%% + author "author" + editor "editor" + required.exclusive.or.argument + title "title" required.argument + publisher "publisher" required.argument + year "year" required.argument + optional.series.volume.number.argument +%%%% + output.bibitem + author empty$ + { format.editors} + { format.authors} + if$ + add.colon % 2.00(5) + title emphasize output + crossref missing$ + { output.series.volume.number + publisher output + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ +%%%% + title "title" required.argument +%%%% jssst + author "author" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + howpublished output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ +%%%% + author "author" + editor "editor" + required.exclusive.or.argument + title "title" required.argument + chapter "chapter" + pages "pages" + required.and.or.argument + publisher "publisher" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + author empty$ + { format.editors} + { format.authors} + if$ + add.colon % 2.00(5) + title emphasize output + crossref missing$ + { output.series.volume.number + format.chapter.pages output + publisher output + } + { format.chapter.pages output + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date output % 1.00(13) + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ +%%%% + author "author" required.argument + title "title" required.argument + booktitle "booktitle" required.argument + publisher "publisher" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + crossref missing$ + { format.in.ed.booktitle output + output.series.volume.number + publisher output + address output + format.edition output + format.chapter.pages output % 1.00(13) + format.date output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ +%%%% + author "author" required.argument + title "title" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + crossref missing$ + { format.in.ed.booktitle output + booktitle "booktitle" required.argument + output.series.volume.number + address output + organization output + publisher output + format.pages output + format.date output % 1.00(13) + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ +%%%% + title "title" required.argument +%%%% jssst + author "author" + organization "organazaion" + required.exclusive.or.argument +%%%% + output.bibitem + author empty$ + { organization} + { format.authors} + if$ + add.colon % 2.00(5) + title emphasize output + author empty$ + 'skip$ + { organization output } + if$ + address output + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ +%%%% + author "author" required.argument + title "title" required.argument + school "school" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + author empty$ + { "Master's thesis" } + { author is.kanji + { "修士論文" } + { "Master's thesis" } + if$ + } + if$ + format.thesis.type output.nonnull + school output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ +%%%% +%%%% jssst + author "author" required.argument + title "title" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + howpublished output + format.date output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ +%%%% + author "author" required.argument + title "title" required.argument + school "school" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output % 2.00(9) + author empty$ + { "PhD Thesis" } + { author is.kanji + { "博士論文" } + { "PhD Thesis" } + if$ + } + if$ + format.thesis.type output.nonnull + school output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ +%%%% + title "title" required.argument + year "year" required.argument + + optional.series.volume.number.argument +%%%% jssst + editor "editor" + organization "organization" + required.exclusive.or.argument +%%%% + output.bibitem + editor empty$ + { organization } + { format.editors } + if$ + add.colon % 2.00(5) + title emphasize output + output.series.volume.number + address output + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ +%%%% + author "author" required.argument + title "title" required.argument + institution "institution" required.argument + year "year" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + format.tr.number output.nonnull + institution output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ +%%%% + author "author" required.argument + title "title" required.argument + note "note" required.argument +%%%% + output.bibitem + format.authors add.colon % 2.00(5) + title output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + +
--- a/osmesa.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/osmesa.tex Sat Mar 29 09:33:55 2008 +0900 @@ -1,8 +1,15 @@ \section{OSMesa/SDL を用いた Cell 上でのゲームプログラミング} -先行研究 \cite{akira} では、Frame Buffer Engine 用のレンダリングエンジンである -OSMesa \cite{osmesa} と、マルチメディアライブラリの SDL \cite{sdl} の二つを -用いて開発を行った。 -例題として、一つの立方体を回転させるというプログラムを用いた。 +PS3 では、搭載された Linux を用いて、 +PS3 上で動くゲーム開発することができる。 +しかし、現在 GPU (Graphics Processing Unit) の API は +一般には公開されていないため、GPU を使った描画はできない。 +Frame Buffer 上には直接描画することはできるため、 +Cerium の先行研究 \cite{akira} では、 +Frame Buffer Engine 用のレンダリングエンジンである +OSMesa \cite{osmesa} と、マルチメディアライブラリの +SDL \cite{sdl} の二つを用いて開発を行っている。 +例題として、テクスチャを貼っていない一つの立方体を +回転させるというプログラムを用いた。 PPE のみを使用した場合の実行速度は約 18 FPS (Frame Per Second) という結果になった。 @@ -31,5 +38,9 @@ より速くなる可能性を示すものである。 しかし、OSMesa は巨大なマクロによるプログラム記述や -コピーの多用、巨大な構造体等があり、細分化はもちろん、 -後に拡張をすることも難しい。 +コピーの多用、巨大な構造体等がある。 +テクスチャに関しても、使用するテクスチャモードによって +いくつものコードが呼び出される。 +それら全てのコードに対しての細分化や、 +後に拡張をすることは難しい。 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sigos.bib Sat Mar 29 09:33:55 2008 +0900 @@ -0,0 +1,76 @@ + +@misc{osmesa, +author = "", +title = "{The Mesa 3D Graphics Library}", +howpublished = "\url{http://www.mesa3d.org/}" +} + +@misc{sdl, +author = "", +title = "{Simple DirectMedia Layer}", +howpublished = "\url{http://www.libsdl.org/}" +} + +@article{akira, +author = "{Akira KAMIZATO}", +title = "{Cell を用いたゲームフレームワークの提案}", +journal = "{琉球大学理工学研究科情報工学専攻 平成19年度学位論文}", +year = 2008 +} + +@book{amdahl, +author = "{Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea}", +title = "{Java Concurrency in Prac-tice}", +publisher = "{Addison-Wesley Professional}", +year = "2005" +} + +@misc{gongo, +author = "", +title = "{SourceForge.JP: Project Info - Cerium Rendering Engine}", +howpublished = "\url{https://sourceforge.jp/projects/cerium/}" +} + +@misc{spurs, +author = "{Keisuke Inoue}", +title = "{SPU Centric Execution Model}", +text = "SACSIS 2006", +year = 2006 +} + +@misc{cell, +author = "{Sony Corporation}", +title = "{Cell broadband engine architecture}", +year = 2005 +} + +@journal{chiaki, +author = "{Chiaki SUGIYAMA}", +title = "{SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装}", +journal = "{琉球大学工学部情報工学科 平成19年度卒業論文}", +year = 2008 +} + +@misc{blender, +title = "{Blender.jp - Blender Japanese Website}", +howpublished = "\url{http://blender.jp/}" +} + +@manual{libspe2, +author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}", +title = "{SPE Runtime Management Library}", +year = 2006 +} + +@article{kono, +author = "{Shinji KONO}", +title = "{検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation ba sed C と、その Cell への応用}", +journal = "{電子情報通信学会VLSI設計技術研究会}", +year = 2008 +} + +@manual{mailbox, +author = "{Sony Corporation}", +title = "{Cell BroadbandEngine アーキテクチャ}", +year = 2006 +}
--- a/sigos.tex Thu Mar 27 02:24:48 2008 +0900 +++ b/sigos.tex Sat Mar 29 09:33:55 2008 +0900 @@ -76,10 +76,13 @@ \input{cerium_dev} % 開発過程 \input{compare} % 評価と考察 \input{conclusion} % まとめ -\input{bibliography} % 参考文献 -%\bibliographystyle{ipsjunsrt} -%\bibliography{sigos} +\nocite{kono} +\nocite{libspe2} +\bibliographystyle{ipsjunsrt} +\bibliography{sigos} + +%\input{bibliography} % 参考文献 \end{document}