(57)【要約】【課題】  予測テーブルを参照して予測を行い、予測テーブルを更新する値予測装置および方法に関し、予測の結果が確定して予測テーブルが更新される前に、同一のエントリに対する連続した予測の要求が呈示された場合に、正しい予測を行うことを目的とする。【解決手段】  予測の処理が完了していない予測の履歴を保持する予測履歴保持手段５と、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とを比較し、両方の識別子が一致する回数を計数する計数手段６とを備え、予測回路１が、予測回路の出力値を更新回路２に送出し、この更新回路は、予測回路の出力値を用いて予測テーブルの状態を仮想的に更新し、この予測テーブルの状態を予測回路に返送し、予測回路は、仮想的に更新された予測テーブルの状態を用いて再度予測の処理を行い、両方の識別子が一致する回数に応じて、予測回路および更新回路の動作を繰り返すように構成される。【選択図】      図２
2006309335.tif 000002
【特許請求の範囲】
【請求項１】
予測の対象であるエントリが入力される度に、前記エントリの識別子に基づいて予測テーブルに既に保存されているデータを参照し、前記データの値の予測を行う予測回路と、前記予測回路による予測の処理が完了した時点で、前記予測回路の出力値を予測値として前記予測テーブル内の対応するデータの値を更新する更新回路とを有する値予測装置において、
予測の処理が現在進行中で完了していない予測の履歴を一時的に保持する予測履歴保持手段と、
前記予測の履歴に含まれる識別子と、前記予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数する計数手段とを備え、
前記両方の識別子が一致する回数が存在する場合、前記予測回路は、前記予測の処理を行って得られる前記予測回路の出力値を前記更新回路に送出し、前記更新回路は、前記予測回路の出力値を用いて前記予測テーブルの状態を仮想的に更新し、仮想的に更新された前記予測テーブルの状態を前記予測回路に返送し、前記予測回路は、仮想的に更新された前記予測テーブルの状態を用いて再度予測の処理を行い、
前記両方の識別子が一致する回数に応じて、前記予測テーブルを実際に更新することなく前記予測回路および前記更新回路の動作を繰り返し、これによって得られる前記予測回路の出力値を最終的な予測値とすることを特徴とする値予測装置。
【請求項２】
前記両方の識別子が一致する回数が存在しない場合、前記予測回路は、一回だけ前記予測の処理を行い、これによって得られる前記予測回路の出力値を最終的な予測値とすることを特徴とする請求項１記載の値予測装置。
【請求項３】
前記両方の識別子が一致する回数が２以上である場合、前記予測回路および前記更新回路の動作が繰り返される間、仮想的に更新された前記予測テーブルの状態を一時的に保持するバッファ回路を設けることを特徴とする請求項１記載の値予測装置。
【請求項４】
請求項１から３のいずれか一項に記載の値予測装置と、複数のプロセッサとを有するマルチプロセッサシステムにおいて、
単一のスレッドのプログラムを複数のスレッドに分割し、前記複数のプロセッサによりスレッド単位の値予測による値投機実行を行う場合、前記複数のプロセッサにより処理されるべき前記複数のスレッドが前記エントリとして前記値予測装置に入力されるときに、前記複数のスレッドが前記値予測装置に入力される順番が入れ替わっても、それぞれの前記スレッドに対して正しい値予測を行うことが可能であることを特徴とするマルチプロセッサシステム。
【請求項５】
入力されるエントリの識別子をもとに予測テーブルに既に保存されているデータを参照して前記データの値の予測を行い、前記予測の処理が完了した時点で、前記予測の処理結果として得られる値を予測値として前記予測テーブル内の対応するデータの値を更新するための値予測方法において、
予測の処理が現在進行中で完了していない予測の履歴を一時的に保持するステップと、
前記予測の履歴に含まれる識別子と、前記予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数するステップと、
前記両方の識別子が一致する回数が存在する場合、前記予測の処理結果として得られる値を用いて前記予測テーブルの状態を仮想的に更新し、仮想的に更新された前記予測テーブルの状態を用いて再度予測の処理を行うステップと、
前記両方の識別子が一致する回数に応じて、前記予測テーブルを実際に更新することなく前記予測の処理を繰り返し、これによって得られる値を最終的な予測値とするステップとを有することを特徴とする値予測方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、予測の要求に応じて入力されるエントリ（事象）の識別子（通常、ＩＤと略記される）をもとに予測テーブルを参照してデータの値の予測を行い、予測テーブルを更新する機能を有する値予測装置に関する。
【０００２】
また一方で、本発明は、当該値予測装置を使用してスレッド単位の値投機実行を行うマルチプロセッサシステム、および、予測の要求に応じて入力されるエントリの識別子をもとに予測テーブルを参照してデータの値の予測を行うための値予測方法に関する。
【背景技術】
【０００３】
一般に、コンピュータシステムの性能向上を図るために、プロセッサ等のデータ処理装置においては、入力されるエントリの内容に応じて対応するデータの値を前もって予測する機能を備えた値予測装置（値予測器とも呼ばれる）が設けられている。この値予測装置は、通常、予測テーブルを参照してデータの値を予測を行い、予測の成否が確定した時点で予測テーブルを更新するという構造になっている。このような構造の値予測装置は、通常、データ処理装置と共に、ＬＳＩ（大規模集積回路）等の半導体集積回路により作製される。
【０００４】
図１は、従来の値予測装置の構成を示すブロック図である。ただし、ここでは、プロセッサ等のデータ処理装置に使用される従来の値予測装置１００の構成を簡略化して示す。
【０００５】
図１の従来の値予測装置１００は、基本的に、予測の要求に応じて入力されるエントリの識別子（図１のＩＤ）をもとに予測テーブル３０を参照して対応するデータの値の予測を行う予測回路１と、この予測回路１による予測の成否が確定した時点で、上記予測回路１の出力値を予測値ＰＶとして予測テーブル３０内の対応するデータの値を更新する更新回路２とを備えている。
【０００６】
ここで、予測テーブル３０は、通常、ＲＡＭ（Random Access Memory：ランダム・アクセス・メモリ）等の予測テーブル保持部３に内蔵されている。予測回路１による予測が成功したか否かが確定して予測の処理が完了した時点で、予測回路１から出力される予測値ＰＶに対応する更新値ＲＶが更新回路２に送出され、この更新回路２の更新の処理によって予測テーブル３０内の対応するデータの値が更新される（すなわち、更新値ＲＶによって対応するデータの値が書き替えられる）ようになっている。
【０００７】
さらに、図１の値予測装置１００は、入力されるエントリの識別子（ＩＤ）に基づいて予測テーブル３０を参照するためのインデックスを生成するハッシュ回路４を備えている。このハッシュ回路４では、入力されるエントリの識別子に基づいて、当該エントリに関するデータが予測テーブル３０のどのアドレスに格納されているかを示すインデックスが生成される。
【０００８】
図１の値予測装置１００において、予測回路１および更新回路２の機能は、通常、コンピュータシステムの各種の制御を行うＣＰＵ（Central Processing Unit：中央演算処理装置）１２により実現される。さらに、このＣＰＵ１２においては、ＲＯＭ（Read-only Memory：リード・オンリ・メモリ）またはＲＡＭ等の記憶部１４が設けられている。この記憶部１４は、予測回路１および更新回路２の機能を実行するためのプログラムを含む各種のプログラムが予め格納されている。なお、上記のＲＯＭまたはＲＡＭとして、ＣＰＵ１２に内蔵のＲＯＭやＲＡＭを用いることも可能である。
【０００９】
さらに、図１の値予測装置１００は、この値予測装置１００を含むコンピュータシステムの各種の制御を行うＣＰＵ（Central Processing Unit ：中央演算処理装置）１２が設けられている。さらに、このＣＰＵ１２においては、ＲＯＭ（Read-only Memory：リード・オンリ・メモリ）またはＲＡＭ等の記憶部１４が設けられている。この記憶部１４には、コンピュータシステムの各種の制御を行うためのプログラムが予め格納されている。なお、上記のＲＯＭまたはＲＡＭとして、ＣＰＵ１２に内蔵のＲＯＭやＲＡＭを用いることも可能である。
【００１０】
上記の予測回路１および更新回路２は、通常、演算回路やレジスタ等を含むハードウェア回路により構成される。しかしながら、予測回路１および更新回路２の機能をＣＰＵ１２により実現することも可能である。この場合は、前述のような予測回路１および更新回路２の機能を実行するためのプログラムが、記憶部１４に格納されている。ＣＰＵ１２により記憶部１４から当該プログラムを読み出して実行させることによって、予測回路１および更新回路２の機能がソフトウェアにより実現されることになる。
【００１１】
前述のように、図１の従来の値予測装置１００では、入力されるエントリの識別子をもとに予測テーブル３０を参照して対応するデータの値の予測を行い、予測結果が確定して予測の処理が完了した時点で、予測回路１の出力値を予測値ＰＶ（すなわち、更新値ＲＶ）として予測テーブル３０内の対応するデータの値を更新するような構造になっている。
【００１２】
それゆえに、入力されるエントリの識別子をもとに予測テーブル３０を参照してデータの値の予測を行い、予測結果が確定して予測テーブル３０が更新される前に、続けて同一のエントリに対して予測を行おうとする場合には、予測テーブル３０内の対応するデータの値が更新されていないという事態が生ずる。この場合、予測テーブル３０内のデータの値が更新後の適切な値になっていないので、同一のエントリに対して正しい予測を行うことができないという問題が発生する。
【００１３】
換言すれば、従来の値予測装置では、１回目の予測の要求に応じて入力されるエントリに対する予測を行うタイミングと、予測結果が確定して予測テーブルを更新するタイミングとの間の期間では、同一のエントリに対する２回目またはそれ以上の予測の要求がなされても正しい予測を行うことができないようになっている。したがって、従来の値予測装置では、入力されるエントリに対し予測テーブルを参照して予測動作を実行した後に、予測テーブルを更新することにより更新動作を完了させることが必要であり、上記の予測動作と更新動作との間に、同一のエントリに対する連続した予測の要求が呈示されても適切に対応することができない。
【００１４】
従来の値予測装置を用いてデータの値の予測を行う場合、予測テーブルを参照して予測を行ってから予測テーブル内のデータの値を更新するまでの時間が比較的短いケース、あるいは、予測テーブルの更新によって予測テーブル内のデータの値が大幅に変化しないケースでは、上記の問題はそれほど大きくならずに済む。しかしながら、特に、スレッド単位の値予測による値投機実行を行う場合等のように比較的粗い単位で複雑な予測を行う場合には、予測テーブルを参照して予測を行ってから予測テーブルを更新するまでの時間が長期化し、上記のような問題が深刻になってくる。
【００１５】
ここで、参考のため、前述のような従来の値予測装置に関連した下記の特許文献１〜７を先行技術文献として呈示する。特に、特許文献５〜８では、値予測装置によるスレッド単位の値予測を利用したスレッド投機実行装置を例示している。
【００１６】
特許文献１では、分岐予測を行う場合に、過去の分岐の履歴を用いて予測を行うのではなく、データ値予測器により算出した予測データ値を用いて実際に分岐命令を実行して予測を行うプロセッサが開示されている。
【００１７】
特許文献２では、命令の一部に値予測を行うべきか否かを指示するフィールドを設け、このフィールドに基づいて、値予測により性能向上が図れる命令にのみ値予測を適用するための命令または命令キャッシュを用意することで、不必要な値予測による性能低下を抑制すると共に、値予測を行う際の予測精度を向上させるようにしたプロセッサが開示されている。
【００１８】
特許文献３では、プロセッサがメモリ操作命令を実行する際に、過去における投機実行の成否結果の履歴を参照して、データ投機実行が成功するか否かを予測し、成功が予測される場合、メモリ操作命令を非プログラム順序でデータ依存に関して投機的に実行し、失敗が予測される場合、メモリ操作命令をプログラム順序で確定的に実行することによって、データ依存投機実行の失敗確率を低減させ、プログラムの実行性能を向上させるようにしたデータ依存投機実行制御装置が開示されている。このようなデータ依存投機実行制御装置では、データ投機実行の成否の予測に際して、ロード命令の対象アドレスは、例えば、ハッシュ関数回路により、投機実行成否履歴テーブルの特定のエントリに重複を許して割り当てるようにしている。
【００１９】
特許文献４では、ＰＨＴ（Pattern History Table ）を用いた分岐予測方式において、タグ付きＰＨＴユニットを複数のユニットに分割し、可能な限り小さなメモリ容量を使用しながらエントリ干渉を回避して分岐予測の精度を向上させるようにした分岐予測装置が開示されている。
【００２０】
特許文献５では、マルチプロセッサシステムにおいて選択的値予測による予測値に基づいてタスクレベルの命令を投機的に実行するプロセッサと、このプロセッサに接続され、値予測の検証を行う検証装置とを備え、プロセッサからの検証要求によってプロセッサの実行状態を監視し、予測が外れていた場合はプロセッサに割り込みを発生させるようにした投機的実行装置が開示されている。
【００２１】
特許文献６では、複数のスレッドに属する命令群を単一の命令処理装置内で並列に実行するための制御手段を有し、スレッド分割手段で同一のスレッドに属しデータの生成と使用の依存関係にある命令のペアを認識して複数のスレッドに分割し、データ値が実際に生成される前に値予測手段でデータ値を予測し、上記制御手段は、値予測手段で予測した値に基づいて、上記データを使用する命令を別スレッドとして、命令実行手段で投機的に実行することによって、同一のスレッドに属しデータの生成と使用の依存関係にある命令のペアを並列に実行することができるようにした投機実行型のプロセッサが開示されている。
【００２２】
特許文献７では、プログラムを複数のスレッドに分割し、これらのスレッドを複数のプロセッサに割り当てて投機的に実行させる場合、各々のプロセッサの動作を制御するスレッドマネージャにより、投機実行状態にある少なくとも一部のプロセッサを用いて、プログラム内の複数の実行経路を同時に投機的に実行させるようにした投機的マルチスレッド処理装置が開示されている。
【００２３】
特許文献８では、複数のスレッド実行部を有する並列処理装置上のスレッド実行部を有効に利用して、条件分岐命令以降の命令で分岐側と非分岐側の両者を投機的に実行し、条件分岐命令が確定した時点で、誤った側の実行を取り消すことにより、実質的に分岐予測が外れることなく実行を継続することを可能にするような並列処理装置が開示されている。
【００２４】
しかしながら、特許文献１〜８のいずれにおいても、入力されるエントリに対し予測テーブルを参照してデータの値の予測を行い、予測結果が確定して予測テーブルが更新される前に、同一のエントリに対する連続した予測の要求が呈示された場合の対処方法に関しては一切言及していない。それゆえに、特許文献１〜８のいずれにおいても、前述のような従来の値予測装置と同様の問題が発生する。
【００２５】
【特許文献１】特開２０００−１３２３９０号公報
【特許文献２】特開２００２−３１２１６２号公報
【特許文献３】特開２００２−３５１６５７号公報
【特許文献４】特開２００３−５９５６号公報
【特許文献５】特開２００１−７５８０２号公報
【特許文献６】特開２００１−３５６９０４号公報
【特許文献７】特開２０００−４７８８７号公報
【特許文献８】特開平１１−９６００５号公報
【発明の開示】
【発明が解決しようとする課題】
【００２６】
本発明は上記問題点に鑑みてなされたものであり、入力されるエントリに対するデータの値の予測を行い、予測結果が確定して予測テーブルが更新される前に、同一のエントリに対する連続した予測の要求が呈示された場合に、正しい予測を行うことができるような値予測装置、マルチプロセッサシステムおよび値予測方法を提供することを目的とするものである。
【課題を解決するための手段】
【００２７】
上記問題点を解決するために、本発明の値予測装置は、予測の対象であるエントリが入力される度に、上記エントリの識別子に基づいて予測テーブルに既に保存されているデータを参照し、上記データの値の予測を行う予測回路と、上記予測回路による予測の処理が完了した時点で、上記予測回路の出力値を予測値として上記予測テーブル内の対応するデータの値を更新する更新回路とを有し、さらに、予測の処理が現在進行中で完了していない予測の履歴を一時的に保持する予測履歴保持手段と、上記予測の履歴に含まれる識別子と、上記予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数する計数手段とを備え、上記両方の識別子が一致する回数が存在する場合、上記予測回路は、上記予測の処理を行って得られる上記予測回路の出力値を上記更新回路に送出し、上記更新回路は、上記予測回路の出力値を用いて上記予測テーブルの状態を仮想的に更新し、仮想的に更新された上記予測テーブルの状態を上記予測回路に返送し、上記予測回路は、仮想的に更新された上記予測テーブルの状態を用いて再度予測の処理を行い、上記両方の識別子が一致する回数に応じて、上記予測テーブルを実際に更新することなく上記予測回路および上記更新回路の動作を繰り返し、これによって得られる上記予測回路の出力値を最終的な予測値とするように構成される。
【００２８】
好ましくは、本発明の値予測装置において、上記両方の識別子が一致する回数が存在しない場合、上記予測回路は、一回だけ上記予測の処理を行い、これによって得られる上記予測回路の出力値を最終的な予測値とするようになっている。
【００２９】
好ましくは、本発明の値予測装置において、上記両方の識別子が一致する回数が２以上である場合、上記予測回路および上記更新回路の動作が繰り返される間、仮想的に更新された上記予測テーブルの状態を一時的に保持するバッファ回路を設けている。
【００３０】
好ましくは、本発明の値予測装置と、複数のプロセッサとを有するマルチプロセッサシステムにおいて、単一のスレッドのプログラムを複数のスレッドに分割し、上記複数のプロセッサによりスレッド単位の値予測による値投機実行を行う場合、上記複数のプロセッサにより処理されるべき上記複数のスレッドが上記エントリとして上記値予測装置に入力されるときに、上記複数のスレッドが上記値予測装置に入力される順番が入れ替わっても、それぞれの上記スレッドに対して正しい値予測を行うことが可能になる。
【００３１】
また一方で、本発明の値予測方法は、入力されるエントリの識別子をもとに予測テーブルに既に保存されているデータを参照して上記データの値の予測を行い、上記予測の処理が完了した時点で、上記予測の処理結果として得られる値を予測値として上記予測テーブル内の対応するデータの値を更新する場合、予測の処理が現在進行中で完了していない予測の履歴を一時的に保持するステップと、上記予測の履歴に含まれる識別子と、上記予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数するステップと、上記両方の識別子が一致する回数が存在する場合、上記予測の処理結果として得られる値を用いて上記予測テーブルの状態を仮想的に更新し、仮想的に更新された上記予測テーブルの状態を用いて再度予測の処理を行うステップと、上記両方の識別子が一致する回数に応じて、上記予測テーブルを実際に更新することなく上記予測の処理を繰り返し、これによって得られる値を最終的な予測値とするステップとを有する。
【発明の効果】
【００３２】
要約すれば、本発明では、入力されるエントリに対する識別子（ＩＤ）をもとにデータの値の予測を行ってから、予測の処理が現在進行中で予測テーブル内の対応するデータの値が更新されていない場合、以前の予測の履歴を予測履歴レジスタ等に一時的に保持し、予測の履歴に含まれる識別子と、予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数している。
【００３３】
さらに、上記両方の識別子が一致する回数が存在する場合、予測の処理結果として得られる値を用いて予測テーブルの状態を仮想的に更新し、仮想的に更新された予測テーブルの状態を用いて再度予測の処理を行い、上記両方の識別子が一致する回数に応じて、予測テーブルを実際に更新することなく予測の処理を繰り返し、これによって得られる値を最終的な予測値として正しい予測を実現するようにしている。
【００３４】
それゆえに、本発明によれば、入力されるエントリに対するデータの値の予測を行った後に、以前の予測が進行中で予測テーブルが更新されていない状態で、同一のエントリに対する連続した予測の要求が呈示された場合でも、以前の予測の履歴により仮想的に更新された予測テーブルの状態を用いて、同一のエントリに対する以前の予測の処理を繰り返し行うことによって、最終的な予測値に基づいて正しい予測を行うことができるようになる。
【００３５】
特に、本発明の値予測装置を含むマルチプロセッサシステムにおいて、スレッド単位の値予測による値投機実行を行う場合、本発明の値予測装置により仮想的に更新された予測テーブルの状態を用いて複数のスレッドを同時に実行することによって、複数のスレッドが値予測装置に入力される順番が入れ替わっても各々のスレッドに対して正しい値予測を行うことが可能になる。
【発明を実施するための最良の形態】
【００３６】
以下、添付図面（図２〜図８）を参照しながら、本発明の好ましい実施例の構成および動作等を説明する。
【００３７】
図２は、本発明の第１の実施例に係る値予測装置の構成を示すブロック図である。ただし、ここでは、プロセッサ等のデータ処理装置に使用されるような本発明の第１の実施例に係る値予測装置１０の構成を簡略化して示す。なお、これ以降、前述した構成要素と同様のものについては、同一の参照番号を付して表すこととする。
【００３８】
図２の第１の実施例に係る値予測装置１０は、前述の従来の値予測装置（図１参照）の場合と同様に、予測の要求に応じて入力されるエントリの識別子（ＩＤ）をもとに予測テーブル３０を参照して対応するデータの値の予測を行う予測回路１と、この予測回路１による予測の成否が確定した時点で、上記予測回路１の出力値を予測値ＰＶとして予測テーブル３０内の対応するデータの値を更新する更新回路２とを備えている。ここで、予測テーブル３０を参照して対応するデータの値の予測を行った後に、この予測回路１による予測の成否が確定している場合、更新値ＲＶは予測値ＰＶと同じ値になる。
【００３９】
図２の第１の実施例に係る値予測装置１０においても、予測テーブル３０は、ＲＡＭ等の予測テーブル保持部３に内蔵されている。予測回路１による予測が成功したか否かが確定して予測の処理が完了した時点で、予測回路１から出力される予測値ＰＶに対応する更新値ＲＶが更新回路２に送出され、この更新回路２の更新の処理によって予測テーブル３０内の対応するデータの値が更新されるようになっている。
【００４０】
さらに、図２の第１の実施例に係る値予測装置１０は、前述の従来の値予測装置（図１参照）の場合と同様に、入力されるエントリの識別子に基づいて予測テーブル３０を参照するためのインデックスを生成するハッシュ回路４を備えている。このハッシュ回路４では、入力されるエントリの識別子に基づいて、当該エントリに関するデータが予測テーブル３０のどのアドレスに格納されているかを示すインデックスが生成される。
【００４１】
さらに、図２の値予測装置１０は、前述の従来の値予測装置（図１参照）の場合と同様に、予測装置１０を含むコンピュータシステムの各種の制御を行うＣＰＵ１２が設けられている。さらに、このＣＰＵ１２においては、ＲＯＭまたはＲＡＭ等の記憶部１４が設けられている。この記憶部１４は、コンピュータシステムの各種の制御を行うためのプログラムが予め格納されている。なお、上記のＲＯＭまたはＲＡＭとして、ＣＰＵ１２に内蔵のＲＯＭやＲＡＭを用いることも可能である。
【００４２】
上記の予測回路１および更新回路２は、前述の従来の値予測装置（図１参照）の場合と同様に、演算回路やレジスタ等を含むハードウェア回路により構成される。しかしながら、予測回路１および更新回路２の機能をＣＰＵ１２により実現することも可能である。この場合は、前述のような予測回路１および更新回路２の機能を実行するためのプログラムが、記憶部１４に格納されている。ＣＰＵ１２により記憶部１４から当該プログラムを読み出して実行させることによって、予測回路１および更新回路２の機能がソフトウェアにより実現されることになる。
【００４３】
さらに、図２の第１の実施例に係る値予測装置１０は、予測の処理が現在進行中で完了していない予測の履歴を一時的に保持する予測履歴レジスタ５と、予測の履歴に含まれる識別子と、予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数する計数回路６とを備えている。これらの予測履歴レジスタ５および計数回路６は、本発明の予測履歴保持手段および計数手段にそれぞれ対応している。上記の予測履歴レジスタ５および計数回路６を含む追加回路１５が、本発明の特徴を表すハードウェア回路として値予測装置１０に設けられている。上記の予測履歴レジスタ５は、予測の対象であるエントリの識別子を予測の処理の開始時に追加し、予測の処理の終了時に削除する。
【００４４】
ここで、図２の値予測装置１０において予測の要求に応じてデータの値の予測値を算出する動作を概略的に説明する。予測回路１によりデータの値の予測値を算出する場合、ハッシュ回路４にてエントリの識別子（ＩＤ）に基づいてハッシュ値（インデックス）を生成し、このハッシュ値をもとに参照された予測テーブル３０内のエントリを用いて、予測回路１によりデータの値の予測値の計算を行うようにしている。
【００４５】
ここでは、予測履歴レジスタ５および計数回路６により得られる予測の数（すなわち、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とが互いに一致する回数）であって同一のエントリの識別子について処理が完了していない予測の数だけ、予測回路１および更新回路２を周回するようになっている。この場合、更新回路２は、予測回路１から出力される予測値を更新値とし、予測テーブル３０は更新せずに、予測回路１に更新すべき予測テーブルの状態を送出する。これによって、予測テーブルの更新がなされていない状態で、先行する予測によって後に更新されるテーブルの状態が仮想的かつ一時的に生成され、正確な予測が実現される。
【００４６】
現在進行中の予測の全てまたはその一部が、予測の失敗を含め何らかの理由で取り消された場合には、予測履歴レジスタ５から取り消された予測のエントリの識別子が削除される。このとき、予測テーブル３０は変更されない。上記の処理によって、予測テーブル３０および予測履歴レジスタ５の状態が予測の実行の取り消しに追随し、値予測装置１０は正しく動作する。
【００４７】
つぎに、図２の値予測装置１０における予測回路１および更新回路２の動作をより詳しく説明する。予測テーブル３０において、既に処理が完了した予測についての更新しか行われておらず、処理が未完了の先行する予測が存在する場合は、この先行する予測によって更新される予測テーブルの状態が、新たな要求の予測を行うために必要となる。ここで、先行する予測が全て成功する場合には、予測値と更新値とが同じ値を取る。このため、先行する予測について、その予測値を更新値と仮定することで、その予測によって更新される予測テーブルの状態を生成することができる。先行する予測が２つ以上存在する場合にも、この処理を複数回繰り返すことで目的とする予測テーブルの状態を生成することができる。
【００４８】
先行する予測が存在しない場合、すなわち、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とが互いに一致する回数が０である場合は、従来の値予測装置（図１参照）の場合と同様に予測回路１を一回だけ動作させて新たな予測の処理を行う。この場合、上記の処理によって得られる予測回路１の出力値が予測値になる。
【００４９】
先行する予測が存在している場合、すなわち、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とが互いに一致する回数が１以上である場合、予測回路１は、その回数だけ予測の処理を行って得られる予測回路１の出力値を更新回路２に送出する。更新回路２は、予測回路１の出力値を用いて予測テーブルの状態を更新値として予測テーブルを仮想的に更新し、その更新結果を予測テーブル３０には反映させず、仮想的に更新された予測テーブルの状態を予測回路１に返送する。この仮想的に更新された予測テーブルの状態は、ＲＡＭ１１に一時的に保持される。なお、図２の値予測装置１０では、予測回路１にＲＡＭ１１が設けられているが、予測回路１に内蔵のＲＡＭを用いることも可能である。予測回路１は、仮想的に更新された予測テーブルの状態を用いて再度動作し、予測の処理を行う。この動作に必要な回数だけ（すなわち、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とが互いに一致する回数だけ）、上記の予測回路１および更新回路２の動作を繰り返した上で得られた予測回路１の出力値が、最終的な予測値となる。
【００５０】
先行する予測が完了した時点で、従来の値予測装置（図１参照）の場合と同様に、最終的な予測値に対応する更新値を用いて、更新回路２により予測テーブル３０内の対応するデータの値が更新される。また一方で、何らかの理由で先行する予測の取り消しが発生した場合は、予測回路１、更新回路２および予測テーブル３０には影響を与えない。
【００５１】
既に述べたように、図２の値予測装置１０において、予測履歴レジスタ５および計数回路６はハードウェア回路により構成されている。しかしながら、予想回路１および更新回路２の機能と共に、予測履歴レジスタ５および計数回路６の機能をＣＰＵ１２のソフトウェアにより実現することも可能である。ＲＯＭまたはＲＡＭ等の記憶部１４は、予測回路１、更新回路２、予測履歴レジスタ５および計数回路６の機能を実行するためのプログラムを予め格納しておくことが可能である。
【００５２】
例えば、記憶部１４に格納されているプログラムは、予測の処理が現在進行中で完了していない予測の履歴を一時的に保持するステップと、予測の履歴に含まれる識別子と、予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数するステップと、両方の識別子が一致する回数が存在する場合、予測の処理結果として得られる値を用いて予測テーブルの状態を仮想的に更新し、仮想的に更新された予測テーブルの状態を用いて再度予測の処理を行うステップと、上記両方の識別子が一致する回数に応じて、予測テーブルを実際に更新することなく予測の処理を繰り返し、これによって得られる値を最終的な予測値とするステップとを含む。
【００５３】
さらに、図２の第１の実施例では、コンピュータ読み取り可能な記憶媒体（または記録媒体）を使用してＣＰＵ１２を動作させる場合、前述のようなプログラムの内容を保持している記憶媒体（例えば、ディスク装置等の外部記憶装置１６内のハードディスクＨ）を用意することが好ましい。なお、上記第１の実施例の記憶媒体は、上記したものに限らず、フロッピィディスクやＭＯ（Magneto-Optical Disk：光磁気ディスク）やＣＤ−Ｒ（Compact Disk-Recordable）やＣＤ−ＲＯＭ（Compact Disk Read-only Memory）等の可搬形媒体、その他の固定形媒体など種々の記憶媒体の形態で提供可能なものである。
【００５４】
上記第１の実施例によれば、入力されるエントリに対するデータの値の予測を行った後に、先行する予測が進行中で予測テーブルが更新されていない状態で、同一のエントリに対する連続した予測の要求が呈示された場合でも、先行する予測の履歴により仮想的に更新された予測テーブルの状態を用いて、先行する予測の処理を繰り返し行うことによって、最終的な予測値に基づいて正しい予測を行うことができるようになる。
【００５５】
図３は、図２の予測履歴レジスタおよび計数回路の具体例を示す回路ブロック図である。ここでは、図２の値予測装置１０における追加回路１５内の予測履歴レジスタ５および計数回路６の具体的な回路構成例が図示されている。
【００５６】
図３に示すように、予測履歴レジスタ５（図２参照）は、処理が未完了の先行する予測の履歴をシリアル形式で保持するキューレジスタ５０の構造を有している。このキューレジスタ５０は、予測の要求が呈示される度に、予測テーブルの参照に用いられる識別子（ハッシュ回路４より送出される予測の対象であるエントリのＩＤ）を末尾に追加する。また一方で、予測の処理が完了し、予測テーブル内のデータの値が更新されると同時に、このデータに対応する識別子をキューレジスタ５０の先頭部から削除し、キューレジスタ全体をシフトする。キューレジスタ５０には、予測の処理が開始されてから、未だ完了せずに予測テーブルの更新がなされていない予測の識別子が時刻順に存在する。
【００５７】
また一方で、計数回路６（図２参照）は、コンパレータ６０および計数カウンタ６１により構成される。コンパレータ６０は、予測履歴レジスタの各々のエントリについて、これまでの予測の履歴に含まれる識別子（ＩＤ）と、予測の要求時に付与される識別子（ＩＤ）とを比較し、上記エントリの中の有効なエントリについて、両方の識別子が互いに一致する回数を出力する。計数カウンタ６１は、コンパレータ６０から出力される両方の識別子が互いに一致する回数を計数して累積する。このようにして累積された回数は、同一の識別子に対して処理が進行中の予測の数を示す。
【００５８】
現在進行中の予測の全てまたはその一部が取り消された場合には、取り消された予測について、対応する識別子を予測履歴レジスタ３０（図２参照）から削除し、エントリを無効化する。
【００５９】
図４は、予測と更新との間の時間的な関係を説明するためのタイムチャートである。図４の（ａ）では、従来の方式の値予測装置（例えば、図１参照）において、入力されるエントリに対する予測を行う時刻と、予測テーブルを更新する時刻との間の時間（ｔ）に対する関係が図示されており、図４の（ｂ）では、本発明の方式の値予測装置（例えば、図２参照）において、入力されるエントリに対する予測を行う時刻と、予測テーブルを更新する時刻との間の時間（ｔ）に対する関係が図示されている。
【００６０】
図４の（ａ）に示すような従来の方式の値予測装置に関しては、入力されるエントリに対し予測テーブルを参照して予測動作を実行した後に、更新動作が完了した時点で予測テーブルを更新することが必要であり、予測動作と更新動作との順番を入れ替えることができない。
【００６１】
これに対し、図４の（ｂ）に示すような本発明の方式の値予測装置に関しては、入力されるエントリに対し予測テーブルを参照して１回目の予測動作を実行した後に、この１回目の予測動作が進行中で予測テーブルが更新されていない状態で、同一のエントリに対する連続した予測の要求が呈示された場合（例えば、予測テーブルの更新の時刻よりも早い予測の要求が３回呈示された場合）でも、先行する予測の履歴により仮想的に更新された予測テーブルの状態を用いて、先行する予測の処理を繰り返し行うことによって（例えば、３回繰り返し行うことによって）、最終的な予測値に基づいて正しい予測を行うことができるようになる。
【００６２】
図５は、本発明の第２の実施例に係る値予測装置の構成を示すブロック図である。ただし、ここでは、プロセッサ等のデータ処理装置に使用されるような本発明の第２の実施例に係る値予測装置１０ａの構成を簡略化して示す。
【００６３】
図５の第２の実施例に係る値予測装置１０ａは、前述の第１の実施例に係る値予測装置１０（図２参照）とほぼ同じ構成を有しているが、更新回路２にバッファ回路２０を設けている点が、前述の第１の実施例に係る値予測装置１０と異なっている。
【００６４】
図５の第２の実施例に係る値予測装置１０ａにおいて、予測の要求に応じて予測回路１によりデータの値の予測値を算出する場合、前述の第１の実施例に係る値予測装置１０の場合と同様に、ハッシュ回路４にてエントリの識別子（ＩＤ）に基づいてハッシュ値を生成し、このハッシュ値をもとに参照された予測テーブル３０内のエントリを用いて、予測回路１によりデータの値の予測値の計算を行うようにしている。
【００６５】
ここで、先行する予測の数が１以上である場合、すなわち、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とが互いに一致する回数が１以上である場合、予測回路１は、その回数だけ予測の処理を行って得られる予測回路１の出力値を更新回路２に送出する。更新回路２は、予測回路１の出力値を用いて予測テーブルの状態を更新値として予測テーブルを仮想的に更新し、その更新結果を予測テーブル３０には反映させず、仮想的に更新された予測テーブルの状態を予測回路１に返送する。予測回路１は、仮想的に更新された予測テーブルの状態を用いて再度動作し、予測の処理を行う。この動作に必要な回数だけ、上記の予測回路１および更新回路２の動作を繰り返した上で得られた予測回路１の出力値が、最終的な予測値となる。
【００６６】
特に、先行する予測の数が２以上である場合、予測回路１および更新回路２の繰り返し動作の間、仮想的に更新された予想テーブルの状態を一時的に保持することが必要になる。このため、図５の第２の実施例に係る値予測装置１０ａでは、予測回路１および更新回路２の繰り返し動作の間、仮想的に更新された予測テーブルの状態を一時的に保持するバッファ回路２０を更新回路２に設けている。
【００６７】
図５の第２の実施例に係る値予測装置によれば、上記の繰り返し動作の中で１回目の動作により得られた値をバッファ回路２０に保存しておき、２回目以降の動作を行う際にその値をバッファ回路２０から読み出して有効に利用することができるので、予測回路１および更新回路２の繰り返し動作により予測値を算出する際の効率が良くなる。
【００６８】
図６は、本発明の実施例による予測動作および更新動作の処理フローを説明するためのフローチャートである。ここでは、ＣＰＵ１２（例えば、図２参照）の制御により予測回路１、更新回路２、予測履歴レジスタ５および計数回路６のハードウェア回路を動作させて本発明の予測動作および更新動作を実行させる場合の処理フローを順次説明する。
図６は、本発明の実施例による予測動作および更新動作の処理フローを説明するためのフローチャートである。ここでは、ＣＰＵ１２（例えば、図２参照）を動作させて本発明の予測動作および更新動作を実行させる場合の処理フローを順次説明する。
【００６９】
入力されるエントリの識別子をもとに予測テーブルを参照してデータの値の予測を行う場合、まず、ステップＳ１において、予測の処理が現在進行中で完了していない予測の履歴を、予測履歴レジスタに一時的に保持するようにしている。
【００７０】
つぎに、ステップＳ２において、予測履歴レジスタの各々のエントリについて、これまでに保持された予測の履歴に含まれる識別子（ＩＤ）と、予測の処理の開始時に付与される識別子（ＩＤ）との比較を行うようにしている。
【００７１】
さらに、ステップＳ３において、先行する予測の数、すなわち、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とが互いに一致する回数が存在するか否かを判定するようにしている。
【００７２】
さらに、ステップＳ４において、先行する予測が存在しないと判定された場合、すなわち、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とが互いに一致する回数が０であると判定された場合、従来の値予測装置（例えば、図１参照）の場合と同様に予測回路を一回だけ動作させて新たな予測の処理を行うようにしている。
【００７３】
先行する予測が存在していると判定された場合、すなわち、予測の履歴に含まれる識別子と予測の処理の開始時に付与される識別子とが互いに一致する回数が１以上であると判定された場合、ステップＳ５において、予測回路は、その回数だけ予測の処理を行って得られる予測回路の出力値を更新回路に送出するようにしている。
【００７４】
さらに、ステップＳ６において、更新回路は、予測回路の出力値を更新値として予測テーブルを仮想的に更新し、仮想的に更新された予測テーブルの状態を予測回路に返送するようにしている。
【００７５】
さらに、ステップＳ７において、予測回路は、仮想的に更新された予測テーブルの状態を用いて再度動作し、予測の処理を行うようにしている。この動作に必要な回数だけ、予測回路および更新回路の動作を繰り返した上で得られた予測回路の出力値が、最終的な予測値となる。
【００７６】
なお、図６のフローチャートでは、予測回路１、更新回路２、予測履歴レジスタ５および計数回路６がハードウェア回路により構成される場合の処理フローを説明しているが、予測回路１、更新回路２、予測履歴レジスタ５および計数回路６の機能をＣＰＵ１２により実現する場合にも、ソフトウェア（記憶部１４に格納されているプログラム）により前述の処理フローとほぼ同様の処理フローを遂行することが可能である。
【００７７】
図７は、本発明の値予測装置の適用例の構成を示すブロック図であり、図８は、図７において予測と更新との間で入れ替わりが発生した状況を示す模式図である。ここでは、スレッド単位の値予測による値投機実行を行う場合に、スレッド投機実行を行うマルチプロセッサシステム８０に対して本発明の値予測装置１０（例えば、図２参照）を適用した例が図示されている。
【００７８】
図７のマルチプロセッサシステム８０は、本発明の値予測装置１０（例えば、図２参照）と、複数のプロセッサ（例えば、第１のプロセッサ７−１〜第ｎのプロセッサ７−ｎ（ｎは２以上の任意の正の整数））と、スレッド投機実行を遂行するためのスレッド制御を行うスレッド制御ユニット８とを備えている。
【００７９】
ここで、値予測装置１０は、前述の第１の実施例に係る値予測装置（図２参照）と同じ構成を有しているので、ここでは、値予測装置１０に関する再度の説明を省略する。
【００８０】
図７のマルチプロセッサシステム８０においては、単一の半導体集積回路のチップ上に複数のプロセッサ（第１のプロセッサ７−１〜第ｎのプロセッサ７−ｎ）を配置し、単一のスレッドのプログラムを複数のスレッドＴＨ（図８参照）に分割し、チップ内のスレッド制御ユニット８によって複数のプロセッサで並列にスレッド投機を実行するような構成になっている。
【００８１】
この半導体集積回路のチップ内で、本発明の値予測装置１０が、スレッドレベルの値予測装置として搭載される。スレッドレベルの値の予測では、スレッドの開始時にそのスレッドで使用される値を予測して値投機実行を行い、この値投機実行の結果の成否が確定した時点で予測テーブルを更新する。ここで、各々のスレッドは並列に実行され、かつ、各々のスレッドの予測について、その成否が確定するまでの時間が命令レベルの値予測に比べて長くなる。
【００８２】
それゆえに、図８の模式図に示すように、プログラムのループの部分に関してループの各々のイテレーションをスレッドＴＨとして並列の値投機実行を行うと、同じ識別子を有するスレッドが複数同時に実行され、予測テーブルが更新される前に、同じ識別子を有するスレッドに関する値予測の要求が発生する。
【００８３】
このような順序で予測の要求が発生すると、従来の値予測装置（図１参照）では対処することができないため、スレッドに関する値予測を行うことが不可能になる。しかしながら、本発明の値予測装置１０（例えば、図２参照）を用いることによって、図８のように複数のスレッドＴＨに対する並列の値投機実行を行う状況においても、各々のスレッドに対して正しい値予測を行うことが可能になる。
【００８４】
より詳しく説明すると、図７のマルチプロセッサシステム８０において、複数のプロセッサにより処理されるべき複数のスレッドがエントリとして値予測装置１０に入力されるときに、図８の右側の予測および更新と時間（ｔ）との関係に示されるように、入力されるスレッドの予測と更新との順番が入れ替わっても、先行する予測の履歴により仮想的に更新された予測テーブルの状態を用いて、先行する予測の処理を繰り返し行うことによって、各々のスレッドに対する正確な値予測が実現されるようになる。
【００８５】
（付記１）予測の対象であるエントリが入力される度に、前記エントリの識別子に基づいて予測テーブルに既に保存されているデータを参照し、前記データの値の予測を行う予測回路と、前記予測回路による予測の処理が完了した時点で、前記予測回路の出力値を予測値として前記予測テーブル内の対応するデータの値を更新する更新回路とを有する値予測装置において、
予測の処理が現在進行中で完了していない予測の履歴を一時的に保持する予測履歴保持手段と、
前記予測の履歴に含まれる識別子と、前記予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数する計数手段とを備え、
前記両方の識別子が一致する回数が存在する場合、前記予測回路は、前記予測の処理を行って得られる前記予測回路の出力値を前記更新回路に送出し、前記更新回路は、前記予測回路の出力値を用いて前記予測テーブルの状態を仮想的に更新し、仮想的に更新された前記予測テーブルの状態を前記予測回路に返送し、前記予測回路は、仮想的に更新された前記予測テーブルの状態を用いて再度予測の処理を行い、
前記両方の識別子が一致する回数に応じて、前記予測テーブルを実際に更新することなく前記予測回路および前記更新回路の動作を繰り返し、これによって得られる前記予測回路の出力値を最終的な予測値とすることを特徴とする値予測装置。
【００８６】
（付記２）前記両方の識別子が一致する回数が存在しない場合、前記予測回路は、一回だけ前記予測の処理を行い、これによって得られる前記予測回路の出力値を最終的な予測値とすることを特徴とする付記１記載の値予測装置。
【００８７】
（付記３）前記両方の識別子が一致する回数が２以上である場合、前記予測回路および前記更新回路の動作が繰り返される間、仮想的に更新された前記予測テーブルの状態を一時的に保持するバッファ回路を設けることを特徴とする付記１記載の値予測装置。
【００８８】
（付記４）予測の処理が現在進行中で完了していない予測が取り消される場合、取り消されるべき前記予測に対応する識別子を前記予測の履歴から削除し、前記識別子を有するエントリを無効化することを特徴とする付記１記載の値予測装置。
【００８９】
（付記５）付記１から４のいずれか一項に記載の値予測装置と、複数のプロセッサとを有するマルチプロセッサシステムにおいて、
単一のスレッドのプログラムを複数のスレッドに分割し、前記複数のプロセッサによりスレッド単位の値予測による値投機実行を行う場合、前記複数のプロセッサにより処理されるべき前記複数のスレッドが前記エントリとして前記値予測装置に入力されるときに、前記複数のスレッドが前記値予測装置に入力される順番が入れ替わっても、それぞれの前記スレッドに対して正しい値予測を行うことが可能であることを特徴とするマルチプロセッサシステム。
【００９０】
（付記６）入力されるエントリの識別子をもとに、予測テーブルに既に保存されているデータを参照して前記データの値の予測を行い、前記予測の処理が完了した時点で、前記予測の処理結果として得られる値を予測値として前記予測テーブル内の対応するデータの値を更新するための値予測方法において、
予測の処理が現在進行中で完了していない予測の履歴を一時的に保持するステップと、
前記予測の履歴に含まれる識別子と、前記予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数するステップと、
前記両方の識別子が一致する回数が存在する場合、前記予測の処理結果として得られる値を用いて前記予測テーブルの状態を仮想的に更新し、仮想的に更新された前記予測テーブルの状態を用いて再度予測の処理を行うステップと、
前記両方の識別子が一致する回数に応じて、前記予測テーブルを実際に更新することなく前記予測の処理を繰り返し、これによって得られる値を最終的な予測値とするステップとを有することを特徴とする値予測方法。
【００９１】
（付記７）前記値予測方法が、さらに、
前記両方の識別子が一致する回数が存在しない場合、一回だけ前記予測の処理を行い、これによって得られる値を最終的な予測値とするステップを有することを特徴とする付記６記載の値予測方法。
【００９２】
（付記８）入力されるエントリの識別子をもとに、予測テーブルに既に保存されているデータを参照して前記データの値の予測を行い、前記予測の処理が完了した時点で、前記予測の処理結果として得られる値を予測値として前記予測テーブル内の対応するデータの値を更新する場合、コンピュータに、
予測の処理が現在進行中で完了していない予測の履歴を一時的に保持し、
前記予測の履歴に含まれる識別子と、前記予測の処理の開始時に付与される識別子とを比較し、両方の識別子が互いに一致する回数を計数し、
前記両方の識別子が一致する回数が存在する場合、前記予測の処理結果として得られる値を用いて前記予測テーブルの状態を仮想的に更新し、仮想的に更新された前記予測テーブルの状態を用いて再度予測の処理を行い、
前記両方の識別子が一致する回数に応じて、前記予測テーブルを実際に更新することなく前記予測の処理を繰り返し、これによって得られる値を最終的な予測値とすることを実行させるためのプログラムを記憶したことを特徴とするコンピュータ読み取り可能な記憶媒体。
【産業上の利用可能性】
【００９３】
本発明は、複数のプロセッサで複数のスレッドを並列に実行してスレッド単位の値予測による値投機実行を行う場合に、入力されるスレッドの予測と更新との順番が入れ替わっても、各々のスレッドに対して正しい値予測を行うことができるようなスレッド投機実行型のマルチプロセッサシステムに適用することが可能である。
【図面の簡単な説明】
【００９４】
【図１】従来の値予測装置の構成を示すブロック図である。
【図２】本発明の第１の実施例に係る値予測装置の構成を示すブロック図である。
【図３】図２の予測履歴レジスタおよび計数回路の具体例を示す回路ブロック図である。
【図４】予測と更新との間の時間的な関係を説明するためのタイムチャートである。
【図５】本発明の第２の実施例に係る値予測装置の構成を示すブロック図である。
【図６】本発明の実施例による予測動作および更新動作の処理フローを説明するためのフローチャートである。
【図７】本発明の値予測装置の適用例の構成を示すブロック図である。
【図８】図７において予測と更新との間で入れ替わりが発生した状況を示す模式図である。
【符号の説明】
【００９５】
１    予測回路
２    更新回路
３    予測テーブル
４    ハッシュ回路
５    予測履歴レジスタ
６    計数回路
７−１〜７−ｎ    複数のプロセッサ
８    スレッド制御ユニット
１０    値予測装置
１０ａ    値予測装置
１１    ＲＡＭ
１２    ＣＰＵ
１４    記憶部
１５    追加回路
１６    外部記憶装置
２０    バッファ回路
３０    予測テーブル保持部
５０    キューレジスタ
６０    コンパレータ
６１    計数カウンタ
８０    マルチプロセッサシステム
１００    値予測装置
【図１】
2006309335.tif 000003
【図２】
2006309335.tif 000004
【図３】
2006309335.tif 000005
【図４】
2006309335.tif 000006
【図５】
2006309335.tif 000007
【図６】
2006309335.tif 000008
【図７】
2006309335.tif 000009
【図８】
2006309335.tif 000010