(57)【要約】ループ処理動作中、ＳＩＭＤプロセッサ内のプロセッサデータパスを動作可能にするか否かを制御するための方法。方法が使用する情報は、上記データ項目とメモリ（２０）間の割当て、群のサイズ、ループ処理動作中のデータパスの残りのパラレルループパスの数を含む。一群のデータ項目を処理する間、複数のプロセッサデータパスのうちの１つの動作可能を指定するループ処理命令を含むコンピュータ命令（１２）も提供される。該命令は、群を処理する残りのパラレルループパスの数を指定するカウントフィールド、及び群を処理するシリアルループパスの数を指定するカウントフィールドを有する。パラレルデータパスへの動作回数の異なる割当てを処理するために、異なる命令を使用することができる。上記命令は、また、データパス（１８）の全数に関する情報も使用する。
2004513455.tif 000002
【特許請求の範囲】
【請求項１】
データ素子の群を処理しているＳＩＭＤプロセッサ内の複数のプロセッサデータパスのうちの１つを動作可能にするか否かを制御するための方法であって、
前記ＳＩＭＤプロセッサ及び前記群のパラメータに関する情報と、前記データパスの前記群のデータ項目に関する処理状態とに基づいて、前記データパスを動作可能にするか否かを決定するステップを有する方法。
【請求項２】
前記情報は前記データ項目とメモリ間の割当てを含む、請求項１に記載の方法。
【請求項３】
前記情報は前記割当てが、ユニティストライドか、隣接ストライドか、又はストライプストライドであるか否かを含む、請求項２に記載の方法。
【請求項４】
前記情報は前記データパスが行っているループ処理動作のパラレルループパスの全数を含む、請求項１に記載の方法。
【請求項５】
前記情報は前記群のサイズを示す請求項１に記載の方法。
【請求項６】
前記処理状態は、前記ループ処理動作における残りのパラレルループパスの数である、請求項１に記載の方法。
【請求項７】
前記情報は前記プロセッサデータパスの数を含む請求項１に記載の方法。
【請求項８】
前記情報は、前記データパスとメモリとの間の割当て、前記データパスにより行われているループ処理動作のパラレルループパスの全数、前記群のサイズ、前記ループ処理動作中の前記データパスにおける残りのパラレルパスの数、及び前記プロセッサデータパスの数を含む、請求項１に記載の方法。
【請求項９】
前記データ項目とメモリ間との前記割当てはユニティストライドである請求項８に記載の方法。
【請求項１０】
ループパスの全数は、シリアルループパスの全数を、実行したデータパスの全数で割った商を次の整数に切り上げることによって決定される請求項９に記載の方法。
【請求項１１】
動作可能にするステップは、パラレルループパスの全数から残りのパラレルループパスの数を引いた合計に、実行したデータパスの全数にデータパスの数を加えた合計を掛けた積がシリアルループパスの全数より少ないか否かを決定するステップを含む、請求項１０に記載の方法。
【請求項１２】
前記データ項目とメモリとの間の前記割当ては隣接ストライドである、請求項８に記載の方法。
【請求項１３】
パラレルループパスの全数はシリアルループパスの全数をデータパスの数で割った商を次の整数に切り上げることにより決定される、請求項１２に記載の方法。
【請求項１４】
動作可能にするステップは、パラレルループパスの数にデータパスの数を掛けた合計に、パラレルループパスの数から残りのパラレルループパスの数を引いた合計を加えた数が、シリアルループパスの全数より小さいか否かを決定するステップを含む、請求項１３に記載の方法。
【請求項１５】
前記割当てはストライプストライドである、請求項８に記載の方法。
【請求項１６】
動作可能にするステップは、パラレルループパスの全数にデータパスの数を掛けた合計に、パラレルループパスの数から残りのパラレルループパスの数を引いた合計を加えた数が、シリアルループパスの全数より小さいか否かを決定するステップを含む、請求項１５に記載の方法。
【請求項１７】
一群のデータ項目の処理の間に、複数のプロセッサデータパスのうちの１つを動作可能にすることを指示するループ処理命令からなるコンピュータ命令。
【請求項１８】
前記群を処理する残りのパラレルループパスの数を指示するシリアルカウントフィールドをさらに有する、請求項１７に記載の命令。
【請求項１９】
前記群を処理するシリアルループパスの数を指示するパラレルカウントフィールドをさらに有する、請求項１７に記載の命令。
【請求項２０】
レジスタファイルと、
同レジスタファイルに接続している算術論理演算装置と、一群のデータを処理する間に前記プロセッサに対して複数のプロセッサデータパスのうちの１つを動作可能にさせるループ処理命令を記憶するプログラム制御記憶装置とを含むプロセッサ。
【発明の詳細な説明】
【０００１】
（発明の技術分野）
本発明は、単一命令多重データ処理（ＳＩＭＤ）プロセッサアーキテクチャにおける一群のデータ項目に対するループ処理動作に関する。
【０００２】
（発明の背景）
パラレル処理は、一群のデータ項目を処理する効率的な方法である。ＳＩＭＤプロセッサは、多重データパスを単一の命令によって制御するパラレルプロセッサアレーアーキテクチャである。各データパスは、所与の時間に１つのデータ項目を処理する。簡単な例を挙げると、４つのデータパスを有するＳＩＭＤプロセッサにおいては、データ項目の群にある８つのデータ項目は、２回のループ動作中に４つの各データパス内で処理される。データパスとデータ項目間の割当ては多様であり得るが、あるアプローチの場合には、１番目のループ動作中に、群のうち、第１のデータ項目が第１のデータパスで処理され、第２のデータ項目は第２のデータパスで処理され、第３のデータ項目は第３のデータパスで処理され、第４のデータ項目は第４のデータパスで処理される。２番目のループ動作中には、第５のデータ項目は第１のデータパスで処理され、第６のデータ項目は第２のデータパスで処理され、第７のデータ項目は第３のデータパスで処理され、第８のデータ項目は第４のデータパスで処理される。
【０００３】
一群にあるデータ項目の数がデータパス数の整数倍でない場合には、種々の問題が発生する場合がある。例えば、上記の簡単な例を、４つのデータパスにおいて、７つのデータ項目を有する群があった場合に修正すると、第２のループ動作中には、第４のデータパスは、群の８番目の項目に処理すべき要素を有しないことになる。その結果、第４のデータパスは、第４のデータパスが、第２のループ動作中に動作不能になっていない限り、メモリ内の他のデータ構造体上に誤って重ね書きをする恐れがある。
【０００４】
このような誤った重ね書きを防止する１つの方法は、群のサイズ、すなわち、群に含まれるデータ項目の数を強制的にデータパスの数の整数倍にするという方法である。このようなアプローチは、プログラマーが先験的に、群にあるデータ項目の割り当て方法を制御できると仮定しなければ成立しない。しかし、プログラマーは常にこのような制御を行うことができるわけではない。
【０００５】
通常ＳＩＭＤプロセッサ内の各データパスは、データパスを動作可能にしたり、動作不能にしたりできる対応プロセッサイネーブルビットを有する。それにより、例えば、そうしない場合にはデータパスがその群をオーバランするときには、データパスを動作不能にすることができる。
【０００６】
（発明の概要）
本発明は一般的な態様において、一群のデータ素子を処理しているＳＩＭＤプロセッサ内の複数のプロセッサデータパスのうちの１つを動作可能にするか否かを制御するための方法に関し、ＳＩＭＤプロセッサ及び群のパラメータに関する情報、及び一群のデータ項目に関するデータパスの処理状態に基づいて、データパスを動作可能にするか否かを決定するステップを有する。
【０００７】
好適な実施形態の場合には、情報は、データ項目とメモリとの間の割当て、データパスが行っているループ処理動作でのパラレルループパスの全数、群のサイズ、及びデータパスの数（すなわち、ＳＩＭＤプロセッサ内に存在するデータパスの数）を含む。処理状態とは、ループ処理動作のデータパスの残りのパラレルパスの数である。
【０００８】
データ項目とメモリ間との割当ては、ユニティストライドであっても、隣接又はストライプストライドであってもよい。
他の態様においては、本発明は、一群のデータ項目を処理する間に、複数のプロセッサデータパスのうちの１つを動作可能にするように指示するループ処理命令を含むコンピュータ命令である。
【０００９】
命令は好適な実施形態において、群を処理する残りのパラレルループパスの数を指示するパラレルカウントフィールド、及びデータの群を処理するシリアルループパスの数を指定するシリアルカウントフィールドを含む。
【００１０】
他の態様においては、本発明は、レジスタファイルと、レジスタファイルに接続している算術論理演算装置と、一群のデータの処理中にプロセッサに複数のプロセッサデータパスのうちの１つを動作可能にさせるループ処理命令を記憶するプログラム制御記憶装置とを有したプロセッサである。
【００１１】
本発明の種々の態様の実施形態は下記の利点の１つ以上を有し得る。
データパスは、群にあるデータ項目の数を予め知っていなくても動作不能にすることができる。
【００１２】
この方法は、種々のメモリ割当てスキームにも容易に適用可能である。
ループ処理命令を使用すれば命令メモリを節約することができる。何故なら、データパスを動作可能にしたり、動作不能にしたりするのに必要な多くの動作を、レジスタ空間を節約する簡単で強力な１つの命令で指定することができるからである。
【００１３】
ループ処理命令を使用すれば、プログラマーは、一群のデータ項目にあるデータ項目数を強制的にデータパスの数の整数倍にする必要がなくなる。
本発明の他の機能及び利点は、以下の詳細な説明及び図面、及び請求項を読めば理解することができるだろう。これら図面の類似の参照符号は、類似の素子を示す。
【００１４】
（発明の詳細な説明）
図１を参照する。単一命令多重データパス（ＳＩＭＤ）プロセッサ１０は、命令キャッシュ１２、制御ロジック１４、シリアルデータパス、及び多数のパラレルデータパス１８ａ，１８ｂ，１８ｃ，１８，．．．１８ｎを有する。シリアルデータパス１８は、メモリ２０に書き込みを行う。各データパス１８は、対応するプロセッサイネーブル（ＰＥ）ビット２２を含む。より詳細に説明すると、パラレルデータパス１８ａはＰＥビット２２ａに関連付けられ、シリアルデータパス１８ｂは、ＰＥビット２２ｂに関連付けられている。以下同様。ＰＥビットが動作可能になると、その対応パラレルデータパスが動作可能になり、そのパラレルデータパスによりデータ項目を書き込み得る。例えば、ＰＥビット２２ａが動作可能になると、パラレルデータパス１８ａによりデータ項目を書き込むことができる。ＰＥビット２２ｂが動作可能になると、パラレルデータパス１８ｂによりデータ項目を書き込むことができる。ＰＥビット２２ｎが動作可能になると、パラレルデータパス１８ｎによりデータ項目を書き込むことができる。あるＰＥビットが動作不能になると、その対応パラレルデータパスが動作不能になり、そのパラレルデータパスによりデータ項目を書き込むことができなくなる。
【００１５】
動作中制御ロジック１４は、命令キャッシュ１２から命令を取り出す。命令は、その命令をデータパス１８に供給するシリアルデータパス１６に送られる。各データパス１８は、プロセッサイネーブルビットが、特定のデータパスに対して動作不能にならない限り、一緒に読み出され、一緒に書き込まれる。
【００１６】
未使用のデータパスが群の最後でオーバーランし、メモリ内の他のデータ構造体上に誤って書き込まれることを防止するために、一群のデータ項目のループ処理動作中、１つ以上のデータパス１８を動作不能にすべき場合がある。ループ処理動作中にデータパスを動作可能にするのか、動作不能にするのかを手動で行うのではなく、このような決定をＳＩＭＤプロセッサ及び群のパラメータに関する情報、及び群に在るデータ項目に関するデータパスの処理状態に基づいて、ループ処理動作の進行中に行うことができる。この情報は下記のものを含む。すなわち、（１）ループ処理動作中に発生するパラレルループパスの全数、（２）（群の大きさを示す）シリアルデータパス設計で行うループパスの数、（３）ループ処理動作中に発生する残りのパラレルパスの数、（４）データパス間でその群に在るデータ項目を割り当てるために使用するメモリ割当て、及び（５）パラレルデータパスの数。この情報に基づいて、ループ処理中に、あるデータパスに対するプロセッサイネーブルビットを動作可能又は動作不能にし（それにより、データパスを動作可能又は動作不能にする）命令が供給される。
【００１７】
ＳＩＭＤプロセッサで一群のデータ項目を処理するためにメモリを割り当てるには多くの方法がある。最も簡単なメモリ割当ては、多数のデータパスのうちの１つ（ＮＤＰ）が、ループのＮＤＰ番目の反復をとるという方法である。このタイプのメモリ割当ては、「ユニティストライド」と呼ばれる。
【００１８】
図２を参照する。この図は、例えば、１つの群にある３０のデータ項目０〜２９が、ユニティストライドのメモリ割当てのループ処理中に、４つのデータパスＤＰ０，ＤＰ１，ＤＰ２，ＤＰ３を有するＳＩＭＤプロセッサによってどのように処理されるのかを示す表である。群を処理するために、８つのパラレルループパス動作が実行される。パラレルループパス動作１中に、データ項目０，，２，３が、データパス０，１，２，３により処理される。パラレルループパス動作２中に、データ項目４，５，６，７が、データパス０，１，２，３により処理される。最後のパラレルループパス動作であるパラレルループパス動作８中に、データ項目２８，３０が、データパス０，１により処理され、一方、群のオーバラン及びメモリ内に記憶している他のデータ上への重ね書きを防止するために、データパス２，３を動作不能にしなければならない。
【００１９】
図２の表は、なぜこのタイプのメモリ割当てがユニティストライドと呼ばれるのかを示す。任意の所与のパラレルループパス動作中に、各パラレルデータパス内で処理されるデータ項目間の「ストライド」は１である。すなわち、あるパラレルループパス動作中にパラレルデータパスにより処理される任意の２つのデータ項目間の差は、１（又はユニティ）である。
【００２０】
ユニティストライド割当ての場合には、多数のデータ項目を処理中に、あるパターンが現れる。より詳細に説明すると、このパターンは、最後のパラレルループパス動作中には、２つのデータパスだけを動作不能にするだけでよいことを示している。（明らかに、図２のパターンは、重要ではない。何故なら、データパスの数及び群のサイズが増大し、パターンは複雑になり、タイムリーに識別できなくなるからである。）このパターンと、（群のサイズを示す）パラレル機械で実行するループ処理の全数と、残りのパラレルループパスの数と、そしてデータパスの数から、特定のパラレルループパス動作中に特定のデータパスを動作不能にするかどうかを決定するために命令が提供される。
【００２１】
図３を参照する。ループプロセッサイネーブル命令３０は、ループ処理動作中の残りのパラレルループパス数を表すフィールドＣ、及びパラレル機械アーキテクチャの群に在るすべてのデータ項目にサービスを提供するために必要な処理動作の全数を表すフィールドＬを含む。命令３０は、メモリ割当て指定ｘを含む。図２のところで説明した例の場合には、メモリ割当て指定ｘは、ユニティストライドメモリ割当て、すなわちＵと呼ばれる。Ｌ＝３０である。何故なら、パラレル機械アーキテクチャには、３０回のループ処理動作を必要とする３０のデータ項目があるからである。ＰＥ［ｉ，ｊ］は、パラレルループパス動作ｊ中のデータパスｉに対するプロセッサイネーブルビットの状態を表す。
【００２２】
図２のところで説明したユニティストライドの例の場合には、パラレルループパスの全数は、シリアルループパスの全数をデータパスの数で割り、切り上げて、次の整数にすることにより決定される。そのためこの例の場合にはパラレルループパスの全数は３０／４であり、切り上げして整数８になる。
【００２３】
ユニティストライドの例に示すパターンからの知識、及びＣ，Ｌの値により、データパス指数ｉに関連するプロセッサイネーブルビットは、データパス及びデータ項目ｊを表す。すなわち、パラレルループパスの全数から残りのパラレルループパスの数を引いたものすべてに、データパス数にデータパス指数を加えた合計を掛けた数が、シリアルループパスの全数より少ない場合には、ＰＥ［ｉ，ｊ］が動作可能になる。
【００２４】
他の方法としては、ＳＩＭＤプロセッサ１０は、隣接ストライド・メモリ割当てを使用することもできる。図４について説明すると、この表は、１つの群にある３０のデータ項目（０〜２９）が、４つのデータパス（ＤＰ０〜ＤＰ３）を有するＳＩＭＤプロセッサ１０によってどのように処理されるのかを示し、また隣接ストライド・メモリ割当ての実行を示す表である。群にある３０すべてのデータ項目を処理するために、パラレル処理が８回行われる。パラレルループパス動作１の場合には、データ項目０，８，１６，２４は、データパス０，１，２，３によりそれぞれ処理される。パラレルループパス動作２の場合には、データ項目１，９，１７，２５は、データパス０，１，２，３により処理される。処理を続行すると、あるパターンが形成される。この特定の例の場合、パラレルループパス動作７，８中に、群に在る３０のデータ項目の終わりをオーバランして、メモリに重ね書きが行われるのを防止するために、データパス３を動作不能にする必要がある。各処理動作中、すべての他のデータパスは動作可能になる。
【００２５】
隣接ストライド・メモリ割当ては、特定のデータ項目を処理する場合に、隣接するデータ項目を使用する時に役に立つ。例えば、データパス０がパラレルループパス５内でデータ項目４を処理している場合には、データパス０は、パラレルループパス動作４からデータ項目３をすでに入手していて、次のパラレルループパス動作で、データ項目５を使用する。このメモリ割当ては、隣接ストライド割当てと呼ばれる。何故なら、各データパスが、群の隣接する領域にアクセスしているからである。
【００２６】
隣接ストライド・メモリ割当ての場合、この例の場合には、最後の２つのパラレルループパス動作の実行中、１つのデータパスを動作不能にしなければならないことを示唆するパターンが出現する。再度、図３について説明すると、メモリ割当て指定ｘ＝ＣＯＮＴは、隣接ストライド割当てスキームを示す。図４のところで説明した例の場合には、一群のデータ項目を処理するために必要なパラレルループパスの全数は、シリアルループパス動作をデータパスの数で割り、次の整数に切り上げすることにより決定される。それ故、この例においては、パラレルループパスの全数は３０／４に等しく、切り上げすると８になる。
【００２７】
隣接ストライド・メモリ割当てパターン、及びＣ，Ｌの値により、パラレルループパスの数にデータパス指数を掛けた合計に、パラレルループパスの数から残りのパラレルループパスの数を引いた合計が、シリアルループパスの全数より少ない場合には、データパス指数ｉ及びデータ項目ｊに関連するプロセッサイネーブルビット、すなわち、ＰＥ［ｉ，ｊ］が動作可能になる。
【００２８】
インターリーブしたメモリシステムを使用すれば、多数のメモリに一度にアクセスすることができる。インターリーブしたメモリシステム内のメモリバンクＭの数は、通常、２の冪乗である。何故なら、２の冪乗であれば、最低のアドレスビットによりメモリバンクを選択することができるからである。読出し又は書込み命令のストライドも、２の冪乗である場合には、メモリインターリービングは役に立たない。何故なら、すべてのアドレスが、同じメモリバンクにアクセスしようとするからである。例えば、Ｍ＝４であり、ストライドも４である場合には、読出し又は書込みのためのアドレスは、０，４，８，．．．となり、これらのすべてのアドレスをバンク０で処理しなければならないことになり、バンク１、２及び３はアイドル状態になる。
【００２９】
すべてのデータ項目が同じメモリバンク内で処理されるのを避けるために、ストライド値を奇数に選択することができる。ストライド値を奇数に選択すると、Ｍが２の冪乗である場合には、Ｍ個のバンク内でアドレスの間隔が均等になる。何故なら、すべての奇数及び２の冪乗は相互に素数であるからである。３０個の要素がある群の場合には、ストライドは９であり、隣接割当てのように８にはならない。データパス０は、群の要素０〜８に対応し、データパス１は、群の要素９〜１７に対応し、データパス２は、要素１８〜２６に対応し、データパス３は、群の要素２６〜２９に対応する。データパス３は、最後の６つの要素、すなわち、群の要素３０〜３５に対してオフになる。このメモリ割当ては、ストライプド・メモリ割当てと呼ばれる。
【００３０】
ストライプストライド・メモリ割当ての一群のデータ項目を処理するために必要なパラレルループパスの数は、シリアルデータパスの全数をデータパスの数で割り、次の奇数の整数に切り上げすることにより決定される。
【００３１】
再度図３について説明すると、メモリ指定ｘ＝Ｓは、ストライプストライド割当てを表す。データパスｉ及びデータ項目ｊに関連するプロセッサイネーブルビット、すなわち、ＰＥ［ｉ，ｊ］は、パラレルループパスの全数にデータパス指数を掛け、パラレルループパスの全数を加え、残りのパラレルループパスの数を引いたものがシリアルループパスの全数より小さい場合に、動作可能になる。
【００３２】
図５について説明すると、この図は、ループ分岐命令７０と結合しているループプロセッサイネーブル命令を示す。この組み合わせ命令７０は、メモリ割当てスキーム、パラレルループパスの全数、及び残りのパラレルループパスの数により、プロセッサイネーブルビットを上記のようにセットし、残りのパラレルループパスの数がゼロである場合には試験を行う。残りの処理動作の数がゼロより大きい場合には、次のループ処理動作を行うために分岐が行われる（すなわち、「ＰＣ＋変位に行く」）。そうでない場合には、ループから抜け出て、続けて処理が行われる。いずれの場合も、残りのパラレルループパスの数は減少し、ループ処理動作が継続して行われる。
【００３３】
図６について説明すると、ループ処理中に、ＳＩＭＤプロセッサでのデータパスを動作可能にするかどうかを制御するプロセス１００は、群にあるすべてのデータ項目にサービスを提供するためのシリアルループパスの数を決定する（１０２）。このプロセスは、群にサービスを提供するための残りのパラレルループパスの数を決定する（１０４）。次にこのプロセスは、メモリ割当てスキームが、ユニティストライド割当てであるかどうか試験する。メモリ割当てがユニティストライド割当てである場合であって、パラレルループパスの数から残りのパラレルループパスの数を引いた合計に、データパスにデータパス指数を加えた合計を掛けた数が、シリアルループパスの全数より少ない場合には、データ項目にサービスを供給しているデータパスに対するプロセッサイネーブルビットが動作可能になる（１０８）。
【００３４】
メモリ割当がユニティストライドでない場合には、メモリ割当てスキームが、隣接ストライド割当てであるかどうかの試験が行われる（１１０）。メモリ割当てが隣接ストライド割当てであって、パラレルループパスにデータパス指数を掛けた合計に、パラレルループパスの数から残りのパラレルループパスの数を引いた合計を加えた数がシリアルループパスの全数より少ない場合には、データ項目にサービスを供給しているデータパスに対するプロセッサイネーブルビットが動作可能になる（１１２）。
【００３５】
最後に、メモリ割当てが、ユニティストライドでも、隣接ストライドでもない場合には、プロセスは、メモリ割当てスキームがストライプド・メモリ割当てであるかどうかの試験を行う（１１４）。メモリ割当てが、ストライプストライド割当てであって、パラレルループパスの数にデータパス指数を掛けた合計に、パラレルループパスから残りのパラレルループパスの数を引いた合計を加えた数が、シリアルループパスの全数より少ない場合には、データ項目にサービスを供給しているデータパスに対するプロセッサイネーブルビットが動作可能になる（１１６）。
【００３６】
本発明の多数の実施形態について説明してきた。しかし、本発明の精神及び範囲から逸脱することなしに種々の変更を行うことができることを理解することができるだろう。例えば、より多数のデータ項目を処理するために使用したメモリ割当てスキームにより、パターンが形成されるまで参照テーブルを使用することができる。パターンが形成された場合には、データパスを能動するかどうかは、上記方法により決定される。それ故、他の実施形態も、特許請求の範囲内に含まれる。
【図面の簡単な説明】
【図１】単一命令多重データパス（ＳＩＭＤ）プロセッサのブロック図。
【図２】１つの群にあるの３０のデータ項目が、メモリのユニティストライド割当てのループ処理中に、４つのデータパスを有するＳＩＭＤプロセッサによってどのように処理されるのかを示す表。
【図３】ループ処理命令の構文。
【図４】１つの群にある３０のデータ項目が、メモリの隣接ストライド割当てのループ処理中に、４つのデータパスを有するＳＩＭＤプロセッサによってどのように処理されるのかを示す表。
【図５】ループ分岐と結合したループ処理命令の構文。
【図６】ループ処理中に、ＳＩＭＤプロセッサでのデータパスを動作可能にするかどうかを制御するプロセスのフローチャート。
【図１】
2004513455.tif 000003
【図２】
2004513455.tif 000004
【図３】
2004513455.tif 000005
【図４】
2004513455.tif 000006
【図５】
2004513455.tif 000007
【図６】
2004513455.tif 000008
【国際公開パンフレット】
2004513455.tif 000009
2004513455.tif 000010
2004513455.tif 000011
2004513455.tif 000012
2004513455.tif 000013
2004513455.tif 000014
2004513455.tif 000015
2004513455.tif 000016
2004513455.tif 000017
2004513455.tif 000018
2004513455.tif 000019
2004513455.tif 000020
2004513455.tif 000021
2004513455.tif 000022
2004513455.tif 000023
2004513455.tif 000024
2004513455.tif 000025
2004513455.tif 000026
2004513455.tif 000027
【国際調査報告】
2004513455.tif 000028