(57)【要約】  プロセッサ及び方法が開示される。一実施例では、プロセッサは、マクロ命令を格納するプリフェッチバッファを含む。プロセッサはまた、プロセッサ内の機能ユニットのうち少なくともいくつかのクロック信号を提供可能なクロック回路を含む。プロセッサは、各マクロ命令のクラスを判定可能なマクロ命令デコードロジックを更に含む。プロセッサはまた、デコードされている現在のマクロ命令で動作しないプロセッサのユニットのうち少なくとも１つに入るクロック信号を定常状態にさせることができるクロック管理ユニットを含む。最後に、プロセッサはまた、第１のマクロ命令を１つ以上のオペコードにデコード可能な少なくとも１つの命令デコーダユニットを含む。
2013546036.tif 000002
【特許請求の範囲】
【請求項１】
複数のマクロ命令を格納するプリフェッチバッファと、
プロセッサの少なくとも複数のユニットのために発信クロック信号を提供するクロック回路と、
前記プリフェッチバッファから取得された各マクロ命令のクラスを判定するマクロ命令デコードロジックと、
前記複数のマクロ命令のうち第１のマクロ命令のクラスの判定に応じて、前記第１のマクロ命令での動作に利用されない前記プロセッサの前記複数のユニットのうち少なくとも１つに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせるクロック管理ユニットと、
前記第１のマクロ命令を１つ以上のオペコードにデコードする前記複数のユニットのうち第１の命令デコーダユニットと
を有するプロセッサ。
【請求項２】
前記プリフェッチバッファから取得されたマクロ命令をデコードし、1バイトのオペコードを生成する前記複数のユニットのうち第１のプログラム可能ロジックアレイ（PLA）ユニットと、
前記プリフェッチバッファから取得されたマクロ命令をデコードし、2バイトのオペコードを生成する前記複数のユニットのうち第２のPLAユニットと、
前記プリフェッチバッファから取得されたマクロ命令をデコードし、3バイトのオペコードを生成する前記複数のユニットのうち第３のPLAユニットと
を含む前記第１の命令デコーダユニットと、
前記第１のマクロ命令から生成されたオペコードのバイト長を判定する前記マクロ命令デコードロジックと、
前記判定されたバイト長のマクロ命令をデコードしない前記第１、第２及び第３のPLAのうちいずれかに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせる前記クロック管理回路と
を更に有する、請求項１に記載のプロセッサ。
【請求項３】
前記判定された前記第１のマクロ命令のクラスが分岐命令でないことに応じて、前記複数のユニットのうち分岐アドレス計算ユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせる前記クロック管理回路を更に有する、請求項１に記載のプロセッサ。
【請求項４】
前記第１のマクロ命令が１つ以上の変位バイトを含むか否かを判定し、前記第１のマクロ命令が変位バイトを有さないことに応じて、前記第１のマクロ命令の変位バイトフィールドをゼロにする前記マクロ命令デコードロジックを更に有する、請求項１に記載のプロセッサ。
【請求項５】
前記第１のマクロ命令が即値オペランドを含むか否かを判定し、前記第１のマクロ命令が即値オペランドを有さないことに応じて、前記第１のマクロ命令の即値オペランドフィールドをゼロにする前記マクロ命令デコードロジックを更に有する、請求項１に記載のプロセッサ。
【請求項６】
前記複数のユニットのうち第２の命令デコーダユニットと、
前記複数のマクロ命令のうち第２のマクロ命令が有効でないか否かを判定する前記マクロ命令デコードロジックであり、前記第１のマクロ命令は第１のクロックサイクルに前記第１の命令デコーダユニットに入り、前記第２のマクロ命令は前記第１のクロックサイクルに前記第２の命令デコーダユニットに入る前記マクロ命令デコードロジックと、
前記第２のマクロ命令が有効でないと判定されたことに応じて、前記第２の命令デコーダユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせる電力管理ユニットと
を更に有する、請求項１に記載のプロセッサ。
【請求項７】
対応する浮動小数点マクロ命令が前記プリフェッチバッファから取得された時点から、前記浮動小数点マクロ演算の解放の時点まで、前記複数のマクロ命令のうち浮動小数点マクロ命令に対応する浮動小数点マクロ演算をトラッキングし、設定された場合に浮動小数点マクロ演算が現在トラッキングされていないことを示す浮動小数点パイプラインクリアフラグを設定する浮動小数点マクロ演算トラッカと、
前記浮動小数点パイプラインクリアフラグが設定されたことに応じて、前記複数のユニットのうち浮動小数点ユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせる電力管理ユニットと
を更に有する、請求項１に記載のプロセッサ。
【請求項８】
複数のマクロ命令をプリフェッチバッファに格納するステップと、
プロセッサの少なくとも複数のユニットのために発信クロック信号を提供するステップと、
前記プリフェッチバッファから取得された各マクロ命令のクラスを判定するステップと、
前記複数のマクロ命令のうち第１のマクロ命令のクラスの判定に応じて、前記第１のマクロ命令での動作に利用されない前記プロセッサの前記複数のユニットのうち少なくとも１つに入る前記発信クロック信号を定常状態のままにさせるステップと、
前記第１のマクロ命令を１つ以上のオペコードにデコードするステップと
を有する方法。
【請求項９】
前記プリフェッチバッファから取得されたマクロ命令をデコードし、1バイトのオペコードを生成するステップと、
前記プリフェッチバッファから取得されたマクロ命令をデコードし、2バイトのオペコードを生成するステップと、
前記プリフェッチバッファから取得されたマクロ命令をデコードし、3バイトのオペコードを生成するステップと
前記第１のマクロ命令から生成されたオペコードのバイト長を判定するステップと、
前記判定されたバイト長のマクロ命令をデコードしない前記第１、第２及び第３のPLAのうちいずれかに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせるステップと
を更に有する、請求項８に記載の方法。
【請求項１０】
前記判定された前記第１のマクロ命令のクラスが分岐命令でないことに応じて、前記複数のユニットのうち分岐アドレス計算ユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせるステップを更に有する、請求項８に記載の方法。
【請求項１１】
前記第１のマクロ命令が１つ以上の変位バイトを含むか否かを判定するステップと、
前記第１のマクロ命令が変位バイトを有さないことに応じて、前記第１のマクロ命令の変位バイトフィールドをゼロにするステップと
を更に有する、請求項８に記載の方法。
【請求項１２】
前記第１のマクロ命令が即値オペランドを含むか否かを判定するステップと、
前記第１のマクロ命令が即値オペランドを有さないことに応じて、前記第１のマクロ命令の即値オペランドフィールドをゼロにするステップと
を更に有する、請求項８に記載の方法。
【請求項１３】
前記複数のマクロ命令のうち第２のマクロ命令が有効でないか否かを判定するステップであり、前記第１のマクロ命令は第１のクロックサイクルに前記第１の命令デコーダユニットに入り、前記第２のマクロ命令は前記第１のクロックサイクルに前記第２の命令デコーダユニットに入るステップと、
前記第２のマクロ命令が有効でないと判定されたことに応じて、前記第２の命令デコーダユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせるステップと
を更に有する、請求項８に記載の方法。
【請求項１４】
対応する浮動小数点マクロ命令が前記プリフェッチバッファから取得された時点から、前記浮動小数点マクロ演算の解放の時点まで、前記複数のマクロ命令のうち浮動小数点マクロ命令に対応する浮動小数点マクロ演算をトラッキングし、設定された場合に浮動小数点マクロ演算が現在トラッキングされていないことを示す浮動小数点パイプラインクリアフラグを設定するステップと、
前記浮動小数点パイプラインクリアフラグが設定されたことに応じて、前記複数のユニットのうち浮動小数点ユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせるステップと
を更に有する、請求項８に記載の方法。
【請求項１５】
複数のマクロ命令を格納するプリフェッチバッファと、
プロセッサの少なくとも複数のユニットのために発信クロック信号を提供するクロック回路と、
前記プリフェッチバッファから取得された各マクロ命令の近似バイト長クラスを判定するマクロ命令デコードロジックと、
前記複数のマクロ命令のうち第１のマクロ命令の近似バイト長クラスの判定に応じて、前記第１のマクロ命令での動作に利用されない前記プロセッサの前記複数のユニットのうち少なくとも１つに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせるクロック管理ユニットと、
前記第１のマクロ命令を１つ以上のオペコードにデコードする前記複数のユニットのうち第１の命令デコーダユニットと、
前記第１のマクロ命令の正確なバイト長クラスを判定し、ただし、前記第１の命令デコーダと並列して前記第１のマクロ命令をデコードし、
前記第１のマクロ命令の前記近似バイト長クラスと前記第１のマクロ命令の前記正確なバイト長クラスとを比較し、
前記正確なバイト長と前記近似バイト長とが異なる長さであることに応じて、前記第１の命令デコーダユニットにより生成される前記１つ以上のオペコードを無効にするフルレングス・デコーダロジックと
を有するプロセッサ。
【請求項１６】
前記プリフェッチバッファから取得されたマクロ命令をデコードし、1バイトのオペコードを生成する前記複数のユニットのうち第１のプログラム可能ロジックアレイ（PLA）ユニットと、
前記プリフェッチバッファから取得されたマクロ命令をデコードし、2バイトのオペコードを生成する前記複数のユニットのうち第２のPLAユニットと、
前記プリフェッチバッファから取得されたマクロ命令をデコードし、3バイトのオペコードを生成する前記複数のユニットのうち第３のPLAユニットと
を含む前記第１の命令デコーダユニットと、
前記第１のマクロ命令から生成されたオペコードのバイト長を判定する前記マクロ命令デコードロジックと、
前記判定されたバイト長のマクロ命令をデコードしない前記第１、第２及び第３のPLAのうちいずれかに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせる前記クロック管理回路と
を更に有する、請求項１５に記載のプロセッサ。
【請求項１７】
前記判定された前記第１のマクロ命令のクラスが分岐命令でないことに応じて、前記複数のユニットのうち分岐アドレス計算ユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせる前記クロック管理回路を更に有する、請求項１５に記載のプロセッサ。
【請求項１８】
前記第１のマクロ命令が１つ以上の変位バイトを含むか否かを判定し、前記第１のマクロ命令が変位バイトを有さないことに応じて、前記第１のマクロ命令の変位バイトフィールドをゼロにする前記マクロ命令デコードロジックを更に有する、請求項１５に記載のプロセッサ。
【請求項１９】
前記第１のマクロ命令が即値オペランドを含むか否かを判定し、前記第１のマクロ命令が即値オペランドを有さないことに応じて、前記第１のマクロ命令の即値オペランドフィールドをゼロにする前記マクロ命令デコードロジックを更に有する、請求項１５に記載のプロセッサ。
【請求項２０】
前記複数のユニットのうち第２の命令デコーダユニットと、
前記複数のマクロ命令のうち第２のマクロ命令が有効でないか否かを判定する前記マクロ命令デコードロジックであり、前記第１のマクロ命令は第１のクロックサイクルに前記第１の命令デコーダユニットに入り、前記第２のマクロ命令は前記第１のクロックサイクルに前記第２の命令デコーダユニットに入る前記マクロ命令デコードロジックと、
前記第２のマクロ命令が有効でないと判定されたことに応じて、前記第２の命令デコーダユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせる電力管理ユニットと
を更に有する、請求項１５に記載のプロセッサ。
【請求項２１】
対応する浮動小数点マクロ命令が前記プリフェッチバッファから取得された時点から、前記浮動小数点マクロ演算の解放の時点まで、前記複数のマクロ命令のうち浮動小数点マクロ命令に対応する浮動小数点マクロ演算をトラッキングし、設定された場合に浮動小数点マクロ演算が現在トラッキングされていないことを示す浮動小数点パイプラインクリアフラグを設定する浮動小数点マクロ演算トラッカと、
前記浮動小数点パイプラインクリアフラグが設定されたことに応じて、前記複数のユニットのうち浮動小数点ユニットに入る前記発信クロック信号を少なくとも１つのクロックサイクルの間に定常状態のままにさせる電力管理ユニットと
を更に有する、請求項１５に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令内で所与の命令クラス又は特定の内容に利用されていないプロセッサの個々の部分をクロックゲートすることにより、プロセッサの電力消費を管理することに関する。
【背景技術】
【０００２】
命令パイプラインの特定の段階で動作する中央処理装置（CPU：central  processing  unit）の多くの異なる機能ユニットが存在する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
命令のクラス又は命令内の内容に応じて、全ての機能ユニットが同時に利用されていない場合がしばしば存在する。従って、CPU内の全ての機能ユニットが同時にオンになるべきであるという固有の理由は存在しない。むしろ、いずれか所与の時間において、何らかのユニットは動作すべきデータを有さないことがある。機能ユニットが動作すべきデータを有さない場合、事実上アイドルになっている。しかし、依然としてアクティブなクロックを供給されているこのようなアイドルユニットは、受信したクロック信号のため、ユニットを通じてラッチの一定の切り替え（すなわち、トグリング（toggling））を通じて電力消費を受ける。
【０００４】
x86命令は複数のフィールドを有する。最も基本的なフィールドのうち３つは、命令オペコードフィールド（例えば、移動、シフト等）、即値オペランド（immediate  operand）フィールド、及び変位バイト（displacement  byte）フィールドである。命令パイプライン内の多くの機能ユニットは、これらのフィールドを扱う回路を有するが、パイプラインを通じて移動するいくつかの命令は変位バイト情報又は即値オペランド情報を有さない。これらの場合、これらのフィールドを埋めるバイトは利用されず、一般的にはランダムなデータビットから構成される。命令がパイプラインを通じて移動すると、これらのフィールドは利用されないが、機能ユニットは、この情報に入るラッチの切り替えを依然として検出する。この切り替えは、CPUの機能ユニット内の電力消費を更に増加させる。
【図面の簡単な説明】
【０００５】
【図１】システムの少なくとも１つのプロセッサ内で実行される命令のクラス及び内容に基づいてプロセッサの電力消費を管理可能なコンピュータシステムの実施例
【図２】命令クラスの判定及び命令内容の判定を通じてコアの電力消費を管理する機能をコアに対して可能にする所与のコア内の特定の関係するユニット及び機能ロジックブロック
【図３】命令パイプラインを通じた浮動小数点マイクロ演算をトラッキングするために利用される状態機械の実施例
【図４】デコーダに入る現在の命令をデコードするように構成されていないデコーダにおいて１つ以上のプログラム可能ロジックアレイをクロックゲートする処理の実施例のフローチャート
【図５】分岐命令がパイプラインでデコードされていない場合に分岐ユニットをクロックゲートする処理の実施例のフローチャート
【図６】浮動小数点命令がパイプラインに存在しない場合に浮動小数点ユニットをクロックゲートする処理の実施例のフローチャート
【図７】命令がフィールドを利用しない場合に命令の即値及び変位バイトフィールドをゼロにする処理の実施例のフローチャート
【発明を実施するための形態】
【０００６】
本発明について一例を用いて説明する。本発明は図面により限定されない。図面において、同様の参照符号は同様の要素を示す。
【０００７】
命令パイプラインにおける命令のクラス及び内容に基づいてプロセッサの電力を管理するプロセッサ及び方法の実施例について開示する。
【０００８】
図１は、システムの少なくとも１つのプロセッサ内で実行されている命令のクラス及び内容に基づいてプロセッサの電力消費を管理可能なコンピュータシステムの実施例を示している。
【０００９】
コンピュータシステム100が示されている。コンピュータシステムは、デスクトップ、サーバ、ワークステーション、ラップトップ、ハンドヘルド、テレビセットトップボックス、メディアセンタ、ゲームコンソール、統合システム（車内のもの等）、又は他の種類のコンピュータシステムでもよい。いくつかの実施例では、コンピュータシステム100は、“プロセッサ”とも呼ばれる１つ以上の中央処理装置（CPU）を含む。多くの実施例では潜在的に多くのCPUが存在するが、図１に示す実施例では、簡潔にするためにCPU102のみが示されている。CPU102は、Intel(R)  CorporationのCPUでもよく、他のブランドのCPUでもよい。異なる実施例では、CPU102は１つ以上のコアを含む。４つのコア（104、106、108及び110）を含むCPU102が示されている。
【００１０】
多くの実施例では、コア104の拡大図に示すもののように、各コアは複数の内部機能ブロック／ユニット／ロジックコンポーネントを含む。例えば、コア104は、命令／データ（すなわち、レベル1、L1）キャッシュ112と、プリフェッチバッファ114と、プリデコードキャッシュ116と、命令デコーダ118と、分岐アドレス計算ユニット120と、命令キュー122と、浮動小数点実行ユニット124と、割り当て／解放（allocation/retirement）ユニット126と、クロック管理／生成ロジック128とを少なくとも含む。これらのユニット及びロジックコンポーネントのいくつかについて、以下に図２に関して詳細に説明する。一般的に、図示のユニットのそれぞれの複数のコピーの予備（potential）（例えば、１つ以上の整数／アドレス実行ユニット、３つの浮動小数点ユニット等）を含み、コア104に示すユニットより多くのユニット、レジスタ及び他の回路が各コア内に存在する。しかし、図１の重要な要素の明瞭性を維持するために、更なるユニットは、示されていない。
【００１１】
単一スレッドのコアでは、各コアはハードウェアスレッドと呼ばれることがある。コアがマルチスレッド又はハイパースレッドである場合、各コア内で動作する各スレッドもまた、ハードウェアスレッドと呼ばれることがある。従って、コンピュータシステム100で動作する実行のいずれか単一のスレッドは、ハードウェアスレッドと呼ばれてもよい。例えば、図１では、各コアが単一スレッドである場合、４つのハードウェアスレッドがシステムに存在する（４つのコア）。他方、各コアがマルチスレッドであり、２つのスレッドの状態を同時に管理する機能を有する場合、８個のハードウェアスレッドがシステムに存在する（コア毎に２つのスレッドで４つのコア）。
【００１２】
CPU102はまた、１つ以上の非L1キャッシュ（非L1キャッシュ112）を含んでもよい。多くの実施例では、少なくとも１つの非L1キャッシュ（キャッシュ130等）は、CPU102内でいずれか所与のコアの外側に存在する。更に、多くの実施例では、キャッシュ130は、図示の４つのコアの間で共有される。図示しない他の実施例では、キャッシュ130以外の更なる非L1キャッシュが実装される。異なる実施例では、キャッシュ130は、異なる方法で配分されてもよい。更に、異なる実施例では、キャッシュ130は異なるサイズのうち１つでもよい。例えば、キャッシュ130は8メガバイト（MB）キャッシュ、16MBキャッシュ等でもよい。更に、異なる実施例では、キャッシュ130は、ダイレクトマップ方式キャッシュ、フルアソシアティブ方式キャッシュ、マルチウェイ・セットアソシアティブ方式キャッシュ、又は他の種類のマッピングを備えたキャッシュでもよい。多くの実施例では、キャッシュ130は、全てのコアの間で共有される１つの大きい部分を含んでもよく、複数の別々の機能スライス（例えば、コア毎に１つのスライス）を含んでもよい。キャッシュ130はまた、全てのコアの間で共有される１つの部分と、コア毎の別々の機能スライスである複数の他の部分とを含んでもよい。
【００１３】
多くの実施例では、CPU102は、システムメモリ134と通信するためのインタフェースを提供する統合システムメモリコントローラ132を含む。図示しない他の実施例では、メモリコントローラ132は、コンピュータシステム100内の別のどこかに配置されてもよい。
【００１４】
システムメモリ134は、一種のダブルデータレート（DDR）DRAMのようなダイナミックランダムアクセスメモリ（DRAM）、フラッシュメモリのような不揮発性メモリ、相変化メモリ（PCM：phase  change  memory）、又は他の種類のメモリ技術を含んでもよい。システムメモリ134は、CPU102により動作されるデータ及び命令を格納するための汎用メモリでもよい。更に、ダイレクトメモリアクセス（DMA）可能I/O（入／出力）デバイスのようにシステムメモリに読み書きする機能を有する他の潜在的なデバイスがコンピュータシステムの100に存在してもよい。
【００１５】
CPU102をシステムメモリ134と結合するリンク（すなわち、バス、相互接続等）は、データ、アドレス、制御及びクロック情報を伝送可能な１つ以上の光、金属又は他の配線（すなわち、回線）を含んでもよい。
【００１６】
プラットフォームコントローラハブ（PCH：platform  controller  hub）136（例えば、I/O回路と他の回路との複合）は、CPU102と外部I/Oデバイスとの間での通信を可能にするI/Oインタフェースを含む。この複合は、１つ以上のI/Oアダプタ（I/Oアダプタ138等）を含んでもよい。I/Oアダプタは、CPU102内で利用されるホスト通信プロトコルを特定のI/Oデバイス（I/Oデバイス140等）と互換性のあるプロトコルに変換する。所与のI/Oアダプタが変換し得るいくつかのプロトコルは、特に、PCI（Peripheral  Component  Interconnect）-Express、USB（Universal  Serial  Bus）、SATA（Serial  Advanced  Technology  Attachment）、SCSI（Small  Computer  System  Interface）、RAID（Redundant  Array  of  Inexpensive  Disks）及び1394  “Firewire”を含む。更に、１つ以上の無線プロトコルI/Oアダプタが存在してもよい。無線プロトコルの例は、特に、Bluetooth（登録商標）、IEEE802.11に基づく無線プロトコル及びセルラプロトコルである。
【００１７】
I/Oデバイスとは別に、PCH136はまた、システム内の１つ以上の埋め込みコントローラ（EC：embedded  controller）（EC142等）に結合されてもよい。EC142は、複数の機能を組み込んでもよい。例えば、RAIDストレージコントローラデバイスがコンピュータシステム100内に存在してもよい。RAIDコントローラは、ハードディスクドライブ又は固体ディスク（SSD：solid  state  disk）のアレイを管理してもよい。コントローラデバイスの他の例は、離散帯域外管理エンジン（discrete  out-of-band  manageability  engine）、キーボードコントローラ、又は他の種類のコントローラでもよい。
【００１８】
他の実施例では、PCH136は、CPU102の外部に位置する別個のデバイスである。これらの実施例では、ダイレクトメモリインタフェース（DMI：direct  memory  interface）のようなインタフェースは、CPUをPCHに結合する。しかし、これらの実施例は図示されていない。
【００１９】
CPU間インタフェース144は、１つ以上の更なるCPUに結合されたリンクへのインタフェースを提供し、CPU間の通信が行われることを可能にしてもよい。例えば、CPU間高速インタフェースは、QPI（Quick  Path  Interconnect）又は他の同様のインタフェースでもよい。図１には更なるCPUは示されていないが、多くの実施例では、CPU102は、コンピュータシステム100内に存在する複数のCPUのうち１つである。多くの実施例では、CPU間インタフェース144は、CPU102とシステムに存在する他のCPUのそれぞれとの間でポイント・ツー・ポイントの高速通信インタフェースを提供する。
【００２０】
グラフィックインタフェース146は、別個のグラフィックコントローラに結合されたリンクへのインタフェースを提供してもよい（別個のグラフィックコントローラは示されていない）。インタフェースは、高速PCI（platform  component  interconnect）-Expressインタフェース又は他の高速インタフェースでもよい。他の実施例では、CPU102は、統合グラフィックコントローラを含み、グラフィックインタフェース146は、モニタのようなディスプレイに結合されてもよい。多くの実施例では、インタフェースは、かなりのグラフィックデータのトラヒック（例えば、3Dグラフィックス、ビデオ等）がリンクを通じて伝送可能になるように高速である。
【００２１】
コンピュータシステム100はまた、コンピュータシステム及びコンポーネントを初期化するためのブート命令を提供するシステム管理ファームウェア148を含む。異なる実施例では、システム管理ファームウェアは、BIOS（basic  input/ouput  system）、拡張可能ファームウェア、又はコンピュータシステムがプラットフォームのブート中に利用し得る他の形式のファームウェア命令でもよい。
【００２２】
多くの実施例では、コンピュータシステム100内の各コアは、各コア内で実行されている命令のクラス及び内容に基づいてコアの電力消費を管理する内部ロジックを含む。クロック管理／生成ロジック128を通じてクロック毎に特定のユニットをクロックゲートするために、複数のユニット内で様々なロジックが利用されている。
【００２３】
図２は、命令クラスの判定及び命令内容の判定を通じてコアの電力消費を管理する機能をコアに対して可能にする所与のコア内の特定の関係するユニット及び機能ロジックブロックを示している。
【００２４】
所与のコアにおいて、マクロ命令は、命令キャッシュ112から取得され、プリフェッチバッファ200に到達する。多くの実施例では、２つの命令デコーダ（デコーダ0（202）及びデコーダ1（204））が存在する。プリフェッチバッファ200は、デコーダ毎に命令レジスタ（命令1レジスタ（206）及び命令2レジスタ（208））に供給する。図１に示す実施例では、コアが２つの命令を同時にデコード可能であるため、命令デコーダユニットに２つのデコーダが示されている。簡潔にするために、単一のデコーダ内の詳細な回路が、デコーダ0内にのみ示されている。この同じ回路がデコーダ1に存在するが、回路はデコーダ0に示す回路と重なり、従って、回路の２回の説明は冗長であるため、示されていない。
【００２５】
プリフェッチバッファ200とは別に、プリフェッチバッファからキャッシュラインを読み取り、命令キャッシュラインからマクロ命令を分離し、プリデコードビットに基づいて命令の長さを判定するプリコードに基づくロジック210も存在する。マクロ命令毎に、デコードロジックは、命令のバイトサイズクラスの初期の近似（すなわち、マクロ命令が1バイトのマイクロ演算（オペコード）にデコードされるか、2バイトのオペコードにデコードされるか、3バイトのオペコードにデコードされるか、又は可変長の１つ以上のオペコードの更に複雑なセットにデコードされるか）を提供する。バイトサイズが不正確になる可能性があるいくつかの命令が存在するため、プリデコード処理のバイトクラスのサイズは近似である。図２に示すロジックとは別に、フルレングスのデコードを実行する他の並列のデコーダ（フルレングス・デコーダ242）が存在する。これは完全に正確である。しかし、フルレングス・デコーダは、プリコード長の近似ほど効率的ではないため、図２に示すロジックにより実行されるプロセスをデコードするために並列に行われる。
【００２６】
多くの実施例では、フルレングス・デコーダがマクロ命令デコードロジックで近似した長さとは異なるオペコードのバイト長を戻した場合、現在の命令の前の以降の命令は無効にされる。この理由は、誤ったオペコードのバイト長は、ランダムな不要データが命令パイプラインの更に下流で利用されることを生じる可能性があるからである。無効な命令は、フルレングス・デコーダにより判定された正確なオペコードのバイト長で、再びパイプラインに送信される。時折のオペコードの無効化と、命令パイプラインを通じた次の２回目の通過とは、パイプラインの性能効率を低くするが、マクロ命令デコードロジックのバイト長の近似の高い成功率は、この並列の２重の長さデコード処理が利用されるのを保証するほど更に大きい効率の利益を提供する。
【００２７】
次に命令1レジスタ206に戻り、このレジスタでラッチされたマクロ命令は、デコーダ0（202）に入り、デコーダ内の複数のロジックコンポーネントに伝達される。いずれかの種類の受信したマクロ命令のデコード処理を扱うために１つの大きいプログラミングロジックアレイ（PLA：programming  logic  array）を有する代わりに、デコーダ0に存在するPLAは、バイト長毎にマクロ命令デコードを実行するPLAに分割される。1バイトのオペコードを生成する全てのマクロ命令は、1バイトオペコードPLA212でデコードされ、2バイトのオペコードを生成する全てのマクロ命令は、2バイトオペコードPLA214でデコードされ、3バイトのオペコードを生成する全てのマクロ命令は、3バイトオペコードPLA216でデコードされる。更に、複雑命令PLA218は、PLA212〜216のデコードでカバーされない全ての他のオペコードをデコードする。一般的に、ほとんどのマクロ命令は、1〜3バイトのオペコードの変換に入るため、複雑命令PLA218は、他の３つのPLAほど頻繁に利用されなくてもよい。
【００２８】
前の世代のデコーダでは、一般的に全ての命令をデコード可能なPLAが存在していた。図２の全ての４つのPLA内の回路は、この単一のPLAに統合されていた。従って、どのバイトサイズクラスのマクロ命令がPLAにより受信されたかに拘らず、マクロ命令を対応するオペコードにデコードするために全体のPLAがアクティブとなっていた。図２に示すこの実施例では、この回路は、４つの別々のPLAに分割される。更に、全てのPLAは、受信した発信クロック信号に基づいてサイクル毎にアクティブに実行している。この発信クロック信号は、クロック管理及び生成ロジック（CMGL：clock  management  and  generation  logic）220から受信される。CMGL220は、少なくとも１つの周波数で少なくとも１つの発信クロック信号を生成するクロック回路を含む。しかし、プロセッサの設計に柔軟性を与えるために、複数の周波数の複数の信号が利用されてもよい。１つより多くのクロック速度が利用されるいくつかの実施例では、いくつかのユニットは、２倍の周波数、半分の周波数、又は他の潜在的に操作されたクロック信号周波数でクロック信号を共に取得する。しかし、或る実施例では、図２に示す機能ユニット及びロジックは、全て同じ周波数で動作する。いずれの場合でも、CMGL220は、正確に実行することを要求する図２に示すいずれかの機能ブロック／ユニットに発信クロック信号を伝達してもよい。図２を明瞭にするために、クロック信号がCMGL220から外への線を通じて供給されるものとして特定のブロック／ユニットのみが示されているが、これらの特定のクロック源及び宛先の対は、以下に説明する。
【００２９】
更に、CMGL220はまた、機能ブロック／ユニットのいずれか１つ以上へのクロック信号の供給をアクティブに管理する機能を提供するクロック管理回路を含む。例えば、クロック管理回路は、クロック信号を定常状態のハイ状態に上げ、又はクロック信号を定常したロー状態に下げるクロックゲートロジックを含んでもよい。クロックが実行することを必要とする機能ブロック／ユニットが入来するクロック信号を拒否された場合、ブロック／ユニットは機能するのを中止する。この理由は、内部回路が回路で切り替え動作（すなわち、クロック信号が供給されることに基づく切り替え／トグリング）を有するのではなく、定常状態にされるためである。従って、CMGL220が機能ロジックのブロック／ユニットへのクロック信号をシャットダウンすると、ロジックが動作を中止する。これは、ブロック／ユニットの回路における動的な切り替えの電力消費を節約する。
【００３０】
従って、CMGL220は、図２のいずれか所与の機能ブロック／ユニットに供給されているクロック信号をシャットダウンしてもよく、しなくてもよい。多くの実施例では、マクロ命令デコードロジック210は、命令1レジスタ206に入った所与の命令に対応して判定されたバイトサイズクラス長近似情報をCMGL220に送信する。多くの実施例では、近似されたバイトサイズクラス長は、一般的に1、2又は3バイトでもよい。次のクロックサイクルでは、CMGL220は、近似された長さに対応するPLAへの供給されるクロック信号を維持し、他の長さを定常状態にデコードする他の２つのPLAに供給するクロックを除去する。前述の次のクロックサイクルでは、３つの特定のバイト長のPLAのうち１つのみが動作している。更に、他の２つの特定のバイト長のPLAは動作せず、あまり動的な電力を消費しない。この理由は、これらのそれぞれの回路内に動的な切り替えの電力消費が存在しないからである。
【００３１】
次の命令がデコードされるために命令1レジスタ206で待機している次のクロックサイクルでは、同じ処理が行われる。従って、いずれか所与のクロックサイクルの間に、1、2及び3バイトオペコードPLAのうちせいぜい１つのみがかなりの動的な切り替え電力を消費している。多くの実施例では、複雑命令PLA218は、常に供給されるクロックを受信する。この理由は、CMGL220は、その特定のPLAについてクロックゲート機能を有さないからである。
【００３２】
1、2又は3バイトのデコードの場合、マクロ命令が関係するバイト長のPLAを通過して対応するオペコードにデコードされると、これはMUX222を通じて多重される。PLA218を必要とする複雑命令の場合、その結果は、マイクロコードROM（read-only  memory）224からオペコードを生成してもよい。MUX222の出力は、PLA218の出力と再び多重され、MUX226を通じてマイクロコードROM224と多重される。デコーダからの結果のオペコードを有するMUX226のオペコード出力は、プリフェッチバッファ200で元のマクロ命令に付加されたフィールドでもよい変位バイト及び／又は即値オペランドを扱うロジック228で受信される。（元のマクロ命令に付加されたいずれかのフィールドが存在する場合）変位バイト及び／又は即値オペランドが処理されると、オペコードは、デコーダ0から命令キュー230に出力され、実行を待機する。
【００３３】
多くの実施例では、マクロ命令デコードロジック210は、所与の受信したマクロ命令を部分的にデコードしてもよい。マクロ命令デコードロジック210はまた、所与のマクロ命令でのプリデコード処理中に生成された一式のプリデコードビットを提供する。或る実施例では、マクロ命令デコードロジック210は、プリデコードビットに基づいて、デコーダ1で同時にデコードされた第２の命令が無効であることを判定可能でもよい。第２の命令が無効になる可能性がある理由について多くの例が存在するが（例えば、分岐の問題）、理由に拘らず、デコーダ1に入る第２の命令が無効であることをマクロ命令デコードロジック210が認識すると、マクロ命令デコードロジック210は、CMGL220に対してデコーダ2の全体に供給されるクロック信号をゲートさせてもよい。例えば、CMGL220は、命令2レジスタ208に対してクロックを定常状態に上げ、レジスタのラッチがデコーダ1への命令を出すことを可能にしないようにしてもよい。他の実施例では、CMGL220は、単一の位置のデコーダ（図２に図示せず）に入るクロックツリーに基づいて、デコーダ2内の全ての主要な機能ユニット／ブロックに個々に供給してもよい。これらの実施例では、CMGL220は、デコーダに入る全体のツリーをクロックゲートしてもよい。従って、命令が無効であることをプリデコーダロジック210が判定した場合、デコーダロジックに供給されるクロックをゲートすることにより、命令をオペコードにデコードするためにスケジュールされたデコーダ内の全てのロジックを基本的にシャットダウンする。
【００３４】
デコーダ0に戻り、分岐、浮動小数点、フィールド検出ロジック（BFFDL：branch,  floating  point,  field  detector  logic）232もまた、命令1レジスタ206からデコーダ0に伝達されるマクロ命令を受信する。BFFDL232は、コア内の電力管理を支援するためお複数の部分の検出ロジックを含む。
【００３５】
ロジックという名前が示唆するように、BFFDL232内に別々の分岐検出ロジック、浮動小数点検出ロジック及びフィールド検出ロジックが存在してもよい。分岐検出ロジックは、命令が分岐アドレスの計算を必要としているか否かを判定する。
【００３６】
分岐アドレス計算ユニット234は、分岐命令について分岐アドレスが何であるかを計算する。マクロ命令が何らかの形式の分岐を含まない場合、この分岐アドレス計算ユニット234は利用されないが、このユニットに供給されるクロックは依然として動作する。これもまた、不要な動的切り替えの電力消費をもたらす。分岐アドレス計算ユニット234の電力消費を最小化するために、BFFDL232は、分岐アドレス計算ユニット234に到達する次の命令が分岐命令でないことを認識する。BFFDL232は、この情報をCMGL220に送信し、CMGL220に対して分岐アドレス計算ユニット234に供給されるクロックをゲートさせてもよい。
【００３７】
BFFDL232内のフィールド検出ロジックは、受信した特定のマクロ命令が実際に変位バイトフィールドのデータ及び／又は即値オペランドフィールドのデータを有するか否かを判定する機能を有する。多くのマクロ命令はこれらのフィールドを利用しない。フィールドが利用されなくても、オペコードを扱うパイプラインを通じたロジックは、これらのフィールドのためのスロットを有しており、これらのスロットは、これらの中にオペコードと共に渡されるランダムな不要データを有する。ランダムな不要データは、データが利用されなくても、動的な切り替えの電力消費を生じる。従って、多くの実施例では、BFFDL232は、マクロ命令がこれらのフィールドのうち１つ又は双方を利用しないことを判定すると、ロジック228に対して未使用のフィールドをゼロにするように命令する。このフィールドをゼロにすることは、コア内の機能ユニット／ブロックの中でのパイプラインの電力消費を更に最小化する。
【００３８】
BFFDL232内の浮動小数点検出ロジックは、入来するマクロ命令が浮動小数点（FP：floating  point）演算であるか否かを検出する。多くの実施例では、浮動小数点計算を扱う浮動小数点ユニット236は、前述のクロックゲートされる他のユニットと同様にクロックゲートされてもよい。しかし、浮動小数点ユニットのクロックゲートは更に複雑である。この理由は、このユニットが適切に機能するために必要なリードタイムが存在し、クロック毎にFPユニット236の全体をクロックゲートすることは非現実的であるからである。従って、多くの実施例では、FPユニット236は、全体のパイプラインにFP演算が存在しない場合にのみクロックゲートされる。FPユニットに関するパイプラインは、一般的に（FPマクロ命令をデコードするために）デコーダユニットで始まり、解放ユニットで終了する（実行が完了した後にFP命令を解放する）ことを有する。従って、パイプラインに（デコード及び解放の間に）存在するFP演算の全セットのトラッキングをサポートするために、状態機械が実装されてもよい。
【００３９】
FPマイクロオペ・トラッカユニット238は、パイプラインに存在するいずれかのFP命令／オペコードをトラッキング（監視）し、FP命令／オペコードが存在しない場合には、FPユニット236をクロックゲートするようにCMGL220に命令してもよい。BFFDL232は、FP命令がデコード段階に入ったときにFPマイクロオペ・トラッカ238に情報を送信する。FP命令は、全体のパイプラインを通過し、最終的に解放される。解放の間に、割り当て／解放ユニット240は、FP命令が解放されたことをFPマイクロオペ・トラッカ238に通知する。解放されると、更なるFP命令がデコーダに入らない場合、FPマイクロオペ・トラッカ238は、FPユニット236に入るクロックをシャットダウンするようにCMGL220に命令してもよい。
【００４０】
図３は、命令パイプラインを通じた浮動小数点マイクロ演算をトラッキングするために利用される状態機械の実施例を記載している。
【００４１】
開始状態は、浮動小数点マイクロ演算に関するアイドル状態にあるパイプラインを示している（状態300）。FPマイクロ演算（uOP）が受信されない場合、状態機械はアイドル状態に留まる。この理由は、パイプラインがFP  uOPをデコードしないからである（タスクA）。FP  uOPが到達すると、パイプラインはFP  uOPをデコードし（タスクB）、状態機械は、uOPがデコード段階を終了し、依然として命令キューに存在する次の状態に遷移する（状態302）。FP  uOPが命令キューに存在する場合、アイドル状態に戻る唯一の方法は、パイプラインに残る更なるFP  uOPがなく、FP  uOPが解放されることである。
【００４２】
FP  uOPが命令キューに存在する場合（状態302）、２つのイベントが生じてもよい。まず、新たな第２のFP  uOPがデコーダに到達する間に命令キューのFP  uOPが依然として命令キューに存在する場合、状態機械は第１のFP  uOPのトラッキングを中止し、その代わりに、ちょうど到達した第２のFP  uOPのトラッキングに遷移する。これは、第２のFP  uOPが第１のFP  uOPの後に解放されるからである。パイプラインは、他のFP  uOPをデコードするタスクを実行する（タスクC）。
【００４３】
他の潜在的なイベントは、命令キューのuOPが実行されるためにリソースを割り当てられ得ることである（タスクD）。この場合、状態機械はuOP割り当て状態（状態304）に遷移する。
【００４４】
uOP割り当て状態では、更なる３つのイベントが生じてもよい。まず、割り当て段階（状態304）の第１のFP  uOPがまだ解放されていないが、新たな第２のFP  uOPがデコーダに到達した場合、状態機械は、第１のFP  uOPのトラッキングを中止し、その代わりに、ちょうど到達した第２のFP  uOPのトラッキングに遷移する。これは、第２のFP  uOPが第１のFP  uOPの後に解放されるからである。パイプラインは、他のFP  uOPをデコードするタスクを実行する（タスクE）。これは、状態機械をUOPが命令キューにある状態（状態302）に戻ることを生じ、この時点で、状態機械は第２のFP  uOPをトラッキングしている。
【００４５】
状態304で生じ得る第２のイベントは、FP  uOPの割り当てが行われたが、FP  uOPの解放が生じていない場合である。この場合、パイプラインはFP  uOPを解放しないため、イベントは生じない（タスクF）。これは、FP  uOPの実行中に行われてもよい。
【００４６】
状態304で生じ得る第３のイベントは、パイプラインがFP  uOPを解放してもよい場合である（タスクG）。このイベントが行われると、状態機械はアイドル（状態300）に戻る。状態機械がアイドル状態にあるいずれかの時点で、FPマイクロオペ・トラッカ（図２の238）は、CMGL220に対してFPユニット236をクロックゲートするように命令してもよい。
【００４７】
図４は、デコーダに入る現在の命令をデコードするように構成されていないデコーダにおいて１つ以上のプログラム可能ロジックアレイをクロックゲートする処理の実施例のフローチャートである。
【００４８】
この処理は、異なる実施例においてハードウェア回路及び／又はマイクロコードを有してもよい処理ロジックにより実行される。処理は、処理ロジックがプリフェッチバッファからマクロ命令を取得することにより始まる（処理ブロック400）。処理は、処理ロジックがマクロ命令のバイト長クラスを判定することにより続く（処理ブロック402）。判定に基づいて、処理ロジックは、マクロ命令がデコードされるべきデコーダにおいて１つ以上のPLAをクロックゲートする（処理ブロック404）。クロックゲートされる特定のPLAは、判定されたバイト長クラスのマクロ命令をデコードするための割り当てられていないものである。最後に、処理ロジックは、クロックゲートされていない残りのPLAで、デコーダにおいてマクロ命令をデコードする（処理ブロック406）。
【００４９】
図５は、分岐命令がパイプラインでデコードされていない場合に分岐ユニットをクロックゲートする処理の実施例のフローチャートである。
【００５０】
この処理は、異なる実施例においてハードウェア回路及び／又はマイクロコードを有してもよい処理ロジックにより実行される。処理は、処理ロジックがプリフェッチバッファからマクロ命令を取得することにより始まる（処理ブロック500）。処理ロジックは、命令が分岐命令であるか否かを判定する（処理ブロック502）。命令が分岐命令である場合、処理が終了する。そうでなく、命令が分岐命令でない場合、処理ロジックは、マクロ命令から生成されたオペコードがパイプラインの分岐計算位置に存在するクロックサイクルの間に分岐ユニットをクロックゲートし（処理ブロック504）、処理が完了する。
【００５１】
図６は、浮動小数点命令がパイプラインに存在しない場合に浮動小数点ユニットをクロックゲートする処理の実施例のフローチャートである。
【００５２】
この処理は、異なる実施例においてハードウェア回路及び／又はマイクロコードを有してもよい処理ロジックにより実行される。処理は、処理ロジックがデコードユニットと解放ユニットとの間のパイプラインにFP命令が存在するか否かを判定することにより始まる（処理ブロック600）。パイプラインのどこかにFP命令が存在する場合、処理はブロック600に戻り、再び検査する。そうでなく、FP命令がパイプラインに存在しない場合、処理ロジックは、FPユニットをクロックゲートする（処理ブロック602）。多くの実施例では、この処理は、パイプラインにおけるFP命令の存在をトラッキングするために、図３に詳細に説明した状態機械を利用する。
【００５３】
図７は、命令がフィールドを利用しない場合に命令の即値及び変位バイトフィールドをゼロにする処理の実施例のフローチャートである。
【００５４】
この処理は、異なる実施例においてハードウェア回路及び／又はマイクロコードを有してもよい処理ロジックにより実行される。処理は、処理ロジックがプリフェッチバッファからマクロ命令を取得することにより始まる（処理ブロック700）。処理ロジックは、命令が即値フィールドを利用するか否かを判定する（処理ブロック702）。命令が即値フィールドを使用しない場合、処理ロジックは、命令の即値フィールドの全てのデータをゼロにする（処理ブロック704）。命令が即値フィールドを利用するか否かに拘らず、次に、処理ブロックは、命令が変位バイトフィールドを利用するか否かを判定する（処理ブロック706）。変位バイトフィールドを使用する場合、処理は終了する。そうでなく、命令が変位バイトフィールドを使用しない場合、処理ロジックは、命令の変位バイトフィールドの全てのデータをゼロにし（処理ブロック708）、処理が終了する。
【００５５】
多くの実施例において、所与の機能ブロック／ユニットでクロックゲートが実行された場合、クロックは、ユニットへの少なくとも１つのクロックサイクルの間にゲートされるが、ユニットをクロックゲートする特定の理由に応じて、クロックゲートは１つより多くのサイクルの間に行われてもよい。例えば、1バイトPLAをクロックゲートすることは、一般的に単一クロックサイクルに基づいて行われる。この理由は、命令がクロックサイクル毎にデコードされるために入れられるからである。従って、PLAは、１クロックサイクルの小さい期間にゲートされてもよい。このことに関して、数千ものマイクロ命令が単一の浮動小数点演算なしにパイプラインを通過してもよい。この場合、FPユニットは、多くのクロックサイクルの間に連続してクロックゲートされてもよい。
【００５６】
本発明の実施例の要素は、機械実行可能命令を格納する機械可読媒体として提供されてもよい。機械可読媒体は、フラッシュメモリ、光ディスク、CD-ROM（compact  disks-read  only  memory）、DVD（digital  versatile/video  disks）、ROM、RAM（random  access  memory）、EPROM（erasable  programmable  read-only  memory）、EEPROM（electrically  erasable  programmable  read-only  memory）、磁気若しくは光学カード、伝搬媒体、又は電子命令を格納するのに適した他の種類の機械可読媒体を含んでもよいが、これらに限定されない。
【００５７】
前述の説明及び特許請求の範囲において、“含む”及び“有する”という用語並びにその派生形が使用されてもよい。これらは、互いに同語と扱われることを意図している。更に、以下の説明及び特許請求の範囲において、“結合”及び“接続”という用語並びにその派生形が使用されてもよい。これらの用語は互いに同義であることを意図しないことが分かる。むしろ、特定の実施例において、“接続”は、２つ以上の要素が互いに直接の物理的又は電気的接触をしていることを示すために使用され得る。“結合”は、２つ以上の要素が直接の物理的又は電気的接触にあることを意味してもよい。しかし、“結合”はまた、２つ以上の要素が互いに直接接触していないが、依然として互いに協調、相互作用又は通信することを意味してもよい。
【００５８】
前述の説明において、本発明の実施例を説明するために特定の用語が使用されている。例えば、“ロジック”という用語は、１つ以上の機能を実行するハードウェア、ファームウェア、ソフトウェア（又はこれらのいずれかの組み合わせ）を表す。例えば、“ハードウェア”の例は、集積回路、有限状態機械又は組み合わせロジックを含むが、これらに限定されない。集積回路は、マイクロプロセッサ、特定用途向け集積回路、デジタルシグナルプロセッサ、マイクロコントローラ等のようなプロセッサの形式になってもよい。
【００５９】
この明細書を通じて“一実施例”又は“実施例”への言及は、実施例に関して説明した特定の機能、構造又は特徴が本発明の少なくとも１つの実施例に含まれることを意味することが分かる。従って、この明細書の様々な部分における“実施例”又は“一実施例”若しくは“別の実施例”への２つ以上の言及は、必ずしも同じ実施例を示しているとは限らないことを強調し、これを認識すべきである。更に、特定の機能、構造又は特徴は、本発明の１つ以上の実施例において適切に組み合わされてもよい。
【００６０】
同様に、１つ以上の様々な本発明の態様の理解を支援する開示を簡潔にする目的で、本発明の実施例の前述の説明では、様々な特徴が場合によっては単一の実施例、図面又はその説明にグループ化されることが分かる。しかし、この開示の方法は、特許請求の範囲の対象が各請求項に明示的に記載された特徴より多くのものを必要とするという意図を反映するものと解釈されるべきでない。むしろ、以下の請求項に反映するように、本発明の態様は、単一の前述に開示された実施例の全ての特徴より少ないものにある。従って、詳細な説明に続く特許請求の範囲は、ここでこの詳細な説明に明示的に組み込まれる。
【図１】
2013546036.tif 000003
【図２】
2013546036.tif 000004
【図３】
2013546036.tif 000005
【図４】
2013546036.tif 000006
【図５】
2013546036.tif 000007
【図６】
2013546036.tif 000008
【図７】
2013546036.tif 000009
【国際調査報告】
2013546036.tif 000010
2013546036.tif 000011