(57)【特許請求の範囲】
【請求項１】
プロセッサを動作させる方法であって、
命令フェッチャによって命令をメモリからフェッチするステップと、
デコーダによって、前記フェッチされた命令をデコードし、前記デコーダがデコードされた命令を発行キューに提供するステップであって、前記発行キューは、行及び列に配列された記憶セルからなるメイン発行キュー・アレイ及び行及び列に配列された記憶セルからなるサイド・キュー・アレイを含み、前記サイド・キュー・アレイは前記メイン発行キュー・アレイ又は前記サイド・キュー・アレイからの実行ユニットによるアウトオブオーダー実行のための命令を発行する発行行を含み、前記サイド・キュー・アレイの各行は前記メイン発行キュー・アレイのストールの場合前記メイン発行キュー・アレイの命令をバイパスすることを可能にするために前記メイン発行キュー・アレイの各行から命令を受け取ることがでる、ステップと、
前記サイド・キュー・アレイの前記発行行によってアウトオブオーダで実行ユニットに発行するために、前記デコードされた命令を、前記メイン発行キュー・アレイの前記行及び列に格納するステップと、
メイン発行キュー・アレイの行の１つから発行できる状態にない第１の命令によって前記メイン発行キュー・アレイがストールさせられているかどうかを判別するステップと、
前記メイン発行キュー・アレイがストールされているとき、前記メイン発行キュー・アレイの他の行を検索して、アウトオブオーダで発行できる状態にある第２の命令を探索するステップと、
前記ストールされた第１の命令が前記メイン発行キュー・アレイにとどまっている間、前記発行行により前記実行ユニットに後で発行するために、アウトオブオーダ実行のために前記メイン発行キュー・アレイの他の行の第２の実行命令を、前記サイド・キュー・アレイのそれぞれ対応する行に転送することによって前記メイン発行キュー・アレイの特定の行内にストールされている第１の命令をバイパスするステップと、
を含み、
前記メイン発行キュー・アレイの行は互いに再帰的に構成されており、前記サイド・キュー・アレイの行は互いに再帰的構成されていることを特徴とする方法。
【請求項２】
占有されていない記憶セルが前記第１の行に現れたときに、まず前記メイン発行キュー・アレイの第２の行内の命令を前記メイン発行キュー・アレイの第１の行に転送することによって前記第２の行内の命令を実行ユニットに進め、次いで前記命令を前記実行ユニットに転送するために前記第１の行から前記命令を前記サイド・キュー・アレイの前記発行行に転送するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記格納ステップがさらに、前記メイン発行キュー・アレイ内の各命令の経過時間情報を格納するステップをさらに含み、前記経過時間情報は、特定の命令が格納されている前記行内の他の命令に対する前記特定の命令の経過時間を示すものである、請求項２に記載の方法。
【請求項４】
前記第２の行から前記第１の行に進む前記命令が、前記第２の行内の別の命令よりも古い経過時間を有する、請求項３に記載の方法。
【請求項５】
前記第２の行の一方の端に近い命令が、前記第１の行に進むことに関して、前記第２の行内の他の命令よりも高い優先度を受ける、請求項２に記載の方法。
【請求項６】
前記判別ステップは、前記メイン発行キュー・アレイ内の各々の命令を依存性についてチェックして、各々の命令が発行できる状態にあるか又は発行できる状態にないかを判別するステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記メイン発行キュー・アレイの各行は前記サイド・キュー・アレイの対応するそれぞれの行と通じており、次の行における命令によって示される依存性のためにその命令が前記メイン発行キュー・アレイの次の行に進むことができないとき、前記メイン発行キュー・アレイの第１の行ではなく前記メイン発行キュー・アレイの各行が前記サイド・キュー・アレイの対応するそれぞれの行に命令を転送できるように、前記サイド・キュー・アレイの１つの行は、前記メイン発行キュー・アレイの第１行から又は前記サイド・キュー・アレイの行と隣接する前記メイン発行キューの行から前記発行行への実行をできる状態にある命令を受け取る前記発行行である請求項１に記載の方法。
【請求項８】
命令をメモリからフェッチするようになっているフェッチ・ステージと、
前記フェッチ・ステージに結合され、前記フェッチされた命令をデコードする、デコーダと、
複数の実行ユニットと、
発行キューであって、前記デコーダと前記複数の実行ユニットとの間に結合されており、行及び列に配置された記憶セルのメイン発行キュー・アレイ、及び行及び列に配置された記憶セルのサイド・キュー・アレイを含み、前記サイド・キュー・アレイは前記複数の実行ユニットによるアオウトオブオーダでの前記メイン発行キュー・アレイ又は前記サイド・キュー・アレイからの命令を発行する発行行を含み、前記サイド・キュー・アレイの各行は前記メイン発行キュー・アレイにおけるストールの時に前記メイン発行キュー・アレイの命令をバイパスすることを可能にするメイン発行キュー・アレイの各行からの命令を受信することができ、前記メイン発行キュー・アレイは前記サイド・キュー・アレイの前記発行行によって複数の実行ユニットにアウトオブオーダ発行のためのデコードされた命令を格納し、前記発行キューは前記メイン発行キュー・アレイの行の１つから発行できる状態にない第１の命令によって前記メイン発行キュー・アレイがストールされているかどうかを判別し、前記メイン発行キュー・アレイがストールされているとき、前記ストールされた第１の命令が前記メイン発行キュー・アレイにとどまっている間前記発行行によってアウトオブオーダ実行のために後に実行ユニットに発行するために前記メイン発行キュー・アレイの他の行の第２の命令を前記サイド・キュー・アレイのそれぞれ対応する行に転送することによって、前記メイン発行キュー・アレイの特定の行における前記ストールされた第１の命令に関してアウトオブオーダを発行することができる状態の前記第２の命令を探索するために前記メイン発行キュー・アレイの他の行を検索し、前記メイン発行キュー・アレイの前記記憶セル行は互いに再帰的に構成され、前記サイド・キュー・アレイの前記記憶セル行は互いに再帰的に構成されている発行キューと、
を備えるプロセッサ。
【請求項９】
前記発行キーは、占有されていない記憶セルが前記第１の行に現れたときに、まず前記メイン発行キュー・アレイの第２の行内の命令を前記メイン発行キュー・アレイの第１の行に転送することによって前記メイン発行キュー・アレイの第２の行内の命令を実行の方向に進むように構成されている、請求項８に記載のプロセッサ。
【請求項１０】
前記メイン発行キュー・アレイが、前記メイン発行キュー・アレイ内の各命令の経過時間情報を格納し、前記経過時間情報は、特定の命令が格納されている前記行内の他の命令に対する前記特定の命令の経過時間を示すものである、請求項８に記載のプロセッサ。
【請求項１１】
前記第２の行から前記第１の行に発行の方向に進む前記命令が、前記第２の行内の別の命令よりも古い経過時間を有する、請求項１０に記載のプロセッサ。
【請求項１２】
前記発行キューに結合された依存性チェッカーであって、前記メイン発行キュー・アレイ内の各々のデコードされた命令を依存性についてチェックして、各々のデコードされた命令が発行できる状態であるかどうかを判別する、依存性チェッカーをさらに備える、請求項８に記載のプロセッサ。
【請求項１３】
前記メイン発行キュー・アレイの各行は前記サイド・キュー・アレイの対応するそれぞれの行と通じており、前記メイン発行キュー・アレイの次の行における命令によって示される依存性のために前記命令が次の行に進むことができないとき、前記メイン発行キュー・アレイの第１の行ではなく前記メイン発行キュー・アレイの各行が前記サイド・キュー・アレイの対応するそれぞれの行に命令を転送できるように、前記サイド・キュー・アレイの１つの行は、前記メイン発行キュー・アレイの第１行から又は前記サイド・キュー・アレイの行と隣接する前記メイン発行キュー・アレイの行から前記発行行への実行をできる状態にある命令を受け取る前記サイド・キュー・アレイの前記発行行であり、前記サイド・キュー・アレイの前記発行行が発行できる状態にある命令を前記実行ユニットに提供する請求項８に記載のプロセッサ。
【請求項１４】
請求項８〜１３のいずれか１項に記載のプロセッサと前記プロセッサに結合される前記メモリと、
を備える情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書における開示は、情報処理システムに関し、より具体的には、情報処理システムのプロセッサにおいて命令を発行することに関する。
【背景技術】
【０００２】
情報処理システムにおける通常のプロセッサは、プロセッサの有効なスループットを増加させるために、幾つかのパイプライン・ステージを含むことができる。例えば、プロセッサは、命令をメモリからフェッチするフェッチ・ステージと、命令を命令コード及びオペランドにデコードするデコーダ・ステージと、デコードされた命令を実行する種々の実行ユニットを有する実行ステージとを含むことができる。パイプライン化は、プロセッサが、並列的にこれらのプロセッサ動作を実行することによって、より大きな効率を得ることを可能にする。例えば、デコーダ・ステージがフェッチされた命令をデコードし、その一方で、フェッチ・ステージが次の命令をフェッチしてもよい。同様に、実行ステージにおける実行ユニットがデコードされた命令を実行し、その一方で、デコーダ・ステージが別の命令をデコードしてもよい。
【０００３】
最も単純なプロセッサは、プログラム順に、すなわち、プロセッサがプログラム内の命令に遭遇する順に、命令を処理するものであった。プロセッサ設計者は、アウトオブオーダ（ＯＯＯ）で命令を実行するプロセッサを設計することによって、プロセッサの効率を向上させた。設計者は、処理される命令が、前の命令からの結果のような、まだ使用できない結果に依存するものではないという条件で、プロセッサは、プログラム順でなく命令を処理することができることを見出した。換言すれば、命令が依存性を示すものではないという条件で、プロセッサは、命令をアウトオブオーダ（ＯＯＯ）で実行することができる。
【０００４】
プロセッサが命令をアウトオブオーダ（ＯＯＯ）で実行できるようにするために、プロセッサは、デコーダ・ステージと実行ステージとの間に発行キューを含むことができる。発行キューは、デコーダ・ステージを、プロセッサの実行ステージを形成する実行ユニットから有効に分離するバッファとして機能する。発行キューは、どの命令を種々の実行ユニットに送るべきかと、それらの命令が実行ユニットに送られる順序とを決定する論理を含む。
【０００５】
プロセッサの発行キューは、該キューが、他の命令への依存性を示す１つ又はそれ以上の命令に遭遇すると、ストールすることができる。換言すれば、発行キューは、プロセッサがこうした依存性を解決するのを待機する。一旦プロセッサが依存性を解決すると、発行キューは、命令を実行ユニットに発行し続けることができ、実行が継続する。残念なことに、プロセッサがストールを引き起こす依存性を解決するまで、発行キューがストールを示したときに、プロセッサは貴重な時間を失う。今日の幾つかのプロセッサは、多数の命令をストールさせることができるが、それらは、一般に、高周波数動作に合わせて設計されているものでもないし、或いは大きな発行キューに合わせて設計されているものでもない。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述のプロセッサの非効率問題にスケーラブルな形で対処する方法及び装置に対する必要性が存在する。
【課題を解決するための手段】
【０００７】
したがって、一実施形態において、プロセッサを動作させる方法であって、命令フェッチャが命令をメモリからフェッチして、フェッチされた命令を提供する方法が開示される。この方法はまた、デコーダによって、フェッチされた命令をデコードして、デコーダがデコードされた命令を発行キューに提供するステップを含む。この方法はさらに、アウトオブオーダで実行ユニットに発行するために、デコードされた命令を、発行キューによって記憶セル行列の行及び列に格納するステップを含む。この方法はさらに、発行キューによって、発行キューの行の１つ内の発行できる状態にない第１の命令によって該発行キューがストールさせられているかどうかを判別するステップを含む。発行キューは、該発行キューの他の行を検索して、発行できる状態にある第２の命令を探索する。一実施形態において、この方法はさらに、発行キューが、第１の命令が発行キュー内にとどまっている状態で、第２の命令を実行ユニットに転送することによって第１の命令をバイパスするステップを含む。
【０００８】
別の実施形態においては、命令をメモリからフェッチして、フェッチされた命令を提供するようになっているフェッチ・ステージを含むプロセッサが開示される。プロセッサはまた、フェッチ・ステージに結合されており、フェッチされた命令をデコードする、デコーダをも含む。プロセッサはさらに、複数の実行ユニットを含む。プロセッサはまた、デコーダと複数の実行ユニットとの間に結合される発行キューを含む。発行キューは、複数の実行ユニットにアウトオブオーダで発行するためにデコードされた命令を格納する記憶セル行列の行及び列を含む。発行キューは、行の１つに発行できる状態にない第１の命令によって引き起こされたストールが存在するかどうかを判別する。その場合には、発行キューは、該発行キューの他の行内をより深く検索して、発行できる状態にある第２の命令を探索する。一実施形態において、発行キューは、第１の命令が該発行キュー内にとどまっている状態で、第２の命令を実行ユニットに転送することによって、第２の命令が第１の命令をバイパスするように構成されている。
【発明を実施するための最良の形態】
【０００９】
添付の図面は、本発明の例示的な実施形態を単に示すものであり、したがって、本発明の概念が同様に有効である他の実施形態に容易に役立つので、その範囲を限定するものではない。
【００１０】
開示されたプロセッサは、命令をメモリ・ストアからフェッチし、それらの命令をデコードする。デコードされた命令は、２つのカテゴリ、すなわち、「発行できる状態にある」命令と「発行できる状態にない」命令とに分類される。特定の命令が発行できる状態にない命令となる理由としては、１）命令が依存性を示すこと、すなわち、命令が、実行する前に、前に発行された命令の結果を必要とすること、２）命令が、「コンテキスト同期化命令」であること、すなわち、命令が、前の命令のすべての実行が終了するのを待つ必要があること、３）「パイプライン・ビジー」状態が存在すること、すなわち、プロセッサが非パイプラインの命令を既に実行しているので、命令が待機する必要があること、４）リソース・ビジー状態が存在すること、すなわち、命令が、フルになっている実行ユニットへのロード又は格納キューなどの使用不可能なリソースを必要とすることが挙げられる。
【００１１】
発行キューは、デコードされた命令を、実行ユニットに発行できる状態にない状態で保持する。依存性が解決するのを待つ間、又は他の理由で待つ間、命令が発行キューにおいてストールしているときに、キュー論理は、この時間を利用して、発行キュー内をより深く検索して、アウトオブオーダ（ＯＯＯ）で発行することができるいずれかの非依存性命令を探索する。このようにして、ストールした命令が依存性の解決を待つ間、又は発行を阻止する他の理由の解決を待つ間、有用なプロセッサの活動が継続する。
【００１２】
プロセッサの発行キューは、行及び列に配列された、命令の記憶位置アレイを含む。発行キューは、行Ｒ１、行Ｒ２、．．．ＲＮを含み、ここで、Ｎは、発行キューの深さである。発行キューは、実行のために命令を適切な実行ユニットに発行する。発行キューの出力は発行点を含み、その発行点から、発行できる状態にある命令が、命令により指示される機能を実行できる実行ユニットに発行される。行Ｒ１が、依存性を示す命令のような発行できる状態にない命令を含む場合には、行Ｒ１は、発行点を越えて進むことはできない。この条件が、発行キューの行Ｒ１をストールさせる。しかしながら、発行キューがこのようにストールすると、発行キュー論理が、発行することができる非依存性命令について、行Ｒ（１＋１）、すなわち、行Ｒ２内をより深く検索することができる。発行キュー論理が、行Ｒ２内でこうした非依存性命令を検出した場合には、非依存性命令は、非依存性命令の前にあるストールした行Ｒ１をバイパスする。このようにして、プロセッサは、より古い依存性命令がストールしている間に、有用な作業を行うことができる。
【００１３】
一実施形態において、プロセッサは、上述の構造を行Ｒ１、行Ｒ２、．．．ＲＮから再帰的に反復し、ここで、Ｎは発行キューの深さを表す。換言すれば、プロセッサは、行を互いに対し再帰的に構成する。行ＲＮが、依存性を含まない命令、すなわち、発行できる状態にある命令を含む場合には、発行キュー論理は、その命令を前の行Ｒ（Ｎ−１）に進める。このようにして、その命令は、さらなるストールが発生すると、行から行へと行Ｒの方向に進むことができ、発行キューのより深い検索がもたらされる。進行する命令が行Ｒ１に到達すると、発行キュー論理により、命令が適切な実行ユニットに発行される。
【００１４】
図１は、メモリ１０５に結合されるプロセッサ１００のブロック図を示す。プロセッサ１００は、メモリ１０５から命令及びデータを受け取るために、メモリ１０５に結合されるＬ２インタフェース１１０を含む。メモリ１０５は、プログラム順に編成された命令を格納する。プロセッサ１００が命令をメモリ１０５からフェッチできるようにするために、Ｌ２インタフェース１１０にフェッチ・ステージ１１５が結合される。より特定的には、フェッチ・ステージ１１５は、Ｌ２インタフェース１１０及びＬ１命令キャッシュ１２５に結合される、フェッチ・ユニット１２０を含む。メモリ１０５からフェッチ・ユニット１２０を通して送られる命令をプレデコードするために、プレデコード・ユニット１３０が、Ｌ２インタフェース１１０をＬ１命令キャッシュ１２５に結合する。Ｌ１命令キャッシュ１２５は、示されるように、プレデコード・ユニット１３０及びディスパッチ・ユニット１３５に結合される。
【００１５】
ディスパッチ・ユニット１３５は、示されるように、直接にマルチプレクサ（ＭＵＸ）１４５を介して、又は代替的にマイクロコード・ユニット１５０及びＭＵＸ１４５を通してデコーダ１４０に結合される。このように、ディスパッチ・ユニット１３５は、より小さい命令への分解を必要としない命令を、ＭＵＸ１４５を通してデコーダ１４０に伝送する。代替的に、より小さい命令への分解を必要とするサイズを示す、ディスパッチされる命令は、マイクロコード・ユニット１５０を通過する。マイクロコード・ユニット１５０は、これらの命令をより小さい命令に分け、それを、ＭＵＸ１４５がデコードのためにデコーダ１４０に伝送する。
【００１６】
デコーダ１４０は、フェッチ・ステージ１１５によって該デコーダに提供された命令をデコードする。デコーダ１４０は依存性チェッカー１５５に結合され、依存性チェッカーは、各々のデコードされた命令をチェックして、デコードされた命令が該デコードされた命令の後の命令への依存性を示すかどうか、すなわち、オペランド又は結果が現在のところ使用可能ではないかどうかを判別する。依存性チェッカー１５５は、発行制御の状態マシン２０２と発行キュー２０４とを含む発行ステージ２００に結合される。発行ステージ２００は、受け取った各々のデコードされた命令を、固定小数点ユニット１７０、又は、ベクトル／浮動小数点ユニット１８０、或いはその両方内の適切な実行ユニットに送る。発行ステージ２００は、発行できる状態にあるそうした命令を効率的に判別し、そうした命令を適切な実行ユニットに速やかに発行する。
【００１７】
固定小数点ユニット１７０は、図１に示すように、すべてが共に結合される、ロード／格納実行ユニット１７１と、固定小数点実行ユニット１７２と、分岐実行ユニット１７３と、完了／フラッシュ・ユニット１７４とを含む。ベクトル／浮動小数点ユニット１８０は、図１に示すように、すべてが共に結合される、ベクトル・ロード／格納ユニット１８１と、ベクトル演算論理ユニット（ＡＬＵ）１８２と、浮動小数点ユニット（ＦＰＵ）の演算論理ユニット（ＡＬＵ）１８３と、ＦＰＵロード／格納ユニット１８４と、ベクトル完了ユニット１８５と、ＦＰＵ完了ユニット１８６とを含む。ベクトル／浮動小数点ユニット１８０のベクトル完了ユニット１８５及びＦＰＵ完了ユニット１８６は、固定小数点ユニット１７０の完了／フラッシュ・ユニット１７４に結合される。完了ユニット１７４、１８５及び１８６は、順番に命令をリタイヤすること、関連する実行ユニットにおいて生じることがある例外条件を処理することなどのタスクを実行する。
【００１８】
デコーダ１４０は、発行キュー２０４を介してデコードされた命令を適切な実行ユニットにディスパッチする。発行キュー２０４は、以下により詳細に説明されるように、こうした命令についての依存性が解決すると、キュー命令を適切な実行ユニットに発行する。発行キュー２０４は、図２に示すように、行及び列に配列された記憶セル又はラッチ２１２のメイン発行キュー・アレイ２１０を含む。各々のラッチ２１２が、デコーダ１４０によって提供される命令を格納する。より特定的には、メイン発行キュー・アレイ２１０は、行Ｒ１、Ｒ２、．．．ＲＮを含み、ここで、Ｎは、メイン発行キュー・アレイ２１０内の行の総数である。この特定の例においては、Ｎ＝４であり、よって、メイン発行キュー・アレイは４行を含む。同様に、この特定の例においては、メイン発行キュー・アレイ２１０は４列を含む。メイン発行キュー・アレイ２１０は、特定の用途に応じて、示されたものより多い又は少ない数の行及び列を採用することができる。
【００１９】
この特定の実施形態においては、命令が完全に読み込まれると、メイン発行キュー・アレイ２１０は、１６の命令、すなわち、４行の各々につき４つの命令を格納することができる。メイン発行キュー・アレイ２１０は、これらの命令を８つのグループに分け、その各々が、２つの命令を含む。したがって、完全に読み込まれると、メイン発行キュー・アレイ２１０は、各々２つの命令からなる８つのグループ、すなわち、行Ｒ１における命令グループ１及び２と、行Ｒ２における命令グループ３及び４と、行Ｒ３における命令グループ５及び６と、行Ｒ４における命令グループ７及び８とを含む。
【００２０】
発行キュー２０４はさらに、代替的な経路を実行ユニットに提供する補助キュー又はサイド・キュー２１５を含む。この特定の実施形態においては、サイド・キュー２１５は、メイン発行キュー・アレイ２１０の１行につき２つの記憶セルを含む。グループ１及びグループ２の命令に対応する行Ｒ１の記憶セルは、サイド・キューの記憶ユニット２２１及び２２２の両方に結合される。サイド・キューの記憶ユニット２２１及び２２２は発行行を形成し、この発行行から命令が実行ユニットに発行される。各々のサイド・キューの記憶ユニットは、図２に示すように、マルチプレクサと記憶セルとの両方を含む。例えば、サイド・キューの記憶ユニット２２１は、ラッチ又は記憶セル２２１Ｂに結合されるＭＵＸ２２１Ａを含む。図２は、説明の都合上、記憶セル２２１Ｂと共に結合されるＭＵＸ２２１Ａを示す。サイド・キューの記憶ユニット２２２は、ラッチ又は記憶セル２２２Ｂに結合されたＭＵＸ２２２Ａを含む。一旦命令が記憶セル２２１Ｂ及び２２２Ｂに転送されると、こうした命令は、実行のために適切な実行ユニットに発行される。
【００２１】
サイド・キュー２１５が１行のメイン発行キュー・アレイ２１０につき２つの記憶セルを含む、この特定の実施形態においては、サイド・キュー２１５は、１プロセッサ・クロック周期につき２つの命令を発行することができる。したがって、メイン発行キュー・アレイ２１０の行Ｒ１がグループ１及びグループ２において全部で４つの有効な命令を含むとすれば、命令が以下に説明される特定の基準に適合するとすれば、それらの４つの命令のうちの２つは、それぞれサイド・キューの記憶セル２２１及び２２２に移動することができる。
【００２２】
サイド・キュー２１５はまた、示されるように、行Ｒ２の記憶セル２１２に結合されるサイド・キューの記憶セル２３１及び２３２を含む。サイド・キューの記憶セル２３１及び２３２は、共にサイド・キュー２１５内の行を形成する。サイド・キュー２１５はさらに、行Ｒ３の記憶セル２１２に結合されるサイド・キューの記憶セル２４１及び２４２を含む。サイド・キューの記憶セル２４１及び２４２は、共にサイド・キュー２１５内の別の行を形成する。サイド・キュー２１５はさらにまた、行Ｒ４の記憶セル２１２に結合されるサイド・キューの記憶セル２５１及び２５２を含む。サイド・キューの記憶セル２５１及び２５２は、共にサイド・キュー２１５内のさらに別の行を形成する。行Ｒ１、Ｒ２、Ｒ３又はＲ４における記憶セル２１２の１つが命令を格納すると、発行キュー２０４は、そのセルを、有効な入力を格納するものとみなす。しかしながら、セルが命令を格納しない場合には、発行キュー２０４は、こうした占有されていないセルを、無効な入力を示すものとみなす。
【００２３】
図１及び図３に示される発行制御の状態マシン２０２は、デコーダ１４０から受け取った命令を、使用可能なＲ１からＲ４までの任意の記憶セルに格納することができる。プロセッサ１００が初期化するときに、メイン発行キュー・アレイ２１０のすべての記憶セルが空になる。同様に、サイド・キュー２１５のすべての記憶セルも、プロセッサ１００が初期化するときに空になる。プロセッサ動作が始まると、発行制御の状態マシンは、まず最高優先度の記憶セル２１２をアレイ２１０に読み込む。一実施形態において、プロセッサ１００は、最下位行、すなわち、行Ｒ１を、その行が最も発行に近い、アレイ２１０の中の最高優先度の行と定義する。これは、行Ｒ１の記憶セルに格納される命令が、メイン発行キュー・アレイ２１０の他の行より発行に近いことを意味するものである。行Ｒ２は、行Ｒ１に後続する次の最高優先度を示す。次に、行Ｒ３は、行Ｒ２に後続する次の最高優先度を示し、以下同様にアレイにおいて上方に向かう。より高い優先度は、行Ｒ１における命令が、以下により詳細に説明されるように、行Ｒ２及びこれより上にある命令より発行に近いことを意味する。規則により、メイン発行キュー・アレイ２１０の各々の行において、メイン発行キュー・アレイの各々の行の左端部に近い命令は、各々の行の右の方に近い命令より高い優先度を示す。この規則が逆になる代替的な実施形態も可能である。
【００２４】
行Ｒ１内のグループ１又はグループ２として格納される命令は、サイド・キューの記憶ユニット２２１又はサイド・キューの記憶ユニット２２２を介して実行ユニットに発行されることになる。実行ユニットは、図２に示すように、サイド・キューの記憶ユニット２２１及び２２２の出力に結合される。１プロセッサ周期で、発行制御の状態マシン２０２は、マルチプレクサ２２１Ａに、行Ｒ１に格納されるグループ１及びグループ２の命令のいずれかを選択し、選択された命令を記憶セル２２１Ｂに格納するように指示することができる。同じプロセッサ周期で、発行制御の状態マシン２０２は、マルチプレクサ２２２Ａに、行Ｒ１内の既に選択されていないグループ１及びグループ２の命令のいずれかを選択し、選択された命令を記憶セル２２２Ｂに格納するように指示することもできる。サイド・キュー２１５は、このようにして、行Ｒ１から２つの命令を選択して格納する。一実施形態において、サイド・キュー２１５は、命令を同じグループから選択する。例えば、グループ１が２つの命令を与えるか、又はグループ２が２つの命令を与えて、記憶セル２２１Ｂ若しくは２２２Ｂに格納する。サイド・キュー２１５が１つの命令をグループ１から選択し、そしてまた１つの命令をグループ２から選択して、記憶セル２２１Ｂ及び２２２Ｂに格納する、他の実施形態も可能である。次のプロセッサ周期で、サイド・キューの記憶ユニット２２１及びサイド・キューの記憶ユニット２２２に格納される命令は、適切な実行ユニットに発行される。
【００２５】
同様に、発行制御の状態マシン２０２は、サイド・キューの記憶ユニット２３１及び２３２に、グループ３及びグループ４からの命令を行Ｒ２に格納するように指示することができる。発行制御の状態マシン２０２は、サイド・キューの記憶ユニット２４１及び２４２に、グループ５及びグループ６からの命令を行Ｒ３に格納するように指示することもできる。発行制御の状態マシン２０２はさらに、サイド・キューの記憶ユニット２５１及び２５２に、グループ７及びグループ８からの命令を行Ｒ４に格納するように指示することができる。メイン発行キュー・アレイ２１０及びサイド・キュー２１５は、テンプレートとして、図２の接続パターンに従うことによって、付加的な行を含むように調整することができる。より特定的には、メイン発行キュー・アレイ２１０及びサイド発行キュー２１５は、行Ｒ２及び関連するサイド・キューの記憶ユニット２３１−２３２が反復し、行Ｒ１及び下位にある関連するサイド・キューの記憶ユニット２２１−２２２の接続パターンに従うため、再帰的なトポロジを示す。同様に、行Ｒ３及び関連するサイド・キューの記憶ユニット２４１−２４２は、下位にある行に対して再帰的なトポロジを示し、以下行Ｒ４及びこれより上位の行（図示せず）についても同様である。一実施形態において、発行制御の状態マシン２０２は、発行できる状態にある命令をサイド・キュー２１５に転送する。
【００２６】
サイド・キューの記憶ユニット２３１の出力は、サイド・キューの記憶ユニット２２１及び２２２の各々の入力に結合される。サイド・キューの記憶ユニット２３２の出力は、サイド・キューの記憶ユニット２２１及び２２２の各々の入力に結合される。したがって、サイド・キューの記憶ユニット２３１及び２３２に格納される命令は、サイド・キューの記憶ユニット２２１及び２２２を介して適切な実行ユニットに発行されるように進めることができる。
【００２７】
サイド・キューの記憶ユニット２４１の出力は、サイド・キューの記憶ユニット２３１及び２３２の各々の入力に結合される。サイド・キューの記憶ユニット２４２の出力は、サイド・キューの記憶ユニット２３１及び２３２の各々の入力に結合される。したがって、サイド・キューの記憶ユニット２４１及び２４２に格納される命令は、行Ｒ２に関連するサイド・キューの記憶ユニット２３１及び２３２を介して、及び、行Ｒ１に関連するサイド・キューの記憶ユニット２２１及び２２２を介して、適切な実行ユニットに発行されるように進めることができる。
【００２８】
最後に、サイド・キューの記憶ユニット２５１の出力は、サイド・キューの記憶ユニット２４１及び２４２の各々の入力に結合される。サイド・キューの記憶ユニット２５２の出力は、サイド・キューの記憶ユニット２４１及び２４２の各々の入力に結合される。したがって、サイド・キューの記憶ユニット２５１及び２５２に格納される命令は、行Ｒ３に関連するサイド・キューの記憶ユニット２４１及び２４２を介して、行Ｒ２に関連するサイド・キューの記憶ユニット２３１及び２３２を介して、及び、行Ｒ１に関連するサイド・キューの記憶ユニット２２１及び２２２を介して、適切な実行ユニットに発行されるように進めることができる。発行できる状態にある命令は、以下により詳細に説明されるように、サイド・キューを通して１プロセッサ周期につき１行のサイド・キューを実行の方向に進めることができる。
【００２９】
命令は、発行キュー２０４に結合される実行ユニットに到達するために、発行キュー２０４を通して２つの経路を取ることができる。メイン発行キュー・アレイ２１０は、命令が発行キュー２０４を通して進むための１つの経路を提供し、一方、サイド・キュー２１５は、発行キュー２０４を通る別の経路を提供する。実際には、命令は、実行のために適切な実行ユニットに発行される前に、メイン発行キュー・アレイ２１０の一部及びサイド・キュー２１５の一部を通ることになる。メイン発行キュー・アレイ２１０内の特定の行が依存性又は他の理由のために発行することができない命令で埋め尽くされる可能性がある。こうした行がストール点になるのは、ストールした行より上の行における命令が下位行に進み、実行ユニットに発行されることを、それが阻止するからである。行がこうしたストール点を示す場合は、ストールした行より上の行は、発行制御の状態マシン２０２によって指示される通りに、その命令をサイド・キュー２１５に転送することによって、ストールした行をバイパスすることができる。一旦サイド・キュー２１５において、転送される命令が行から行へと進むと、それらがサイド・キューの最下位の記憶ユニット２２１及び２２２に結合される実行ユニットに発行されるまで、その後のプロセッサ周期でサイド・キューにおいてだんだん下に進んで行く。
【００３０】
以下の一連の例は、異なる動作条件下の発行キュー２０４の動作を説明するものである。一例では、発行制御の状態マシン２０２は、１プロセッサ周期中に２つの有効な命令を行Ｒ１のグループ１に挿入する。これらの命令は、発行できる状態にある。換言すれば、これらの命令は、これらが直ちに実行ユニットに発行することができない理由を示さない。アウトオブオーダ（ＯＯＯ）の発行キューにおいて命令の即時実行を阻止する理由は、命令が他の命令の結果への依存性を示すことである。換言すれば、命令によって要求される必要なオペランドは、現在のところ使用可能ではない。しかしながら、この例においては、行Ｒ１のグループ１が依存性を持たない２つの有効な命令を含むため、行Ｒ１は、これらの２つの発行できる状態にある命令をサイド・キュー２１５の記憶セル２２１及び２２２のそれぞれに供給し、該記憶セルから、これらの命令が、該記憶セルに結合される実行ユニットに発行されることになる。発行制御の状態マシン２０２が依存性を持たない２つの有効な命令を行Ｒ１のグループ１に挿入した後の次のプロセッサ周期では、状態マシン２０２は、依存性を持たない２つの有効な命令を行Ｒ１のグループ２に挿入する。次のプロセッサ周期において、メイン発行キュー・アレイ２１０が、実行を遅らせる理由が存在しないので、行Ｒ１のグループ２における２つの命令を、実行のために記憶セル２２１及び２２２に転送する。行Ｒ１のグループ２が、その２つの命令を、実行ユニットに伝送するために記憶セル２２１及び２２２に送るプロセッサ周期と同じプロセッサ周期において、状態マシン２０２が、別の２つの命令を空のグループ１の記憶セルに送る。したがって、１）第１のプロセッサ周期中に、行Ｒ１のグループ１の２つの命令が、実行ユニットに転送するために記憶セル２２１及び２２２に転送され、２）第２のプロセッサ周期中に、行Ｒ１のグループ２の２つの命令が、実行のためにセル２２１及び２２２に転送され、３）第３のプロセッサ周期中に、行Ｒ１のグループ１の２つの命令が、実行のために再度セル２２１及び２２２に転送されるなどの、「ピンポン」効果が確認される。このように、発行キュー２０４のトポロジが、依存性を持たない命令の最適な命令スループットを提供する。別の言い方をすれば、行Ｒ１が依存性を持たない命令の供給を受け取ると、これらの命令は、サイド・キュー２１５の最下位のセルに直ちに発行され、そこからこれらは実行のために適切な実行ユニットに転送される。換言すれば、グループ１が埋め尽くされ、次いでグループ２が埋め尽くされると、グループ１が発行され、グループ１が再び埋め尽くされると、グループ２が発行され、グループ２が再び埋め尽くされると、グループ１が発行されるなど、以下同様である。
【００３１】
上述の例では、発行キュー２０４は、同じプロセッサ周期で、２つの命令を受け取り、２つの命令を発行して、完全なスループットを提供する。換言すれば、デコーダ１４０が、依存性チェッカー１５５を介して、依存性を持たないデコードされた一連の命令を発行ステージ２００及び発行キュー２０４に提供する場合は、発行キュー２０４は、命令の発行を妨害しない。上述の例は、発行キュー２０４が依存性を持たない一連の命令を受け取り始めると、それが空になると想定している。このシナリオでは、発行キュー２０４は、何らかの依存性が解決するのを待機するアイドル時間を持たない１００％のスループットを達成する。
【００３２】
以下の説明では、最下位行、すなわち、行Ｒ１は、依存性を示す４つの命令で埋め尽くされる。すべての４つの記憶セル２１２すなわち行Ｒ１へのエントリは、命令がこれらの記憶セルを占有しているので、ここでは有効である。しかしながら、依存性を示す命令がここで行Ｒ１全体に読み込まれるため、行Ｒ１からの命令は、実行のために直ちには実行ユニットに発行されない。換言すれば、行Ｒ１におけるグループ１及びグループ２の命令が依存性を示し、これらの依存性が解決するまでは発行されない。行Ｒ１が直ちには記憶ユニット２２１及び２２２を介して実行ユニットに発行しないため、行Ｒ１はストールし、行Ｒ１より上の行が、デコーダ１４０からの命令で埋め尽くされ始める。
【００３３】
行Ｒ２は依存性を示さないグループ３及びグループ４の命令を読み込んでおり、且つ、行Ｒ１は依存性を示すので発行しないと仮定すると、行Ｒ２は、サイド・キュー２１５に転送又は発行することによって、行Ｒ１を効果的にバイパスする。規則によって、行の左側に近い命令が、行の右側に近い命令より高い優先度を示す。したがって、行Ｒ２における４つの命令のすべてが依存性を示さない場合には、グループ３の命令が、発行制御の状態マシン２０２の制御下でサイド・キュー２１５に発行される。より特定的には、グループ３における最も左側の命令は、記憶ユニット２３１に転送され、グループ３における残りの命令は、記憶ユニット２３２に転送される。サイド・キューの記憶セルの対２２１−２２２、２３１−２３２、２４１−２４２及び２５１−２５２の各々が結合され、行Ｒ１、行Ｒ２、行Ｒ３及び行Ｒ４のそれぞれから命令を受け取ることができることに留意されたい。この実施形態においては、１プロセッサ周期につき、２つの命令が、サイド・キュー２１５に転送され得る。その後のプロセッサ周期では、行Ｒ１における命令が依存性を依然として示すとすれば、グループ３の命令が、サイド・キュー２１５の記憶セル２２１及び２２２を介して適切な実行ユニットに発行される。このように、サイド・キュー２１５内のより高次の記憶セルの対に発行される依存性を持たない命令は、実行のために最終的に命令の対を適切な実行ユニットに発行して記憶セルの対２２１−２２２の方向に下方に転送される。したがって、行Ｒ１が依存性を持つ命令を含んでいても、行Ｒ２が、サイド・キュー２１５を介して発行することによって、ストールした行Ｒ１をバイパスする。
【００３４】
同様に、行Ｒ１及び行Ｒ２が、発行できる状態にない依存性命令で完全に埋め尽くされる場合には、依存性を持たない行Ｒ３における命令が、サイド・キューの記憶セルの対２４１−２４２、２３１−２３２及び２２１-２２２を通って適切な実行ユニットに流れることによって発行されることになる。一実施形態において、２つの命令がサイド・キュー２１５において記憶セルの対から対へと実行ユニットの方向に流れるのに、１プロセッサ周期を要する。さらに、行Ｒ１、行Ｒ２及び行Ｒ３が直ちには発行されない依存性命令で完全に埋め尽くされる場合には、依存性を持たない行Ｒ４における命令が、サイド・キューの記憶セルの対の２５１−２５２、２４１−２４２、２３１−２３２及び２２１−２２２を通って適切な実行ユニットに流れることによって発行される。
【００３５】
別の動作シナリオでは、行Ｒ１、Ｒ２、Ｒ３及びＲ４が依存性を示す命令で完全に埋め尽くされると仮定する。このシナリオでは、メイン発行キュー・アレイ２１０は、１プロセッサ周期では、発行できる状態にある命令を含んでいない。しかしながら、次のプロセッサ周期では、行Ｒ１におけるグループ１の命令の依存性が解決する。こうした解決に応答して、ここで発行できる状態にあるグループ１の命令が、サイド・キューの記憶セル２２１及び２２２に転送される、すなわち流入する。グループ３の命令がここで解決すると仮定する。その後のプロセッサ周期では、記憶セル２２１及び２２２におけるグループ１の命令は、適切な実行ユニットに発行され、行Ｒ２からのグループ３の命令は、既にサイド・キュー２１５に移動したグループ１の命令によって残されている行Ｒ１における占有されていない記憶セルに流入する。このようにして、より高い行における命令が、サイド・キューに移動した命令によって残されているより低い行における空きに流入、すなわち浸透する。この浸透アクションが、同様に良好に行Ｒ３及び行Ｒ４に適用される。
【００３６】
発行制御の状態マシン２０２が上位行からの命令をメイン発行キュー・アレイ２１０の下位の行における空きへ移動させるか又はその命令をサイド・キュー２１５へ移動させるかのいずれかの選択を有する場合には、状態マシン２０２は、該命令をメイン発行キュー・アレイ２１０内の下位の行へ移動させる。
【００３７】
図２に示される発行キュー２０４は、設計効率のために再帰構造である。再帰的とは、行Ｒ１の構造及びその関連する記憶セルの対２２１−２２２が、図２に示されるトポロジについて完全な発行キュー２０４から上方に３回反復することを意味する。換言すれば、行Ｒ２及び関連する記憶セルの対２３１−２３２は、構造的には、行Ｒ１及び記憶セルの対２２１−２２２の反復である。同様に、行Ｒ３及びその記憶セルの対２４１−２４２、並びに行Ｒ４及びその記憶セルの対２５１−２５２は、この場合も、行Ｒ１及びその記憶セルの対２２１−２２２の構造を反復するものである。この再帰トポロジを用いて、発行キュー２０４は、特定の用途に望まれるより多くの又はより少ない行及び関連するサイド・キューの記憶セルの対を含むことができる。
【００３８】
別のシナリオでは、行Ｒ１は、発行できる状態にない命令で完全に埋め尽くされる。例えば、グループ１及びグループ２の命令のすべてが依存性を示し、よって、行Ｒ１はストールする。しかしながら、行Ｒ２は、発行できる状態にある命令を有するグループ３を含む。発行制御の状態マシン２０２は、１プロセッサ周期中に、発行できる状態にあるグループ３の命令を、サイド・キュー２１５の記憶セル２３１及び２３２に配置する。次のプロセッサ周期では、行Ｒ１における依存性のすべてが解決する。したがって、行Ｒ１における４つの命令のすべて、すなわち、グループ１の命令及びグループ２の命令は、発行できる状態にある。さらに、記憶セル２３１及び２３２は、行Ｒ２のグループ３からの２つの発行できる状態にある命令を含む。したがって、６つの命令、すなわち、行Ｒ１における４つ及びサイド・キューの記憶セル２３１−２３２における２つが、ここで発行できる状態にある。
【００３９】
行Ｒ１は、行Ｒ２の前に命令が読み込まれているため、定義によって、行Ｒ１は、ここではサイド・キューの記憶セル２３１−２３２にあるグループ３の命令より古い命令を含む。発行制御の状態マシン２０２は、ここでは、これらの６つの命令のうちの２つの命令が最下位の記憶セル２２１−２２２を介して発行されることに関する６通りの決定を下す。以下により詳細に説明されるように、発行制御の状態マシン２０２は、経過時間ビットと、発行キュー２０４内の各々の命令とを関連付ける。このようにして、発行制御の状態マシン２０２は、発行キュー２０４内の他の命令の経過時間に対する発行キュー２０４内の各々の命令の経過時間を監視する。規則によって、メイン発行キュー・アレイ２１０の如何なる行における一番左側の命令も、こうした行の一番右側の命令より古い。したがって、行Ｒ１においては、グループ１の命令は、グループ２の命令より多い経過時間を示す。いずれの命令が実行ユニットに発行されるべきかを検討するときは、発行制御の状態マシン２０２は、より高い経過時間を示すこれらの命令により大きな優先度を与える。したがって、発行制御の状態マシン２０２は、６つの発行できる状態にある命令のうちの行Ｒ１のグループ１の命令を、サイド・キューの記憶セル２２１−２２２に送って、それに結合される実行ユニットに発行する。行Ｒ１のグループ２の命令は、ここではサイド・キューの記憶セル２３１−２３２に格納されるグループ３の命令より高い経過時間を示す。したがって、発行制御の状態マシン２０２は、グループ２の命令をサイド・キューの記憶セル２２１−２２２に送って、次のプロセッサ周期で実行ユニットに発行する。発行制御の状態マシン２０２は、ここではサイド・キューの記憶セル２３１−２３２にあるグループ３の命令と関連付けられる経過時間ビットを監視し、これらの命令がより新しいグループ３又はグループ４の命令より高い経過時間を示すと判別し、該命令が行Ｒ１に流入、すなわち浸透する。したがって、発行制御の状態マシン２０２は、記憶セル２３１−２３２内のグループ３の命令をサイド・キューの最下位の記憶セル２２１−２２２に送って、新たに読み込まれた行Ｒ１の命令が発行される前に実行ユニットに発行する。
【００４０】
発行制御の状態マシン２０２により、メイン発行キュー・アレイ２１０内の命令が発行できる状態にないことが見出される場合には、発行制御の状態マシン２０２は、その命令を、空き又は占有されていない記憶セルを含む、アレイ２１０内の下位行に送ることができる。こうしたアクションは、垂直方向の圧縮を示すものである。代替的な言い方をすれば、こうした下位行が空き又は占有されていないセルを含むとすれば、発行制御の状態マシン２０２は、発行できる状態にない命令を発行キュー・アレイ２１０内の上位行から下位行へ圧縮又は転送することができる。しかしながら、この実施形態においては、発行制御の状態マシン２０２は、発行できる状態にない命令をサイド・キュー２１５、すなわち実行ユニットに発行することができない。一実施形態において、メイン発行キュー・アレイ２１０も、上述のように、発行できる状態にある命令を圧縮することができる。
【００４１】
別の実施形態においては、発行制御の状態マシン２０２は、発行ステージ２００の発行キュー２０４を制御するために、幾つかの状態マシンを含む。より特定的には、図３に示すように、発行制御の状態マシン２０２は、命令の経過時間制御のための優先度の状態マシン４００と、挿入制御の状態マシン５００と、最下位行の発行制御の状態マシン６００と、上位行の圧縮及びサイド発行の状態マシン７００と、発行できる状態にある状態マシン８００とを含む。これらの状態マシンは、組み合わされて作動し、協働して、発行キュー２０４のスループットを向上させる。
【００４２】
図４は、発行キュー２０４内の命令の経過時間を管理する優先度の状態マシン４００の動作を表すフローチャートを示す。経過時間とは、ソフトウェア・コンパイラ（図示せず）によって決定される、ソフトウェア・プログラム内の命令のプログラム順のことをいう。非揮発性記憶装置（図示せず）は、コンパイルされたソフトウェア・プログラムを格納するために、プロセッサ１００に結合される。ソフトウェア・コンパイラは、プロセッサ１００が最終的に実行するソフトウェア・プログラムのプログラム順を決定する。命令の経過時間に関しては、プロセッサ１００は、ソフトウェア・コンパイラが第２の命令の前に実行するように設定する第１の命令をより古い命令と定義する。同様に、命令の経過時間に関しては、プロセッサ１００は、ソフトウェア・コンパイラが第４の命令の後に実行するように設定する第３の命令をより新しい命令と定義する。一実施形態において、プロセッサ１００は、優先度を、発行キュー２０４内のより新しい命令よりも、より古い命令に与える。この手法は、性能を向上させ、発行キュー２０４の複雑性を軽減する傾向がある。
【００４３】
図５は、デコーダ１４０からの命令が読み込まれた発行キュー２０４を示す。発行制御の状態マシン２０２は、いずれの命令が発行キュー２０４内のいずれの記憶セル２１２又は命令位置まで進むのかを決定する。図５で分かるように、命令を格納する各々の記憶セルが、経過時間ビットをも格納する。行ごとの基準では、０の経過時間ビットが、より古い命令を示すのに対して、１の経過時間ビットは、より新しい命令を示す。発行制御の状態マシン２０２は、発行キュー２０４の記憶セルに格納される命令を、左から右へ進むのに伴って列が新しくなるように構成する。換言すれば、この規則によって、発行キュー２０４の一番左側の列は、特定の行のうちの最も古い命令を格納し、一番右側の列は、その特定の行の最も新しい命令を格納する。他の実施形態は、必要に応じて、この規則を逆にすることができる。
【００４４】
上述のように、上位行からの命令は、下位行の空いている記憶セルに圧縮又は流入することができる。優先度の状態マシン４００が経過時間ビットを１（より新しいもの）に設定する場合は、これは、特定の行内では、特定の命令が上の行から圧縮されることを示す。したがって、その特定の圧縮された命令は、他の圧縮されていない命令、すなわちその特定の行へのエントリのすべてより新しい経過時間を示す。同様に、特定の行に関しては、発行できる状態にあることを示す、その行におけるすべての命令のうち、より古い命令が、より低い行へのさらなる圧縮又はサイド・キュー２１５への発行に対して、より新しい命令を上回る優先度を受ける。同じ経過時間ビットを有する、特定の行における命令間では、優先度の状態マシン４００が、左から右へ高くなる優先度を与える。
【００４５】
図４のフローチャートに戻ると、発行制御の状態マシン２０２が、まず、各々の命令を、メイン発行キュー・アレイ２１０の或る行の空いている記憶セルに挿入するときに、優先度の状態マシン４００が、ブロック４０５に従って、こうした最初に挿入される命令の経過時間ビットをゼロに設定する。しかしながら、命令が、上位行から下位行の記憶セル内の空きに圧縮又は流入するときに、優先度の状態マシン４００は、ブロック４１０に従って、その圧縮された命令の経過時間ビットを１に設定する。これにより、新たに圧縮される命令は、該圧縮される命令が到達する同じ行にある他のより古い命令と区別される。同様に、ブロック４１０に従って、命令がメイン発行キュー・アレイ２１０内の行から、その行に対応する記憶セルの対のサイド・キューの記憶セルへ流入又は転送されるときに、優先度の状態マシン４００は、その命令の経過時間ビットを１に設定する。ブロック４１５において、優先度の状態マシン４００は、特定の行におけるすべての命令が経過時間ビット＝１を示すかを判別するためにテストを行う。示さなければ、優先度の状態マシン４００は、特定の行におけるすべての命令が経過時間ビット＝１を示すまで、テストを行い続ける。優先度の状態マシン４００は、特定の行に格納されたすべての命令が経過時間ビット＝１を示すと判別すると、状態マシン４００は、ブロック４２０に従って、その行におけるすべての命令について経過時間ビット＝０をリセットする。次に、プロセス・フローは、特定の行における圧縮又はサイド発行される命令ごとに、経過時間ビット＝１を設定するブロック４１０に戻って続行する。
【００４６】
図５の読み込まれる発行キュー２０４に戻ると、この例は、発行キュー２０４の記憶セル内の各々の命令と共に格納される経過時間ビットの動作を示す。メイン発行キュー・アレイ２１０の行Ｒ１−Ｒ４の各々は、それぞれの記憶セル、すなわち、命令ＩＮＳＴＲ１、ＩＮＳＴＲ２、ＩＮＳＴＲ３及びＩＮＳＴＲ４内に４つの命令を含む。サイド・キューの記憶セル２２１−２２２は、サイド・キューの記憶セル２２１−２２２が行Ｒ１の記憶セルに結合されて、実行ユニットに発行されることになる命令を受け取るという点で、行Ｒ１の記憶セルに対応するものである。図５（発行キュー２０４）は、これらのセルの各々が実行ユニットに発行されることになる次の命令を格納することができるため、記憶セル２２１−２２２をＩＳＳＵＥ  ＩＮＳＴとラベル付けする。サイド・キューの記憶セル２３１−２３２は、サイド・キューの記憶セル２３１−２３２が行Ｒ２の記憶セルに結合されて、実行ユニットに転送されることになる命令を受け取るという点で、行Ｒ２の記憶セルに対応するものである。図５は、これらのセルの各々が行Ｒ２又は上にあるサイド・キューの記憶セル２４１−２４２から命令を受け取ることができるため、記憶セル２３１−２３２をＩＮＳＴＲ５及びＩＮＳＴＲ６とラベル付けする。サイド・キューの記憶セル２４１−２４２は、サイド・キューの記憶セル２４１−２４２が行Ｒ３の記憶セルに結合されて、実行ユニットに転送されることになる命令を受け取るという点で、行Ｒ３の記憶セルに対応するものである。図５は、これらのセルの各々が行Ｒ３又は上にあるサイド・キューの記憶セル２５１−２５２から命令を受け取ることができるため、記憶セル２４１−２４２をＩＮＳＴＲ５及びＩＮＳＴＲ６とラベル付けする。サイド・キューの記憶セル２５１−２５２は、サイド・キューの記憶セル２５１−２５２が行Ｒ４の記憶セルに結合されて、実行ユニットに転送されることになる命令を受け取るという点で、行Ｒ４の記憶セルに対応するものである。図５（発行キュー２０４）は、これらのセルの各々が行Ｒ４からの命令を受け取ることができるため、記憶セル２５１−２５２をＩＮＳＴＲ５及びＩＮＳＴＲ６とラベル付けする。
【００４７】
ここで、行Ｒ１における命令ＩＮＳＴＲ１−ＩＮＳＴＲ４を参照すると、発行優先度は、すべてが経過時間＝０を示す、ＩＮＳＴＲ１、ＩＮＳＴＲ３、ＩＮＳＴＲ４である。ＩＮＳＴＲ１は、行Ｒ１における一番左側の命令としてのＩＮＳＴＲ１の位置のため、記憶セルの対２２１−２２２を介して最初に発行される。行Ｒ１において左から右へ移動すると、次に、ＩＮＳＴＲ３が発行され、続いてＩＮＳＴＲ４が発行される。ここでは、経過時間＝１を有する行Ｒ１における如何なる残りの命令も発行され、よって、ＩＮＳＴＲ２が、記憶セルの対２２１−２２２を介して発行される。上述の行Ｒ１の命令の発行に続いて、命令ＩＮＳＴＳＲ５及びＩＮＳＴＲ６は、サイド・キューの記憶セルの対２２１−２２２を介して発行される。記憶セルの対２３１−２３２の各々からの命令ＩＮＳＴＲ５及びＩＮＳＴＲ６は、経過時間ビット＝１を示す。特定の行におけるメイン発行キュー・アレイの命令が、特定の行より上にある行から受け取られるサイド・キューの命令の前に発行されるため、まず行Ｒ１の命令ＩＮＳＴＲ１、ＩＮＳＴＲ３、ＩＮＳＴＲ４、そしてＩＮＳＴＲ２が発行され、続いて記憶セルの対の２２１−２２２を介した記憶セルの対２３１−２３２内の命令ＩＮＳＴＲ５及びＩＮＳＴＲ６が発行される。
【００４８】
ここで、行Ｒ２における命令ＩＮＳＴＲ１−ＩＮＳＴＲ４を参照すると、この行におけるすべての命令が、経過時間＝１を示す。さらに、隣接するサイド・キューの記憶セルの対２４１−２４２の各々にある命令ＩＮＳＴＲ５−ＩＮＳＴＲ６も、同様に経過時間＝１を示す。したがって、図４のフローチャートの判別ブロック４１５及びリセット・ブロック４２０に従って、すべての経過時間ビットが、この条件の判別ブロック４１５の検出に続いて、そのプロセッサ周期で経過時間＝０にリセットされる。
【００４９】
ここで、行Ｒ３における命令及び隣接するサイド・キューの記憶セル２５１−２５２を参照すると、行Ｒ３における命令ＩＮＳＴＲ２は、Ｒ４から行Ｒ３へ圧縮又は流入されたものである。したがって、行Ｒ３における命令ＩＮＳＴＲ２は、より新しい経過時間ビット＝１を示す。サイド・キューの記憶セル２５１−２５２内の命令ＩＮＳＴＲ５及びＩＮＳＴＲ６は、上にある行Ｒ４から記憶セル２５１−２５２に発行されたものである。したがって、サイド・キューの記憶セル２５１−２５２における命令ＩＮＳＴＲ５及びＩＮＳＴＲ６は、より新しい経過時間ビット＝１を示す。行Ｒ１−Ｒ３が命令で埋め尽くされると、発行制御の状態マシン２０２は、フェッチされたデコード命令で行Ｒ４を埋め始める。発行制御の状態マシン２０２は、優先度が左から右へ向かうとき、経過時間ビット＝０を示す命令で行Ｒ４を埋め尽くす。
【００５０】
図６は、挿入制御の状態マシン５００におけるプロセス・フローを表すフローチャートを示す。挿入制御の状態マシン５００は、発行制御の状態マシン２０２における他の状態マシンと協働して、発行キュー２０４の記憶セルへの、エントリとも呼ばれる命令の挿入を制御する。判別ブロック５０５において、発行制御の状態マシン５００は、発行キュー２０４がフルであるかを判別するためにテストを行う。発行キュー２０４がフルである場合には、上位パイプラインは、ブロック５１０に従ってストールする。上位パイプラインは、ディスパッチ・ユニット１３５と、マイクロコード・ユニット１５０と、ＭＵＸ１４５と、デコーダ１４０と、依存性チェッカー１５５とを含む。判別ブロック５０５は、占有されていない記憶セルが発行キュー２０４に現れるまでテストし続け、このようにして、発行キュー２０４は、もはやフルではなくなる。発行キュー２０４は、多数の占有されていない記憶セルを含むことができる。挿入制御の状態マシン５００が、現在は圧縮可能でない最高優先度の記憶セルを検出する。記憶セルの入力又は命令は、その命令より下にある行がフルである場合には、圧縮可能ではない。ブロック５２０に従って、挿入制御の状態マシン５００は、入力命令を、ブロック５１５において検出された最高優先度の占有されていない記憶セルに挿入する。挿入制御の状態マシン５００は、このように有効として格納される命令を経過時間ビット＝０でマーク付けする。次に、状態マシン５００は、発行キュー２０４がもう一度フルであるかを判別するために、判別ブロック５２５において別のテストを行う。状態マシン５００により、発行キュー２０４がフルであることが見出される場合には、上位パイプラインは、ブロック５３０に従ってストールする。発行キュー２０４が再び少なくとも１つの占有されていない記憶セルを含むまで、判別ブロック５２５においてテストが続く。その場合には、プロセス・フローは、状態マシン５００が発行キュー２０４内の次の最高優先度の占有されていないセルを決定するブロック５３５に進む。一実施形態において、挿入制御の状態マシン５００は、命令をメイン発行キュー・アレイ２１０内の記憶セルに挿入する。別の実施形態においては、挿入制御の状態マシン５００は、命令が発行できる状態にある場合には、命令を最高優先度のサイド・キューの記憶セルに挿入することができる。ブロック５４０に従って、次に、状態マシン５００は、次の入力命令をブロック５３５において検出された次の最高優先度の占有されていないセルに挿入する。このタスクを完了した後に、上位パイプラインは、ブロック５４５に従って進み、発行キュー２０４がフルであるかを判別するために、再び発行キュー２０４をテストする判別ブロック５０５に戻ってプロセス・フローが続行する。
【００５１】
図７は、メイン発行キュー・アレイ２１０の最下位行Ｒ１からの命令の発行を制御する、最下位行の発行制御の状態マシン６００におけるプロセス・フローを表すフローチャートを示す。状態マシン６００は、発行できる状態についての状態マシン８００と協働して、最下位行Ｒ１における命令が発行できる状態にあるかを判別する。状態マシン６００は、ブロック６０５に従って、経過時間によってメイン発行キュー・アレイ２１０の最下位行Ｒ１をくまなく左から右へ検索する。判別ブロック６１０は、これらの命令のいずれが発行できる状態にあるかを判別するために、最下位行Ｒ１における命令をテストする。判別ブロック６１０により、特定の最下位行の命令が発行できる状態にないことが見出される場合には、判別ブロック６１０により、発行できる状態にある命令が検出されるまで、ブロック６０５に従って検索が続く。すべての最下位行の命令を検索した後に、判別ブロック６１０により、発行できる状態にある命令が検出されない場合には、状態マシン６００は、１プロセッサ周期だけ待機し、ブロック６０５において検索が再び始まる。しかしながら、一旦判別ブロック６１０が最下位行Ｒ１において発行できる状態にある命令を検出すると、状態マシン６００は、ブロック６１５に従って、その命令を２つの発行記憶セル２２１−２２２のうちの１つ、すなわち、第１の発行スロットに移動させる。発行記憶セル２２１−２２２を発行スロットと呼ぶこともできる。これらの記憶セル又はスロットは、最終的には発行命令を実行する実行ユニットに結合されて命令をこれに発行する。判別ブロック６２０は、最下位行Ｒ１における第２の命令が発行できる状態にあるかを判別するためにテストを行う。判別ブロック６２０がこうした第２の発行できる状態にある命令を検出することができない場合には、さらに検索するためにプロセス・フローがブロック６０５に戻って続行する。しかしながら、判別ブロック６２０がこうした第２の発行できる状態にある命令を検出する場合には、判別ブロック６２５は、この第２の命令が前の第１の命令と衝突するかを判別するためにテストを行う。衝突とは、第２の発行できる状態にある命令が第１の発行できる状態にある命令と同じ実行ユニットを必要とするので、こうした第２の発行できる状態にある命令は、第１の発行できる状態にある命令と同じプロセッサ周期では発行することができないことを意味する。判別ブロック６２５がこうした衝突を検出する場合には、プロセス・フローは、最下位行Ｒ１においてさらに検索するためにブロック６０５に戻って続行する。しかしながら、判別ブロック６２５がこうした衝突を検出しない場合には、状態マシン６００は、ブロック６３０に従って、第２の命令を第２の発行スロット、すなわち、記憶セル２２２に移動させる。次に、プロセス・フローは、発行できる状態にある命令のために最下位行Ｒ１においてさらなる検索を行うブロック６０５に戻って続行する。一実施形態において、圧縮、挿入及び経過時間の更新は、発行判別６１０及び６２０の前に行われる。
【００５２】
図８は、上位行の圧縮及びサイド発行状態マシン７００における、プロセス・フローを表すフローチャートを示す。上位行は、メイン発行キュー・アレイ２１０内の行Ｒ１以外のそうした行を含むものである。特定の上位行における命令、すなわちエントリごとに、状態マシン７００は、すぐ下の行において占有されていないセルについて検索する。状態マシン７００がすぐ下の行においてこうした占有されていないセルを検出する場合には、状態マシン７００は、ブロック７０５に従って、メイン命令キュー・アレイ２１０に、上に位置するエントリをその占有されていないセルに圧縮するように指示する。状態マシン７００はまた、ブロック７０５に従って、このように圧縮されたすべてのエントリを経過時間ビット＝１、すなわち、より新しいものに設定する。次に、この下位行がフルであるかを判別するために、状態マシン７００は、判別ブロック７１０においてテストを行う。この下位行がフルではない場合には、できれば、さらなる圧縮のためにブロック７０５に戻ってプロセス・フローが続行する。しかしながら、判別ブロック７１０により、この下位行がフルであることが見出される場合には、状態マシン７００は、ブロック７１５に従って、経過時間によって右から左へ並列的にすべての行を検索して、発行できる状態にある命令を配置する。換言すれば、状態マシン７００は、同時にすべての行について同じ検索を行う。この検索により、こうした発行できる状態にある命令が検出されない場合には、判別ブロック７２０は、できれば、圧縮アクティビティのためにプロセス・フローをブロック７０５に送り戻す。しかしながら、検索により、発行できる状態にある命令が検出される場合には、判別ブロック７２０は、プロセス・フローをブロック７２５に送る。ブロック７２５は、発行できる状態にある命令を、それが後で発行されるサイド・キュー２１５に移動させる。発行制御の状態マシン２０２は、発行キュー２０４への挿入を行い、上述の圧縮及び発行の判別の前に、命令の経過時間ビットが更新される。
【００５３】
図９は、特定の命令は発行できる状態にあるかを判別する、発行できる状態についての状態マシン８００のプロセス・フローを表すフローチャートを示す。まず、発行できる状態についての状態マシン８００は、ブロック８０５に従って、現在の命令をチェックして、その命令が依存性を示すかを判別する。判別ブロック８０５により、現在の命令が依存性を示さないことが判別される場合には、状態マシン８００は、ブロック８１０に従って、この現在の命令を発行できる状態にあると指定する。しかしながら、判別ブロック８０５により、現在の命令が依存性を示すことが判別される場合には、状態マシン８００は、ブロック８１５に従って、依存性の更新を行う。次に、判別ブロック８２０は、依存性が依然として存在するかどうかを判別するためにテストを行う。依存性がもはや存在しない場合には、状態マシン８００は、ブロック８１０に従って、命令を発行できる状態にあると指定する。しかしながら、依存性が依然として存在する場合には、状態マシン８００は、ブロック８２５に従って、命令を発行できる状態にないと指定する。１プロセッサ周期を待機した後に、状態マシン８００は、さらなる依存性のテストのために、プロセス・フローを判別ブロック８０５に送り戻す。
【００５４】
図１０は、メイン発行キュー２１０及びサイド発行キュー２１５間の接続が、理解しやすいように除去された状態の、発行キュー２０４の略図を示す。この発行キューの図は、キューへの命令の挿入、該キュー内への圧縮及び該キューからの発行についての例を提供するものである。行Ｒ４は、サイド・キューの記憶セルの対２５１−２５２と関係していることに留意されたい。行Ｒ３は、サイド・キューの記憶セルの対２４１−２４２と関係している。行Ｒ２は、サイド・キューの記憶セルの対２３１−２３２と関係している。メイン発行キュー・アレイ２１０の最下位行は、発行命令の記憶セルの対２２１−２２２と関連している。発行制御の状態マシン２０２が命令を記憶セルの対２２１−２２２に配置すると、こうした命令が、それらの命令を実行する実行ユニットに直接進む、すなわちこれに発行される。図１０は、命令によって占有されていないすべての記憶セルをＶＬＤ＝０、すなわち、このセルに無効な命令が存在する／命令が存在しないと指定する。命令を含む記憶セルは、例えば、行Ｒ１の一番左側の命令において分かるように、命令番号のＩＮＳＴＲと、経過時間ビットのＡＧＥと、発行できる状態にあるビットのＲＤＹと、命令有効ビットのＶＬＤとを含む。命令は、そのＲＤＹビット＝１となるときに、発行できる状態にある。
【００５５】
以下は、発行キューの動作を示すために、発行キュー２０４内の代表的な命令を説明するものである。行Ｒ１の命令ＩＮＳＴＲ３は、発行できる状態にあるビットのＲＤＹ＝１を示し、よって、発行できる状態にある。ＩＮＳＴＲ３が経過時間ビット＝０をも示すため、それは、行Ｒ１における最も古い、発行できる状態にある命令として、行Ｒ１における最高優先度を示す。したがって、点線９０５が示すように、ＩＮＳＴＲ３は、それが適切な実行ユニットに発行される記憶セル２２１に発行又は流入する。行Ｒ１における残りの命令のすべては、それらがまだ発行できる状態にないことを示す、発行できる状態にあるビットのＲＤＹ＝０を示す。したがって、これらの残りの命令は、行Ｒ１においてストールする。サイド・キューの記憶セル２３２における命令ＩＮＳＴＲ６は、発行できる状態にあるビットＲＤＹ＝１を示し、よって、発行できる状態にある。点線９１０が示すように、このＩＮＳＴＲ６がここで記憶セル２２１にある命令と衝突しないため、ＩＮＳＴＲ６は、記憶セル２２２に転送され、そこから発行される。
【００５６】
メイン発行キュー・アレイ２１０の行Ｒ２においては、すべての命令がＲＤＹ＝０を示し、それにより発行できる状態にあるものがないことを示す。行Ｒ２におけるＩＮＳＴＲ１、ＩＮＳＴＲ２、ＩＮＳＴＲ３及びＩＮＳＴＲ４は発行できる状態にないため、これらの記憶セルは、占有された状態のまま維持され、このようにして、上の行、すなわち、行Ｒ３からの如何なる命令の行Ｒ２内への圧縮も阻止される。サイド・キュー２１５において、記憶セル２４１におけるＩＮＳＴＲ５は、ＲＤＹ＝１を示し、よって、発行できる状態にある。セル２４１の下にあるセル２３１が占有されていない（ＶＬＤ＝０）ため、記憶セル２４１からの命令ＩＮＳＴＲ５は、点線９１５により示されるように、記憶セル２３１内に圧縮又は流入する。
【００５７】
ここでは、メイン発行キュー・アレイ２１０の行Ｒ３を参照すると、行Ｒ３における最初の２つの一番左側の記憶セルは、これらのセルの各々についてＶＬＤ＝０であるため、占有されていない状態のまま維持される。しかしながら、命令ＩＮＳＴＲ３及びＩＮＳＴＲ４は、行Ｒ３の２つの一番右側のセルを占有する。これらの２つの命令の各々は、発行できる状態にあるビットのＲＤＹ＝１を示し、よって、発行できる状態にある。しかしながら、行Ｒ２における４つの命令が行Ｒ３の命令の行Ｒ２内への圧縮を阻止するため、それぞれ点線９２０及び９２５により示されるように、行Ｒ３のＩＮＳＴＲ３及びＩＮＳＴＲ４命令は、代わりに、サイド・キュー２１５の記憶セル２４１及び２４２に発行される。命令がここではサイド・キューの記憶セル２４１と２４２の両方を占有するため、サイド・キューの記憶セル２５１及び２５２における発行できる状態にある命令ＩＮＳＴＲ５及びＩＮＳＴＲ６はストールし、よって、記憶セル２４１及び２４２に直ちに流入するわけではない。
【００５８】
ここで、メイン発行キュー・アレイ２１０の最上位行Ｒ４を参照すると、命令ＩＮＳＴＲ１及びＩＮＳＴＲ２の各々が、ＲＤＹビット＝１を示す。したがって、これらの命令の各々は、発行できる状態にある。行Ｒ３がＶＬＤ＝０である２つの占有されていない記憶セルを含むため、行Ｒ４からの発行できる状態にある命令ＩＮＳＴＲ１及びＩＮＳＴＲ２は、点線９３０及び９３５により示されるように、行Ｒ３における２つの占有されていない記憶セルに圧縮又は流入する。発行制御の状態マシン２０２は、点線９４０及び９４５により示されるように、発行キュー２０４が受け入れる次の２つの命令を、ＶＬＤ＝０である行Ｒ４における２つの占有されていない記憶セルに挿入する。
【００５９】
図１１は、プロセッサ１００を含む情報処理システム（ＩＨＳ）１０００を示す。ＩＨＳ１０００はさらに、プロセッサ１００をシステム・メモリ１０１５及びビデオ・グラフィック・コントローラ１０２０に結合するバス１０１０を含む。ディスプレイ１０２５は、ビデオ・グラフィック・コントローラ１０２０に結合される。ハード・ディスク・ドライブ、ＣＤドライブ、ＤＶＤドライブ又は他の不揮発性記憶装置などの不揮発性記憶装置１０３０は、情報の恒久的な記憶をＩ ＨＳ１０００に提供するために、バス１０１０に結合される。オペレーティング・システム１０３５は、ＩＨＳ１０００の動作を管理するために、メモリ１０１５ にロードされる。メモリ１０１５はアプリケーション・ソフトウェア１０６０も格納する。キーボード及びマウス・ポインティング・デバイスなどのＩ／Ｏ装置１０４０は、バス１０１０に結合される。ＵＳＢ、ＩＥＥＥ１３９４バス、ＡＴＡ 、ＳＡＴＡ 、ＰＣＩ 、ＰＣＩＥ及び他のバスなどの１つ又はそれ以上の拡張バス１０４５は、周辺装置及び装置のＩＨＳ１０００への接続を容易にするためにバス１０１０に結合することができる。ネットワーク・アダプタ１０５０ は、ＩＨＳ１０００が有線又は無線でネットワーク及び他の情報処理システムに接続することを可能にするために、バス１０１０に結合される。図１１がプロセッサ１００を採用する１つのＩＨＳを示す一方で、ＩＨＳは、多くの形式を取ることができる。例えば、ＩＨＳ１０００は、デスクトップ、サーバ、ポータブル、ラップトップ、ノートブック、又は他のフォーム・ファクタのコンピュータ若しくはデータ処理システムの形式を取ることができる。ＩＨＳ１０００は、パーソナル・デジタル・アシスタント（ＰＤＡ）、ゲーミング装置、携帯電話装置、通信装置又はプロセッサ及びメモリを含む他の装置などの他のフォーム・ファクタを取ることもできる。
【００６０】
以上では、プロセッサの発行キューにおいてスループットを改善させることができるプロセッサを開示する。
本発明のこの説明を考慮すると、当業者には、本発明の修正及び代替的な実施形態が明らかであろう。したがって、この説明は、本発明を実施する方法を当業者に教示するものであり、例証としてのみ解釈されることが意図されるものである。示され、説明される本発明の形態は、本発明の実施形態を構成するものである。当業者であれば、形状、サイズ及び部品の配置において種々の変更を加えることができる。例えば、当業者であれば、ここで示され、説明される要素の代わりに同等の要素を用いることができる。さらに、本発明のこの説明の恩恵を受けた後の当業者であれば、本発明の範囲から逸脱することなく、他の特徴の使用とは別に本発明の特定の特徴を使用することができる。
【図面の簡単な説明】
【００６１】
【図１】開示されたプロセッサの一実施形態のブロック図である。
【図２】図１のプロセッサの発行キューのブロック図である。
【図３】開示されたプロセッサにおける発行制御の状態マシンのブロック図である。
【図４】開示されたプロセッサの優先度の状態マシンにおけるプロセス・フローを表すフローチャートである。
【図５】経過時間制御情報を含む発行キューのブロック図である。
【図６】開示されたプロセッサの挿入制御の状態マシンにおけるプロセス・フローを表すフローチャートである。
【図７】開示されたプロセッサの最下位行の発行制御の状態マシンにおけるプロセス・フローを表すフローチャートである。
【図８】開示されたプロセッサの上位行の圧縮及びサイド発行の状態マシンにおけるプロセス・フローを表すフローチャートである。
【図９】開示されたプロセッサの発行できる状態についての状態マシンにおけるプロセス・フローを表すフローチャートである。
【図１０】命令の挿入、圧縮及び発行を示すためにマークされた、開示されたプロセッサの発行キューのブロック図である。
【図１１】開示されたプロセッサを採用する情報処理システムのブロック図である。
【符号の説明】
【００６２】
２０４：発行キュー
２１０：メイン発行キュー・アレイ
２１５：サイド・キュー
Ｒ１，Ｒ２，・・・，ＲＮ：行
２２１、２２２、２３２、２３２、２４１、２４２、２５１、２５２：記憶ユニット
【図１】
0005175466.tif 000002
【図２】
0005175466.tif 000003
【図３】
0005175466.tif 000004
【図４】
0005175466.tif 000005
【図５】
0005175466.tif 000006
【図６】
0005175466.tif 000007
【図７】
0005175466.tif 000008
【図８】
0005175466.tif 000009
【図９】
0005175466.tif 000010
【図１０】
0005175466.tif 000011
【図１１】
0005175466.tif 000012