view paper/ARC195OS117-32.tex @ 6:58903796f7de

fix
author Yutaka_Kinjyo
date Sun, 13 Mar 2011 08:21:31 +0900
parents 2c915c8ae5e5
children 20c53b35f2ab
line wrap: on
line source

%Font の Warning 回避
\input{dummy-utf8}

\documentclass[techrep]{ipsjpapers}
\usepackage[dvipdfmx]{graphicx}

% 巻数,号数などの設定
%\setcounter{巻数}{51}
%\setcounter{号数}{10}
%\setcounter{volpageoffset}{1234}

%\受付{22}{7}{17}
%\採録{22}{9}{17}

\setcounter{year}{2011}

% ユーザが定義したマクロなど.
\makeatletter
\let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY}
\def\<{\(\langle\)\nobreak}
\def\>{\nobreak\(\rangle\)}
\def\|{\verb|}
\def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
\def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
\def\LATEX{\iLATEX\Large}
\def\LATEx{\iLATEX\normalsize}
\def\LATex{\iLATEX\small}
\def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em
    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
\def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi}
\def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi}
\def\Quote{\list{}{}\item[]}
\let\endQuote\endlist
\def\TT{\if@LaTeX@e\tt\fi}
\def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else
	$\backslash$#1\fi}

%\checklines	% 行送りを確認する時に使用
\begin{document}%{

% 和文表題
\title[ゲームフレームワーク Cerium TaskManager の改良]%
	{ゲームフレームワーク Cerium TaskManager の改良}

% 英文表題
\etitle{improvement of Game Framework Cerium TaskManager}

% 所属ラベルの定義
\affilabel{RU}{琉球大学\\Ryukyu University}

% 和文著者名
\author{金城 裕\affiref{RU}\and
	河野 真治\affiref{RU}\and
	多賀野 海人\affiref{RU}\and
	小林 佑亮\affiref{RU}
        }
	
% 英文著者名
\eauthor{Yutaka Kinjyo\affiref{RU}\and
         Shinji Kono\affiref{RU}\and
         Kaito Tagano\affiref{RU}\and
         Yusuke Kobayashi\affiref{RU}
         }

% 和文概要
\begin{abstract}
ゲームフレームワーク Cerium TaskManager を開発した。
プログラムは、PPE から Mail 機能を用いて各 SPE に処理が割り振られ並列実行される。
しかし、 PPE からの Mail 応 答が遅い場合、 SPE の待ち時間が発生し、処理性能が低下する。
また、 SPE への データ転送を頻繁に行うと転送のオーバーヘッドがかかる。これらを改良するために、
Mail のタイミングの変更、SPE 内のキャッシュの実装を行った。その結果、例題を 用いた計測では、約 7 倍の処理速度向上を確認した。

\end{abstract}
% 英文概要
\begin{eabstract}
We have developed Cerium of Game Framework. Program is alloted processing to each SPE using Mail function from PPE, and It's excuted in parallel.
But when Mail reply from PPE is late, the waiting time of SPE occurs, and the treatment performance fails.
In addition, When PPE is frequency execute data transfer to SPE, overhead for a data transfer can't be being ignored any more.
To improve these,  We implemented timing change in the Mail and Cash in the SPE. 
As a result, We confirmed the about 7 times of processing speed improvement in measurement using an example program.
\end{eabstract}

% 表題などの出力
\maketitle

%}{

% 本文はここから始まる
\section{はじめに}

%学生実験用にゲームフレームワーク Cerium を開発した。Cerium の TaskManager は
我々は並列プログラミング用のフレームーク Cerium TaskManager を開発している。Cerium は PS3/Cell, MacOSX, Linux
上で開発できる。それぞれのプラットフォームで同じプログラムで動作する。その中でも特にCellに特化しているといえる。
Cerium TaskManager では、関数やサブルーチンを Task として扱う。Task は Task 同士の依存関係
に従って、実行される。
Cell 上の場合、各SPEに Task が割り当てられ、並列に実行される。
Cerium は TaskManager に加え、SceneGraph, RenderingEngine で構成され、この3つでゲームフレームワークとして
動作する。
%RenderingEngine は Task に分割され、並列に処理される。
Task には input データ、output データ、依存関係を設定する。
%Task ベースでプログラミングする場合、処理をTaskに分割、input, output データの分割、Task同士の依存関係に工夫が必要になってくる。
ゲームや、WordCount, Sort を例題として実装した。
TaskManagerと、TaskManager を使うユーザ側の両方の視点から、
実装の際に直面した問題とその改良方法と効果について報告する。

%}{

\section{Cell Broadband Engine}

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.5]{./images/cell-main.pdf}
  \end{center}
  \caption{Cell Broadband Engine Architecture}
  \label{fig:cell_arch}
\end{figure}

Cell Broadband Engine %\cite{cell}
 は、ソニー・コンピュータエンタテインメント、
ソニー、IBM , 東芝によって開発されたマルチコア CPU である。
Cell は、1基の制御系プロセッサコア PPE ( PowerPC Processor Element ) と
8基の演算系プロセッサコア SPE ( Synergistic Processor Element ) で構成される。
各プロセッサコアは、EIB (Element Interconnect Bus)
と呼ばれる高速なバスで接続されている。また、EIB はメインメモリや
外部入出力デバイスとも接続されていて、
各プロセッサコアは EIB を経由してデータアクセスをおこなう。
PPE はメインメモリにアクセスすることができるが、SPE は、246KBのLSにのみ直接アクセスできる。
DMAを用いると、SPE はメインメモリにアクセスできる。
本研究で用いた PS3Linux (Yellow Dog Linux 6.2) では、6 個の SPE を
使うことが出来る ( \figref{fig:cell_arch} )
この PPE と SPE の2種類の CPU を、プログラマ自身が用途に
合わせて適切に使い分けるように考慮する必要がある。

\subsection{Mailbox} \label{sec:mail-box}
Cellの機能にMailboxがある。
Mailbox は PPEとSPEとの間を双方向で、32bitのデータの受け渡しが可能であり、FIFOキュー構造になっている。
MailboxのひとつにSPEからPPEへデータを渡すためのキュー、SPU Outbound Mailbox があり、最大1個までのデータを蓄積できる。
もし、Outbound Mailbox がすでに1個のデータを保持している場合には、
SPEプログラムはPPEプログラム側でキューからデータを読み出すまでデータの書き込みを待ち続ける。

\subsection{DMA転送} \label{sec:dma}
SPE は LS 以外のメモリに
直接アクセスすることができず、PPE が利用するメインメモリ上のデータに
アクセスするには DMA (Direct Memory Access) を用いる。
DMA 転送とは、CPU を介さずに周辺装置とメモリとの間でデータ転送ことで、
Cell の場合はメインメモリと LS 間でデータの転送を行う。
DMA 転送するデータとアドレスにはいくつか制限がある。
転送データが 16 バイト以上の場合、データサイズは 16 バイトの倍数で、
転送元と転送先のアドレスが 16 バイト境界に揃えられている必要がある。
転送データが 16 バイト未満の場合、データサイズは 1,2,4,8 バイトで、
転送サイズに応じた自然なアライメントである (転送サイズのバイト境界に
揃えられている) ことが条件となる。

%}{

\section{Cerium の改良}\label{sec:Enum}\label{sec:item}

Cerium TaskManager では PPE で Task を定義し、PPE から SPE に Task を割り振る。
SPE は DMA転送(\ref{sec:dma}節)によって、Taskと、Taskで用いるデータを受け取る。
DMA転送を用いる場合、待ち時間が発生し、その間SPEの処理が止まる。
そのため、転送をパイプライン化し、DMA転送の待ち
を隠す必要がある。Cerium では SPE にスケジューラを持ち Task とデータ の 読み込み、実行、書き出し
をパイプライン化している。(\figref{fig:scheduler})Task は一つずづ転送されるのではく、ある程度の
数を集めて、TaskList として転送される。

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.5]{./images/scheduler.pdf}
  \end{center}
  \caption{スケジューラ}
  \label{fig:scheduler}
\end{figure}


\subsection{MailQueue} 
Task には依存関係が設定でき、PPE 側で解決する。実行完了した Task の情報を SPE 側から PPE 側に 通知するために CellのMailbox機能を使用した(\ref{sec:mail-box})。
SPEスケジューラは Task が処理完了になる毎に、Mailを Outbound Mailbox に書きこむので、PPE側でMailの読み込みが間に合わないと、待ちが入り、SPEの処理が止まってしまう。


これを解消するためにMailQueueを導入した。MailQueueは、SPEから書き込みきれないMailを一時的にキューに退避させるものである。
TaskListを書きだす時に溜まったQueueの中身をすべて書き出す。
Task完了を知らせる Mail書き出しの待ちは、Task毎から、TaskList毎になる。MailQueueを有効にしたときの実行速度は以下にようになる
速度比較には、RenderingEngineを使ったボールが跳ねる例題ball\_boundを用いた。

\begin{table}[!htb]
  \begin{center}
    \caption{1秒辺りの Rendering Engine 全体の処理回数(Frame Per Second)} 
    \ecaption {hogehoge} \label{tab:FPS}
    \hbox to\hsize{\hfil
      \begin{tabular}{|c|l|l|c|} \hline
         & 改良前 & 改良後 & 性能\\ \hline
         ball\_bound & 32.4 FPS & 41.3 FPS & \%向上 \\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}

ほげほげ

\subsection{TaskArray} \label{taskarray}

Task の依存関係を解決するために、SPEから Mail によってPPEへと処理が完了したTaskの情報が通知される。
その際に、同じ種類のTaskは一つのMailでよい場合がある。
そこで、我々は Task Array を提案、実装した。
Task Array は、複数の Task をまとめて扱うことが出来る。Task Array に登録した順番で
依存関係を設定しているので、PPE で解決する Task の数が減り、 SPE からの TaskList 要求に応答しやすくなる。
また、一度に多くの Task を TaskList に登録できるため、 SPE 側からの TaskList 要求の回数が減り、待ち時間が
生じる可能性が減る。

Rendering Engine の中で、最も数が多く生成される DrawSpanTask を Task Array 化した。
地球と月を表示する例題を対象に効果を測った。 FPS(Frame Per Second) は、一秒間に
表示できる Frame 数のことである。

\begin{table}[htb]
  \begin{center}
    \caption{Rendering Engine の Task Array 化による比較}
    \label{tab:rendering-taskarray-compare}
    \begin{tabular}{|c|c|c|c|}
      \hline
      & Task & Task Array & 向上率\\
      \hline
      FPS & 16.4 & 18.5 \% & 34\%\\
      \hline
      dma wait & 3.34\% & 1.88\% & 2.34\%\\
      \hline
      mail wait & 84\% & 69\% & 15\% \\
      \hline
    \end{tabular}
  \end{center}
\end{table}

結果から DrawSpanTask を Task Array 化すると、FPS が上昇し、mail の wait 時間が減ったことが分かる。
Rendering Engine では、 PPE 側でも処理をするべき Task があり、常に PPE が稼動している状態になって
いる。そのため mail を処理する時間が遅れ、SPE のmail 待ちが発生していると考えられる。 Task Array 化
で Task をまとめることで SPE が一つの TaskList で多くの Task を実行できるようになったため、 TaskList
を要求する回数が減って、待ち時間が発生する回数も減少した。また、それは SPE からの mail の数が減った
ということなので、PPE 側の mail 処理の時間短縮になったと考えられる。

\subsection{PipeLine化}

Cerium では RenderinEngine を実装している。RenderinEngine は大きく分けて、
CreatePolygon, CreateSpan, DrawSpan, の
3つのTaskから構成されている。(\figref{fig:rendering-flow})

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.4]{./images/rendering3.pdf}
  \end{center}
  \caption{レンダリングエンジンの流れ}
  \label{fig:rendering-flow}
\end{figure}

Span とは、ポリゴンに対するある特定Y座に関するデータを抜き出したものである。
この3つのTaskはそれぞれバリア同期を行いながら、順に実行される。
Cerium において、バリア同期を行う場合には二つの待ち時間がある。
\begin{itemize}
\item SPEが他のSPEを待つ時間
\item バリア同期が完了し、PPE側で次のTaskが作られる時間
\end{itemize}

この二つの時間の間SPEの処理が止まり、処理性能の低下につながる。
この待ち時間を回避するには、Taskの粒度を下げる、他のSPEの処理完了を待っているSPEに、別のTaskを割り当てる、等の方法がある。
別のTaskを割り当てるにはTaskの実行をパイプライン化する方法がある。

そこで、特に処理の重いDrawSpanTask と、CreatePolygon,CreateSpan のTask でパイプライン化を行った。(\figref{fig:rend-dep})

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.5]{./images/rend-dep.pdf}
  \end{center}
  \caption{パイプライン化}
  \label{fig:rend-dep}
\end{figure}

速度比較の対象として、SuperDandy と呼ばれる、学生実験で制作されたシューティングゲームを用いた。

\begin{table}[!htb]
  \begin{center}
    \caption{SPE の稼働率(busy\_ratio)} \label{tab:busy_ratio}
    \ecaption{busy ration of spe}
    \hbox to\hsize{\hfil
      \begin{tabular}{|c|l|l|c|} \hline
         & 改良前 & 改良後 & 性能\\ \hline
         dandy & 47.2\% & 78.1\% & 向上 \\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}


\begin{table}[!htb]
  \begin{center}
    \caption{1秒辺りの Rendering Engine 全体の処理回数(Frame Per Second)} 
    \ecaption {hogehoge} \label{tab:rend}
    \hbox to\hsize{\hfil
      \begin{tabular}{|c|l|l|c|} \hline
         & 改良前 & 改良後 & 性能\\ \hline
         dandy & 29.4 FPS & 49.5 FPS & 68\%向上 \\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}

パイプライン化した結果、SPEの稼働率が向上し、FPSも向上した。
処理性能を維持するには、SPEはなるべく稼働させ続けなければならない。
その為には処理をTaskに分割し、並列実行するだけでなく、バリア同期などで、
SPEの待ち時間が発生することへ対処しないといけない。
その対処の一つとしてそれにパイプライン化は有効である。

\subsection{SPEでのキャッシュ効果}

\subsubsection{テクスチャの管理}
Cerium ではソフトウェアレンダリングを、Task で定義し、処理している。描画の際には、SPEのLSへ必要なテクスチャの
情報を読み込む。SPE のメモリ領域は 256KB しかないため、テクスチャのデータを分割し転送する必要がある。
そこで、Cerium ではテクスチャを8x8のブロックに分割し、必要な時に沿って、ブロックを転送する方法を取った。

\subsubsection{テクスチャの縮小}
遠くにあるオブジェクトは小さく描画される。この場合、使用されるテクスチャは原寸大である
必要がない。そこで、オリジナルのテクスチャの他に縮小したテクスチャを用意し、描画される
オブジェクトの大きさによって、使用するテクスチャを変更することにした。

テクスチャは Tile に分割しなければならないため、縦横ともに 8 の倍数を保つようにする。
これまでは、テクスチャの縦横どちらかのサイズが最小 (8ドット) になったとき、縮小画像生成を終了
していたが、テクスチャのサイズが縦横で違う場合、長い方に合わせて空のデータを埋め込み 8 の倍数
の正方形にするように改良した。この改良によってテクスチャの最大縮小率を正確に求めることが出来るよう
になった。

\subsubsection{ハッシュの管理}

この時に、頻繁にテクスチャを読み込む場合にはその読み込みがボトルネックとなる。そこでキャッシュを実装した。
キャッシュは MemorySegment と呼ばれるデータ構造単位でハッシュで管理する。MemorySegment はある一定の
大きさに決め打った連続したメモリ領域のことである。キャッシュ実装の効果を示す。
速度比較の対象には、使用するテクスチャ表示範囲が狭いball\_bound と、画面すべてにテクスチャを表示するpanelを用いる。

\begin{table}[!htb]
  \begin{center}
    \caption{1秒辺りの Rendering Engine 全体の処理回数(Frame Per Second)} 
    \ecaption {hogehoge} \label{tab:cache}
    \hbox to\hsize{\hfil
      \begin{tabular}{|c|l|l|c|} \hline
         & 改良前 & 改良後 & 性能\\ \hline
         ball\_boud & 4 FPS & 30 FPS & 7.5倍向上 \\ \hline
         panel & 0.2 FPS & 2.6 FPS & 13倍向上 \\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}

テクスチャような頻繁な転送が起こり得る場合には、キャッシュが非常に有効であることがわかった。
Cellのような分散メモリでは、データの転送は慎重に管理しできるだけ転送回数を減らすことが性能
向上につながる。

\subsection{Memory Access}

Cellにおいて、SPEへのデータの割り振り方が性能に関わる場合がある。
それはデータを得るために、DMA転送が頻繁に起きるときである。
Cerium を用いて実装したWordCountを例にとってみる。
WordCountのTaskは二つある。

\begin{ENUMERATE}
\item WordCountTask
\item PrintTask
\end{ENUMERATE}

WordCountTaskは、inputで与えられたdataをword countし、output dataに書き出すTaskである。
PrintTaskはすべてのWordCountTaskの実行完了を待ち、outputへ書き出された値を集計し出力するTaskである。
一度にSPEに渡せるデータ容量はDMAの仕様上16Kbyteまでである。さらに転送する際には16の倍数byteである必要がある。

wcするfileをメモリへマッピングし、WordCountTask
のinputに、file dataのアドレスを16kbyteごとに指定していく(\figref{fig:wc-graf})。

\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=0.3]{./images/wc_graf1.pdf}
  \end{center}
  \caption{WordCountのTaskの流れ}
  \label{fig:wc-graf}
\end{figure}

PrintTaskはWordCountTaskを待ちTaskと設定し、WordCountがすべて終わらないと、
実行されない。

このWordCountTaskにデータを渡す際には、メインメモリへのアクセスが局所性を保ちながら
処理されるようにした方が良い。WC対象のデータを各SPEがバラバラな領域から取得する場合と
ある程度まとまった領域から取得するようにした場合とで比較をした。取得のバラつきはTaskArray
のTaskの設定である程度操作できる。TaskArrayのサイズは64, Taskのinputデータの大きさは16kbyte,
wc対象のデータの大きさは約135MB。
dma wait は処理全体にかかった時間のdma転送待ちの割合。

\begin{table}[!htb]
  \begin{center}
    \caption{メモリアクセスの局所性を保った改良(Frame Per Second)} 
    \ecaption {hogehoge} \label{tab:memory-access}
    \hbox to\hsize{\hfil
      \begin{tabular}{|c|l|l|c|} \hline
         & 改良前 & 改良後 & 性能\\ \hline
         実行時間 & 30s   & 1.9s & 15倍向上 \\ \hline
         dma wait & 14\% & 8\% & 1.7倍向上 \\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}

メモリアクセスの局所性を保った場合に処理性能の向上が見られた。ページングや、スワッピングを
抑えることができたと考えられる。それに伴ってdma wait 時間も減少し、SPEの待ち時間が処理性能
の向上に繋がっていると考える。

\subsection{OpenCLとの比較}

OpenGL (Open Graphics Library) とは、Silicon Graphics 社が開発した、3D グラフィックス
処理のためのプログラミングインターフェースである。
上記で紹介した SuperDandy を Task を用いない OpneGL 上で動作するバージョンを用意して、Cerium
と性能を比較してみた。OpenGL は PPE だけで動作している。Cerium は今までの改良をすべて加えたもの。

\begin{table}[!htb]
  \begin{center}
    \caption{シューティングゲーム「dandy」の性能比較(OpenGL, Cerium))} \label{tab:dandy-compare}
    \hbox to \hsize{\hfil
      \begin{tabular}{|c|l|l|c|} \hline
         & OpenGL  & Cerium & 性能差\\ \hline
        dandy & 17.5 FPS & 49.5 FPS & 2.9 倍\\ \hline
      \end{tabular}\hfil}
  \end{center}
\end{table}

コアを1つ用いている OpenGL 版に比べて、Cerium では 2.9 倍の性能向上が見られた。
SPEを活用し、改良によって待ち時間の削減ができ、性能の向上ができた。

%}{


\section{debug}

並列プログラムの特徴として、デバッグが難しいことも挙げられる。
実行が非決定的 (同じ状態で実行しても結果が異なる) な場合があり、
バグの状態を再現することが難しい。
また、個々の Core 上のデータを調べる必要があり、
デバッガが複数の Core を取り扱えることが必須である。
Cell の場合、動作している複数 の SPE の一つに対して
gdb で breakpoint を掛ければ、PPE や他の SPE も同時にストップするが、
それら全ての CPU を手動で管理するのは厳しい。
また、PPE と SPE ではメモリ空間が違うため、
SPE から直接 PPE のデータを見ることができない。
Cerium での開発工程は、

\begin{enumerate}
\item C によるシーケンシャルな実装
\item 並列実行を考慮したデータ構造を持つ実装
\item コードを分割し、シーケンシャルに実行する実装
\item 分割したコードを並列実行する実装
\end{enumerate}

となっている。逐次的な実行で正常な動作を確認した後、並列に実行した場合に正常な
動作をしない場合がある。特にCell特有の問題として
データ構造が合っていない。つまり、DMA転送される際に、16アライメントに設定されていないか、
データのサイズが16の倍数になっていない場合に注意しなければならない。またCeriumではPPE用と
SPE用が別個に存在するので、互いのコードが等価であるかもチェックしなければならない。
一つのコードに統一しても良いが、別個で対応したい問題がでた時に対応してる。なるべく同一な
コードにするのがよい。
本来SPEで動くべきTaskがPPEで動作するケースもあるので、それもチェックするべき。

%}{

\section{まとめ}

本研究では ゲームフレーム Cerium TaskManager の改良を行った。
特にCell上での実行の場合、SPEの活用が処理性能に大きく関わる。
SPEからPPEへのMail通知には、PPEのMailを確認するタイミングが関わって
くるので、MailQueue, TaskArray を用いて
SPE側でなるべく通知にタイミングを減らし、待ち時間を減らした。
SPEの稼働率を上げることで性能向上につながった。またキャッシュを用い、
テクスチャなど頻繁に利用するデータをSPEのLSに常駐させることで、データ
転送の回数を減らし待ち時間を削減した。数種のTaskが混在し、バリア同期
を行っている場合には、SPEの待ち時間が発生するので、Taskのパイプライン化
によって解決した。またデータアクセスの局所性を保つことでデータ転送の待ち
時間を減少させることができる。Cerium は上記の改良を加え、改良前に比べ、
約7倍の処理速度の向上が見られた。

Coreの待ち時間を減らすことは、Coreの稼働率の向上につながり処理性能が向上する。
各Coreの待ち時間は並列プログラミングにおいて、特に注意しなければならない。

\section{今後の課題}

現在TaskのパイプラインはTaskの依存関係をユーザが明示的に記述している。
Task の数が増えるとプログラミングの難易度が格段に上がってしまうという
問題がある。また、パイプライン化できる場所を特定することも難しくなる
この問題は Task の依存関係をユーザではなく、システム側が記述するようにすること
で解決できる。 Task の依存関係が、処理するデータの依存関係と直結しているので、
データの依存関係をシステム側で監視し、その依存関係を元に処理を行うことでシステ
ム側からの依存関係の記述が実現できる。もしくは、Taskの依存関係は別の言語で記述
し、TaskManager がその記述に沿って、定義されたTaskの実行する方法も考えられる。



%}{


\subsection{参考文献リスト}

参考文献リストには,原則として本文中で引用した文献のみを列挙する.順序は参照
順あるいは第一著者の苗字のアルファベット順とする.文献リストは BiB{\TeX} 
と \|ipsjunsrt.bst|(参照順)または \|ipsjsort.bst|(アルファベット順)を用
いて作り,\|\bibliograhpystyle| と \|\bibliography| コマンドにより読み込むこ
とを原則とする\footnotemark .これらを用いれば,規定の体裁にあったものができ
%
% 60 行下の \footnotetext 参照.
%
るので,できるだけ利用していただきたい.特に,論文誌の原稿執筆案内
\cite{webpage2}に示されている,電子ジャーナルやディジタルライブラリ中の文献
\cite{article7,article8,inproceedings2}やweb
page\cite{webpage1,webpage2,webpage3,webpage4,webpage5}の参照のために,一般
的ではないBiB\TeX のエントリ\|webpage|や,下記に例示するフィールド\|doi|,
\|url|, \|refdate|が定義されていることに注意されたい.
%
\begin{quote}\tt
doi = "10.2197/ipsjdc.3.14",\\
url = "http://search.ieice.org/",\\
refdate = "2007-02-05",
\end{quote}
なおこのガイドの参考文献は,\|bibsample.bib| を文献スタイル \|ipsjunsort| で
処理した結果であるので,両者を適宜参照されたい.また製版用のファイル群には
\|.bib| ファイルではなく \|.bbl| ファイルを必ず含めることに注意されたい.

一方,何らかの理由で \|thebibliography| 環境で文献リストを「手作り」しなけれ
ばならない場合は,このガイドの参考文献リストを注意深く見て,そのスタイルにし
たがっていただきたい.

%}{

\subsection{著者紹介}\label{sec:DESC}

本文の最後(\|\end{document}| の直前)に,以下のように著者紹介を記述する.
%
\begin{quote}
\|\begin{biography}|\\
\|\member{|\<第一著者名\>\|}|\\
\mbox{}\quad\<第一著者の紹介\>\\
\|\member{|\<第二著者名\>\|}|\\
\mbox{}\quad\<第二著者の紹介\>\\
\mbox{}\quad $\ldots\ldots\ldots$ \\
\|\end{biography}|
\end{quote}
%
なお著者が学生会員あるいは非会員の場合は,正会員用の \|\member| の代わりに
下記を用いる.
%
\begin{DESCRIPTION}
\item[学生会員]:\|\stmember{|\<著者名\>\|}|
\item[非会員\phantom{あ}]:\|\nomember{|\<著者名\>\|}|
\end{DESCRIPTION}
%
なお著者紹介は投稿時には出力されない.

\footnotetext{このガイドはファイルを一つにするために
{\TT thebibliography} 環境を用いているが,その中身はBiB{\TeX}で作成したもの
である.
また,このfootnoteは左カラムにマークがあるのにfootnote自体は右カラムに現われ
ている.これは簡単なトリックで実現できる.ソースファイル参照.}
% 67 行上の \footnotemark 参照.

%}{

\subsection{ページ数の見積り}

投稿用スタイルでは1ページが\(35\hbox{字}\times32\hbox{行}=1120\hbox{字}\),
また製版用では\(24\hbox{字}\times46\hbox{行}\times2\hbox{段}=2208\hbox{字}\) 
である.したがって粗い見積りとして,製版時には投稿時の半分のページ数になると
考えることができる.たとえば,このガイドは投稿用では19ページ,製版用では9ペー
ジであるので,ほぼ見積った通りである.

また投稿用のファイルを製版用にするのは簡単であるので,投稿時にあらかじめどの
ように製版されるかを試せば,もっと良い見積りが得られる.

%}{

\section{おわりに}

論文誌の {\LaTeX} 化は10年以上の運用実績があるが,解決されていない問題点も
皆無とはいえない.
これらを著者の方々の御協力を仰ぎつつ,少しでも使いやすく
するための改良を加えていくつもりである.そこで,スタイル・ファイルに関する要
望や意見を,是非
%
\begin{Quote}
\|texnicians@ipsj.or.jp|
\end{Quote}
%
までお寄せいただきたい.また技術的な質問も同じアドレスで受け付けるが,その他
の一般的な質問については
%
\begin{Quote}
\|editt@ipsj.or.jp|
\end{Quote}
%
にお寄せいただきたい.

\begin{acknowledgment}
論文誌の {\LaTeX}化に御協力いただいた三美印刷(株),(株)ウルス,ならびに
試行のためのボランティアをお願いした著者の皆様に,謹んで感謝の意を表する.
\end{acknowledgment}

%}{

\begin{thebibliography}{10}

\bibitem{latex}
Lamport, L.: {\em A Document Preparation System {\LaTeX} User's Guide \&
  Reference Manual}, Addison Wesley, Reading, Massachusetts (1986).
\newblock (Cooke, E., et al.訳:文書処理システム {\LaTeX},アスキー出版局
  (1990)).

\bibitem{total}
伊藤和人\:{\LaTeX} トータルガイド,秀和システムトレーディング (1991).

\bibitem{nodera}
野寺隆志\:楽々 {\LaTeX},共立出版 (1990).

\bibitem{okumura}
奥村晴彦\:{\LaTeX} 美文書作成入門,技術評論社 (1991).

\bibitem{article1}
桜井貴文\:直観主義論理と型理論,情報処理, Vol.~30, No.~6, pp.\ 626--634
  (1989).

\bibitem{article2}
野口健一郎,大谷 真\:OSIの実現とその課題,情報処理, Vol.~31, No.~9, pp.\
  1235--1244 (1990).

\bibitem{article3}
Itoh, S. and Goto, N.: An Adaptive Noiseless Coding for Sources with Big
  Alphabet Size, {\em Trans. IEICE},  Vol.~E74, No.~9, pp.\ 2495--2503 (1991).

\bibitem{article4}
田中{正次},村松 茂,山下 茂\:9段数7次陽的Runge-Kutta法の最適化について,情%
報処理学会論文誌, Vol.~33, No.~12, pp.\ 1512--1526 (1992).

\bibitem{article5}
Abrahamson, K., Dadoun, N., Kirkpatrick, D.~G. and Przytycka, T.: A Simple
  Parallel Tree Contraction Algorithm, {\em J. Algorithms},  Vol.~10, No.~2,
  pp.\ 287--302 (1989).

\bibitem{article6}
田中{正次}ほか\:9段数7次陽的Runge-Kutta法の次数条件式の解について,情報処理学%
会論文誌, Vol.~33, No.~12, pp.\ 1506--1511 (1992).

\bibitem{article7}
Yamakami, T.: Exploratory Session Analysis in the Mobile Clickstream, {\em IPSJ
  Digital Courier},  Vol.~3, pp.\ 14--20 (online), \doi{10.2197/ipsjdc.3.14}
  (2007).

\bibitem{article8}
波多野賢治,絹谷弘子,吉川正俊,植村俊亮\:XML文書検索システムにおける文書内容%
の統計量を利用した検索対象部分文書の決定,電子情報通信学会論文誌D, Vol.~J89-D,
  No.~3, pp.\ 422--431(オンライン),\urlj{http://search.ieice.org/} (2006).

\bibitem{book1}
Foley, J.~D. et al.: {\em Computer Graphics --- Principles and Practice},
  System Programming Series, Addison-Wesley, Reading, Massachusetts, 2nd
  edition (1990).

\bibitem{book2}
千葉則茂,村岡一信\:レイトレーシングCG入門,Information {\&} Computing,
  Vol.~46, サイエンス社 (1990).

\bibitem{book3}
Chang, C.~L. and Lee, R. C.~T.: {\em Symbolic Logic and Mechanical Theorem
  Proving}, Academic Press, New York (1973).
\newblock (長尾真,辻井潤一訳: 計算機による定理の自動証明,
  日本コンピュータ協会 (1983)).

\bibitem{booklet1}
新世代コンピュータ技術開発機構\:第五世代コンピュータプロジェクトの概要,{FGCS%
'92}にて配布 (1992).

\bibitem{inbook1}
Knuth, D.~E.: {\em Fundamental Algorithms}, Art of Computer Programming,
  Vol.~1, chapter~2, pp.\ 371--381, Addison-Wesley, 2nd edition (1973).

\bibitem{incollection1}
Schwartz, A.~J.: Subdividing B{\'e}zier Curves and Surfaces, {\em Geometric
  Modeling: Algorithms and New Trends} (Farin, G.~E., ed.), SIAM, Philadelphia,
  pp.\ 55--66 (1987).

\bibitem{inproceedings1}
Baraff, D.: Curved Surfaces and Coherence for Non-penetrating Rigid Body
  Simulation, {\em SIGGRAPH '90 Proceedings} (Beach, R.~J., ed.), Dallas,
  Texas, ACM, Addison-Wesley, pp.\ 19--28 (1990).

\bibitem{inproceedings2}
Nakashima, H. et al.: OhHelp: A Scalable Domain-Decomposing Dynamic Load
  Balancing for Particle-in-Cell Simulations, {\em Proc.\ Intl.\ Conf.
  Supercomputing}, pp.\ 90--99 (online),
  \doi{http://doi.acm.org/10.1145/1542275.1542293} (2009).

\bibitem{manual1}
Adobe Systems Inc.: {\em PostScript Language Reference Manual}, Reading,
  Massachusetts (1985).

\bibitem{mastersthesis1}
山下義行\:文脈自由文法への否定の導入,修士論文,筑波大学大学院工学研究科
  (1989).

\bibitem{misc1}
斉藤康己,中島 浩\:{{\tt ipsjpapers.sty}} (1995).
\newblock (情報処理学会論文誌用スタイルファイル,論文著者に配布).

\bibitem{phdthesis1}
Weihl, W.: Specification and Implementation of Atomic Data Types, PhD Thesis,
  MIT, Boston (1984).

\bibitem{proceedings1}
Institute for New Generation Computer Technology: {\em Proc. Intl. Conf. on
  Fifth Generation Computer Systems}, Vol.~1 (1992).

\bibitem{techreport1}
Aredon, I.: {\TeX} 独稽古,Seminar on Mathematical Sciences 13, Department of
  Mathematics, Keio University, Yokohama (1989).

\bibitem{unpublished}
情報処理学会論文誌編集委員会\:{\LaTeX}による論文作成のガイド(第1版) (1995).
\newblock (論文著者に配布).

\bibitem{webpage1}
情報処理学会\:コンピュータ博物館設立の提言,情報処理学会(オンライン),\urlj%
{http://www.ipsj.or.jp/03somu/teigen/museum200702.html} \refdatej{2007-02-05}.

\bibitem{webpage2}
情報処理学会論文誌編集委員会\:「情報処理学会論文誌(IPSJ
  Journal)」原稿執筆案内,情報処理学会(オンライン),\urlj{http://www.ipsj.o%
r.jp/08editt/journal/shippitsu/ronbunJ-prms.pdf} \refdatej{2010-10-28}.

\bibitem{webpage3}
Kay, A.: Welcome to Squeakland, Squeakland (online),
  \urle{http://www.squeakland.org/community/biography/alanbio.html}
  \refdatee{2007-04-05}.

\bibitem{webpage4}
Nakashima, H.: A {WEB} Page, Kyoto University (online),
  \urle{http://www.para.media.kyoto-u.ac.jp/~nakashima/a.web.page.of.long.url/}
  \refdatee{2010-10-30}.

\bibitem{webpage5}
Nakashima, H.: Another {WEB} Page, Kyoto University (online),
  \urle{http://www.para.media.kyoto-u.ac.jp/~nakashima/a.web.page.of.much.long%
er.url/} \refdatee{2010-10-30}.

\end{thebibliography}

%}{

\appendix
\section{研究会論文誌用コマンド}\label{sec:app-trans}

各研究会論文誌(トランザクション)には各々に固有のサブタイトル,略称,通番が
ある.製版用原稿では,以下のコマンドを\|\begin{document}|の前に置くことによ
り,これらの情報を与える.
%
\begin{itemize}\item[]
\|\transaction{|\<略称\>\|}{|\<巻数\>\|}{|\<号数\>\|}|
\end{itemize}
%
なお\<略称\>は以下のいずれかであり,\<巻数\>と\<号数\>は学会あるいは研究会論
文誌編集委員会の指示に基づいて与える.
%
\begin{itemize}%{
\item
\|PRO|(プログラミング)
\item
\|TOM|(数理モデル化と応用)
\item
\|TOD|(データベース)
\item
\|ACS|(コンピューティングシステム)
\item
\|CVIM|(コンピュータビジョンとイメージメディア)
\item
\|TBIO|(Bioinformatics)\footnote{%
TBIO, SLDM, CVAは英文論文誌であるので和名はない.}
\item
\|SLDM|(System LSI Design Methodology)\footnotemark[1]
\item
\|CVA|(Computer Vision and Applicaitons)\footnotemark[1]
%
\end{itemize}%}
%
また上記の\<号数\>は発行月とは連動していないので,学会あるいは編集委員会の指
示に基づき発行月を;
%
\begin{itemize}\item[]
\|\setcounter{|{\bf 月数}\|}{|\<発行月\>\|}|
\end{itemize}
%
によって指定する.

この他,以下の各節で示すように,いくつかの論文誌に固有の機能を実現するための
コマンドなどが用意されている.

%}{

\subsection{「プログラミング」固有機能}

「論文誌:プログラミング」には論文以外に,プログラミング研究会での研究発表の
内容梗概が含まれている.この内容梗概は,\|\documentclass|または
\|\documentstyle|のオプションとして\|abstract|を指定した上で,
\ref{sec:config}節の\|\maketitle|までの内容からなるファイル(すなわち本文が
ないファイル)から生成する.なお\|\|{\bf 受付}や\|\|{\bf 採録}は不要であるが,
代わりに発表年月日を;
%
\begin{itemize}\item[]
\|\|{\bf 発表}\|{|\<年\>\|}{|\<月\>\|}{|\<日\>\|}|
\end{itemize}
%
により指定する.

%}{

\subsection{「数理モデル化と応用」固有機能}

「論文誌:数理モデル化と応用」の論文では,受付や採録の日付以外に再受付日付を
記載するように指示されることがある.その場合には;
%
\begin{itemize}\item[]
\|\|{\bf 再受付}\|{|\<年\>\|}{|\<月\>\|}{|\<日\>\|}|
\end{itemize}
%
により指定する.なお複数回の再受付が行われた場合,上記のコマンドを繰り返し使
用する.

%}{

\subsection{「データベース」固有機能}

「論文誌:データベース」の論文の担当編集委員の氏名は;
%
\begin{itemize}\item[]
\|\edInCharge{|\<氏名\>\|}|
\end{itemize}
%
により指定する.

%}{

\subsection{「Bioinformatics」固有機能}

Trans.\ Bioinformatics (TBIO)に固有の機能を利用するためには,\|\documentclass|
(または\|\documentstyle|)のオプションで\|TBIO|を指定する.なおTBIOは英文論
文誌であるので,\|TBIO|オプションの指定によって自動的に\|english|オプション
が指定されたものとみなされる.したがって;
%
\begin{itemize}\item[]
\|\documentclass[TBIO]{ipsjpaper}|
\end{itemize}
%
のように\|english|オプションを省略することができる.またこのオプションの指定
により,以下のコマンドが使用可能となる.
%
\begin{itemize}%{
\item
論文の種別は;
%
\begin{itemize}\item[]
\|\TBIOpapercategory{|\<種別\>\|}|
\end{itemize}
%
を用いて,\|original|, \|survey|, \|database| のいずれかを指定する.この結果,
``{\it Original Paper}'', ``{\it Survey Paper}'' または ``{\it
Database\slash Software Paper}'' のいずれかが先頭ページのタイトルの左上に表
示される.なおこのコマンドが与えられなければ \|original| とみなされる.

\item
担当編集委員の氏名は;
%
\begin{itemize}\item[]
\|\edInCharge{|\<氏名\>\|}|
\end{itemize}
%
により指定する.

\item
査読過程で条件付採録となった論文の再受付日は;
%
\begin{itemize}\item[]
\|\rereceived{|\<年\>\|}{|\<月\>\|}{|\<日\>\|}|
\end{itemize}
%
により指定する.

\end{itemize}%}
%
なお後の2つのコマンドの使用はオプショナルであり,学会あるいは編集委員会から
の情報提供や指示がなければ省略しても構わない.

%}{

\section{研究報告の作成}\label{sec:app-sig}
研究報告が完全オンライン化されたことに伴い,学会のフォーマットに準拠した掲載
版PDF作成が著者の責務となった.この掲載版は \|\documentclass| のオプションに
\|techrep| を指定することで簡単に作成できる.ただし各ページ右下隅の著作権表示
部分に印字される西暦年を,研究報告掲載日に応じてカウンタ\textbf{年数}(または
\|year|)に \|\setcounter| を用いて設定する必要があることに注意されたい%
%
\footnote{%
プリアンブルでカウンタが設定されていない場合には警告メッセージが表示され,
\LaTeX の実行日に基づく値が設定される.}.
%
この他,ジャーナル/トランザクションの製版用では表示される著者紹介および受付・
採録日等は,仮に指定されていても表示されないことにも注意されたい.

%}{

\begin{biography}
\member{中島 浩}
昭和31年生.
昭和56年京都大学大学院工学研究科情報工学専攻修士課程修了.
同年三菱電機(株)入社.
推論マシンの研究開発に従事.
平成4年より京都大学工学部助教授.
平成9年より豊橋技術科学大学教授.
平成18年より京都大学教授.
並列計算機のアーキテクチャ,プログラミング言語の実装方式に関する研究に従事.
工学博士.昭和63年元岡賞,平成5年坂井記念特別賞受賞.IEEE-CS, ACM, ALP, TUG
各会員.
%
\member{斉藤 康己}
昭和28年生.
昭和53年英国エセックス大学よりM.Sc.(AI研究).
昭和54年東京大学大学院工学系研究科情報工学専攻修士課程修了.
同年電電公社入社.
昭和59年から60年にかけて仏国INRIA客員研究員.
現在NTT基礎研究所主幹研究員.
人工知能(Symbol Grounding Problem),計算機ソフトウェア(\TeX の日本語化),
認知科学(理解プロセスの解明)などの研究に従事.
訳書に『メタマジック・ゲーム』(D. ホフスタッター著, 共訳, 白揚社)など.
人工知能学会,ソフトウェア科学会,日本認知科学会,Cognitive Science Society,
TUG各会員.
\end{biography}
\end{document}