(57)【特許請求の範囲】
【請求項１】
実行可能命令（２２０）を含むコンピュータプログラムが格納されるプログラミングメモリ（３０２）と、
プログラミングバス（３０６）により前記プログラミングメモリ（３０２）に接続された少なくとも一つのＣＰＵ（３０４）と、
を備えるコンピュータシステムであって、
前記ＣＰＵ（３０４）は、
前記プログラミングメモリ（３０２）のプログラムカウンタ（ＰＣ）の値が指し示すアドレスから命令をフェッチするフェッチユニット（３０８）と、
前記フェッチユニット（３０８）に接続されたキャッシュメモリ（３１０）と、
命令バス（３１２）により前記フェッチユニット（３０８）に接続された複数の関数ユニット（３１４，３１６）であって、演算コードに基づいて指定された演算を実行するように構成されている関数ユニット（３１４，３１６）と、
前記フェッチユニット（３０８）及び前記関数ユニット（３１４，３１６）に接続され、前記関数ユニット（３１４，３１６）に命令を注入するためのインジェクタユニット（３２２）と、を有する、
コンピュータシステムにおいて、
前記フェッチユニット（３０８）が前記プログラムカウンタ（ＰＣ）の値に基づいて前記プログラミングメモリ（３０２）から命令をフェッチしたとき、前記フェッチユニット（３０８）は、目的命令としてフェッチされた命令を含む、対応するタグキャッシュエントリ（４００）を前記キャッシュメモリ（３１０）に格納し、前記フェッチユニット（３０８）は、フェッチされた前記命令を適切な関数ユニット（３１４，３１６）に実行のために発行し、
前記タグキャッシュエントリ（４００）は、フェッチされた前記命令に関連付けられた前記プログラムカウンタ（ＰＣ）の値に対応するタグプログラムカウンタ（４０２）のフィールド、及び、前記キャッシュメモリ（３１０）内における目的命令が格納された場所を示す目的プログラムカウンタ（４０４）の値を格納するフィールドを有し、
それにより、以降、
前記フェッチユニット（３０８）が前記プログラミングメモリ（３０２）から命令をフェッチして当該命令に関連付けられたプログラムカウンタ（ＰＣ）の値が前記キャッシュメモリ（３１０）内に格納された前記タグプログラムカウンタ（４０２）の値と一致すると判断したとき、当該命令に関連付けられた前記プログラムカウンタ（ＰＣ）の値に対応する演算コードを含む前記目的命令を前記インジェクタユニット（３２２）から直接、目的命令演算コードにより指示された前記関数ユニット（３１４，３１６）に注入することにより前記命令バス（３１２）をバイパスし、前記プログラミングバス（３０６）の帯域幅及び前記命令バス（３１２）の帯域幅を増大させる、
ことを特徴とするコンピュータシステム。
【請求項２】
前記命令は、前記プログラムカウンタ（ＰＣ）の値を格納するフィールドを含むことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記命令は、
オペランドの演算のために備えられる演算コードフィールドと、
オペランドが格納されている場所を特定する複数のオペランド指定部と、
演算の結果が格納されるべき場所を特定する結果指定部フィールドと、
を含むことを特徴とする請求項１又は２に記載のコンピュータシステム。
【請求項４】
前記タグキャッシュエントリ（４００）は、フェッチされた前記命令に関連付けられた前記プログラムカウンタ（ＰＣ）の値と一致する命令が前記キャッシュメモリ（３１０）内に格納されたことを示す有効データフィールド（４０６）を含むことを特徴とする請求項１乃至３のいずれか一項に記載のコンピュータシステム。
【請求項５】
前記命令はループ命令であり、前記タグキャッシュエントリ（４００）は、前記ループ命令のループ数を示すループサイズデータフィールド（４０８）を含むことを特徴とする請求項１乃至４のいずれか一項に記載のコンピュータシステム。
【請求項６】
前記キャッシュメモリ（３１０）は、前記フェッチユニット（３０８）に接続されたフェッチユニットキャッシュメモリ（３１０）であることを特徴とする請求項１乃至５のいずれか一項に記載のコンピュータシステム。
【請求項７】
前記フェッチユニットキャッシュメモリ（３１０）は、フェッチユニットキャッシュエントリ（４２０）を含み、前記フェッチユニットキャッシュエントリ（４２０）は、前記タグプログラムカウンタ（４０２）及び前記目的プログラムカウンタ（４０４）の値を格納するフィールドに加えて、前記目的プログラムカウンタ（４０４）の値が示す命令を実行するために適切な前記関数ユニット（３１４，３１６）を示す宛先フィールドを含むことを特徴とする請求項６に記載のコンピュータシステム。
【請求項８】
前記関数ユニット（３１４，３１６）は、それぞれの前記関数ユニット（３１４，３１６）に対応した関数ユニットキャッシュメモリ（３１８，３２０）が接続されることを特徴とする請求項１乃至７のいずれか一項に記載のコンピュータシステム。
【請求項９】
前記関数ユニットキャッシュメモリ（３１８，３２０）は、関数ユニットキャッシュエントリ（４３０）を含み、前記関数ユニットキャッシュエントリ（４３０）は、前記命令のフィールドを含むことを特徴とする請求項８に記載のコンピュータシステム。
【請求項１０】
前記タグキャッシュエントリ（４００）は、前記目的命令が格納される目的命令フィールド（４１４）をさらに含むことを特徴とする請求項１乃至９のいずれか一項に記載のコンピュータシステム。
【請求項１１】
前記関数ユニット（３１４，３１６）は、設定変更可能であることを特徴とする請求項１乃至１０のいずれか一項に記載のコンピュータシステム。
【請求項１２】
命令のオペランドを格納するためのレジスタファイル（３２４）を備え、前記レジスタファイル（３２４）は、前記プログラミングメモリ（３０２）、前記フェッチユニット（３０８）及び前記関数ユニット（３１４，３１６）に接続されていることを特徴とする請求項１乃至１１のいずれか一項に記載のコンピュータシステム。
【請求項１３】
前記少なくとも一つのＣＰＵ（３０４）は、マイクロプロセッサであることを特徴とする請求項１乃至１２のいずれか一項に記載のコンピュータシステム。
【請求項１４】
前記マイクロプロセッサは、スーパースケーラマイクロプロセッサであることを特徴とする請求項１３に記載のコンピュータシステム。
【請求項１５】
前記フェッチユニット（３０８）が前記プログラミングメモリ（３０２）から命令をフェッチして当該命令に関連付けられた前記プログラムカウンタ（ＰＣ）の値が前記キャッシュメモリ（３１０）内に格納された前記タグプログラムカウンタ（４０２）の値と一致しないと判断したとき、当該命令に関連付けられた前記プログラムカウンタ（ＰＣ）の値は増加させられ、フェッチされた前記命令が実行されることを特徴とする請求項１乃至１４のいずれか一項に記載のコンピュータシステム。
【請求項１６】
前記目的命令が前記キャッシュメモリ（３１０）内において利用可能でないとき、前記目的命令は前記プログラミングメモリ（３０２）から要求されることを特徴とする請求項１乃至１５のいずれか一項に記載のコンピュータシステム。
【請求項１７】
前記フェッチユニット（３０８）が前記プログラミングメモリ（３０２）から命令をフェッチして当該命令に関連付けられた前記プログラムカウンタ（ＰＣ）の値が前記キャッシュメモリ（３１０）内に格納された前記タグプログラムカウンタ（４０２）の値と一致すると判断したとき、前記プログラムカウンタ（ＰＣ）の値は、前記キャッシュメモリ（３１０）内において特定された一致する前記目的プログラムカウンタ（４０４）の値に更新されることを特徴とする請求項１乃至１６のいずれか一項に記載のコンピュータシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はコンピュータシステム等に関し、より詳細にはマイクロプロセッサ内の命令トランザクションの数を減らす方法と装置に関する。
【０００２】
【従来の技術】
スーパースケーラマイクロプロセッサは、クロック一周期当たりに複数の命令を実行すること、及び、設計に見合った最短のクロック周期を選択することにより、高い動作性能を達成している。他方、スーパーパイプラインマイクロプロセッサは、命令を実行するための多数のパイプライン段を有する。この命令は典型的には多数のステップにより実行され、これらステップはさらに可能な限り等しい数のサブステップに細分化される。従って、命令を完全に実行するためには、全てのサブステップを順次実行しなければならない。図１Ａは公知の実行可能命令データ語１００を示す。命令データ語１００は典型的には演算コード（op-code）フィールド１０２、オペランド指定部（specifier）Ａ、及び関連オペランド指定部Ｂから構成される。実行結果指定部フィールドＣは、実行された命令の結果を格納するために使用される。演算コードフィールド１０２は、オペランドＡ及びＢ上で実行する特定の演算を定義する。典型的な演算は例えば、加算、乗算、分岐、ループ、及びシフト等である。そのような演算の結果は実行結果データ語Ｃ内に格納され、実行結果データ語Ｃは、後続の実行可能命令のために利用可能にされる。
【０００３】
図２Ａはユーザから提供されたプログラムに基づいて所望の計算を実行するよう構成された公知のコンピュータシステム２００を示す。コンピュータシステム２００により使用される典型的なプログラムは一般的には、コードと呼ばれる実行可能命令の番号付きリストにより構成される。個々の命令は特定のプログラムカウンタ（ＰＣ）に関連付けられている。コンピュータシステム２００はプログラミングメモリ２０２を有する。このプログラミングメモリはプログラムを形成する実行可能命令を、プログラムカウンタに対応するメモリ場所に格納するよう構成されている。典型的には、プログラミングメモリ２０２は両方向プログラミングバス２０６を介して中央処理ユニット（ＣＰＵ）２０４に接続される。一方プログラムカウンタは、プログラミングメモリ２０２内の対応する実行可能命令が格納された場所を示すために使用される。
【０００４】
例として、コンピュータシステム２００により実行される典型的命令２２０が図２Ｂに示されている。コード２２０のラインはプログラムカウンタ（ＰＣ）のフィールドを含み、該カウンタはプログラミングメモリ２０２内の実行すべき命令（演算コードＡＤＤと個々のオペランド指定部２０、３０から成る）がある場所１０を指し示す。この場合、ＣＰＵ２０４は場所２０，３０の値を加算し、結果を、結果指定部フィールドにより示された格納場所１００に格納する。
【０００５】
図２Ａを再び参照する。公知の命令処理では一般的に、命令の復号化、命令の実行、及び、命令により特定されたプログラミングメモリ２０２内の格納場所への実行結果の格納が行われる。より詳細には、フェッチ段と呼ばれるステップにおいて、命令２２０がプログラミングメモリ２０２から、プログラムカウンタ（ＰＣ）により示されたメモリアドレスに基づいてフェッチユニット２０８によりフェッチされる。この時点で、フェッチユニット２０８は命令２２０を演算コードデータフィールド１０２及びオペランド指定部Ａ，Ｂに構文解析する。演算コードデータフィールド１０２はその後、命令バス２１０を介してデコーダ２１２に送られる。同時に、Ａ及びＢにおけるオペランドがレジスタファイル２１４から読み出される。
【０００６】
デコーダ２１２は受け取った演算コードデータフィールド１０２を使用して関数ユニット（ＦＵ）、例えば関数ユニット２１６を選択する。関数ユニットは演算コードデータフィールド１０２内に含まれる演算コードに対応する関数を実行するよう構成される。上記のコードのラインを例にとると、ＦＵ２１６はレジスタファイル２１４内に格納された個々のオペランドＡ，Ｂ上で加算演算を実行するよう構成された算術論理演算装置（ＡＬＵ）である。この時点で、ＦＵ２１６は命令を実行可能な状態である。ＦＵ２１６は実際には、命令演算コードにより示された関数を実行可能であればどのような関数ユニットでもかまわない。例えば、算術論理演算装置（ＡＬＵ）の場合の加算や、シフタ、乗算器等である。実行が終了すると、ＦＵ２１６は実行結果をレジスタファイル２１４のＣ内に指定された宛先に出力し、値Ｃがプログラミングメモリに送られるまでそこに格納される。
【０００７】
プログラミングメモリ２０２内のアクセス命令に関する演算は、コンピュータシステム２００、より詳細にはＣＰＵ２０４の総合動作性能を限定する主要因である。そのような状況は、例えば、データアクセス時間の長い大型のメモリの場合や、プログラミングメモリ２０２がＣＰＵ２０４から離れて位置しているために転送遅延が生ずる場合に起こる。これらの場合、一秒当たりの実行された命令数で計測されたＣＰＵ２０４の性能は、プログラミングメモリ２０２から命令を検索する能力により制限される。
【０００８】
マイクロプロセッサ性能を向上させる（一秒当たりの実行命令数を増やす）ための公知の方法では、例えば、命令格納用のキャッシュメモリ２１８が付加される。キャッシュメモリ２１８はプログラミングメモリ２０２内部にあるものとして図示されているが、キャッシュメモリ２１８はプログラミングメモリ２０２の外部において、ＣＰＵ２０４に近接して位置することも可能である。典型的には、キャッシュメモリ２１８はプログラミングメモリ２０２よりも速くアクセスされる。一般的には、キャッシュメモリ２１８はプログラミングメモリ２０２からの命令をキャッシュラインに格納する。キャッシュラインは複数の連続するバイトから構成され、該連続バイトは典型的には、それらのうちの第一のバイトが、所定の数の下位ビットがゼロに設定されたアドレスに位置するよう配設される。この所定の数の下位ビットは、キャッシュライン内の個々のバイトを一意的に特定するために十分な数である。アドレスの残りのビットは、キャッシュライン全体を参照するために使用されるタグを形成する。
【０００９】
キャッシュメモリを増大して命令の利用度を高めることによりＣＰＵ２０４の性能を向上することができるが、キャッシュメモリが大きい程、キャッシュアクセス時間も相応して長くなる。キャッシュアクセス時間が長いということは、ＣＰＵ２０４の固有のクロック周期時間と関わりなく、一秒当たりＣＰＵ２０４が実行のために利用可能な命令の数が減るため、システム性能が制限される。本願においてキャッシュアクセス時間という用語は、キャッシュメモリに対するアドレスの提示から、対応するバイトがＣＰＵ２０４により利用可能となるまでに要する時間間隔を指す。例えば、設定された連想キャッシュアクセス時間は、キャッシュ格納をインデックスする時間、行を選択するためにタグをアクセスアドレスと比較する時間、及びキャッシュから選択されたデータを転送する時間を含む。
【００１０】
キャッシュアクセス時間を増加することは、高い周波数のマイクロプロセッサにおいて使用されるキャッシュメモリにとって特に有害である。キャッシュアクセス時間を増加することにより、命令バス２１０の帯域が大幅に低減され、この傾向は、キャッシュアクセス時間がＣＰＵ２０４のクロック周期時間より長くなる時顕著である。
【００１１】
【発明が解決しようとする課題】
本発明の課題はキャッシュメモリサイズを増大することなく命令バス帯域を増大することである。
【００１２】
【課題を解決するための手段】
本発明によれば、マイクロプロセッサの性能を向上させる装置が提供される。この装置は、マイクロプロセッサ内の対応する関数ユニットに関連付けられたキャッシュメモリに命令を選択的に格納することにより、マイクロプロセッサにより実行される命令の数を増加するよう構成されている。
【００１３】
一実施例では、コンピュータシステム内で発生される命令の数を低減する方法が示される。一実施例では、フェッチされた命令に関連付けられたプログラムカウンタがキャッシュメモリ内の命令のタグに一致すれば、演算コード及び関連命令がプログラミングメモリからのフェッチ無しに直接、演算コードにより特定された関数ユニットに格納される。このようにして、命令バスがバイパスされ、その結果、命令バスの実効帯域幅が増大される。
【００１４】
別の実施例では、中央処理装置（ＣＰＵ）を有するコンピュータシステム内において命令バス及びプログラミングバスにより転送される命令の数を低減するための装置が提供される。ＣＰＵはプログラミングバスを介してプログラミングメモリに接続され、ＣＰＵの指示に従いプログラミングメモリから命令をフェッチするためにプログラミングバスに接続されたフェッチユニットを有する。ＣＰＵはまた、複数の関数ユニットを有し、それぞれＣＰＵの指示に従い、発行された命令に含まれる演算コードに基づいて特定の操作を設定変更可能に実行できる。関数ユニットはそれぞれ命令バスを介してフェッチユニットに接続され、演算コードに基づいて適切な命令を受け取る。本実施例における装置は複数のタグプログラムカウンタ（ＰＣ）を有するキャッシュメモリを有し、個々のキャッシュメモリは関数ユニットの１つに関連付けられる。複数のキャッシュメモリはそれぞれ、タグプログラムカウンタ（ＰＣ）及び目的プログラムカウンタ（ＰＣ）を格納する。インジェクタユニットは複数のキャッシュメモリのそれぞれを、それぞれの関連付けられた関数ユニットに接続することにより、フェッチされた命令に関連付けられたプログラムカウンタ（ＰＣ）がキャッシュメモリ内に格納されたタグプログラムカウンタと一致する場合に、プログラムカウンタ（ＰＣ）が目的プログラムカウンタ（ＰＣ）に変化され、実際の命令が、メモリからフェッチされるよりむしろ、関数ユニットに関連付けられたキャッシュメモリにより関数ユニットに注入される。
【００１５】
本発明の別の実施例では、中央処理ユニット（ＣＰＵ）を有するコンピュータシステム内の命令バス及びプログラムバスにより転送される命令の数を低減する方法が開示される。ＣＰＵはプログラムバスを介してプログラミングメモリに接続され、プログラムバスに接続されたフェッチユニットを含む。ＣＰＵはまた、複数の関数ユニットを含み、個々の関数ユニットは命令バスを介してフェッチユニットに接続されている。ＣＰＵはまた、複数のキャッシュメモリを含み、各キャッシュメモリはそれぞれ関数ユニットの１つに関連付けられている。ＣＰＵはさらにインジェクタユニットを含む。インジェクタユニットは複数のキャッシュメモリのそれぞれを、該メモリデバイスの関数ユニットに結合することにより、複数のキャッシュメモリのそれぞれが、対応するタグプログラムカウンタ、目的プログラムカウンタ、及び目的命令を格納する。目的命令は関連付けられた目的演算コードを有し、該コードは、それぞれのキャッシュメモリに関連付けられた関数ユニットを選択するために使用される。本実施例による方法は以下の操作により実行される。まず、命令が、該命令に関連付けられたプログラムカウンタに基づいてプログラミングメモリからフェッチされる。命令プログラムカウンタがタグプログラムカウンタに一致する場合、該命令プログラムカウンタは、キャッシュメモリ内のタグプログラムカウンタエントリに関連付けられた目的プログラムカウンタに更新される。そして目的演算コードと発行された目的命令は直接、目的演算コードに対応する関数ユニットに注入される。命令プログラムカウンタがキャッシュメモリ内のどのエントリとも一致しないと判断された場合は、命令プログラムカウンタは対応する発行グループサイズだけ増大される。その後いずれの場合も、命令は実行される。
【００１６】
さらに別の実施例では、中央処理ユニット（ＣＰＵ）内で命令を実行する方法が開示される。このＣＰＵはフェッチユニットと、複数の関数ユニットと、命令バスと、複数のキャッシュメモリと、インジェクタユニットを有する。前記命令バスは前記フェッチユニットと前記複数の関数ユニット間に接続される。前記複数のキャッシュメモリはそれぞれ、前記複数の関数ユニットの１つに対応する。インジェクタユニットはキャッシュメモリのそれぞれを対応する関数ユニットに接続する。命令は、ＣＰＵに関連付けられたプログラミングメモリからフェッチされ、その後、該命令がいずれかのキャッシュメモリ内のいずれかのエントリに対応するかどうかが判断される。命令がキャッシュメモリの１つにおけるエントリに対応すれば、該命令が直接、インジェクタユニットを介して、すなわち命令バスをバイパスして、関数ユニットのうちの対応する１つに注入される。しかし、命令がキャッシュメモリの１つにおけるエントリに対応しない場合、その命令は命令バスを介して適切な関数ユニットに転送される。
【００１７】
【発明の実施の形態】
以下の本発明の詳細な説明において、本発明の理解を完全なものとするために、数多くの特定の実施例が開示されるが、当業者には明らかなように、本発明は以下の特定の詳細に必ずしも従うことなく、又は別の構成要素ないしプロセスを使用することによっても実施可能である。また、本発明の理解を不必要に不明瞭とすることのないようにするため、周知のプロセス、手順、要素、及び回路については詳細な説明をしていない。
【００１８】
図３には、本発明の実施例におけるコンピュータシステム３００が示されている。コンピュータシステム３００は、プログラミングバス３０６を介してＣＰＵ３０４に接続されたプログラミングメモリ３０２を有する。ＣＰＵ３０４は、プログラミングバス３０６に接続されたフェッチユニット３０８を有する。図示の実施例では、ＣＰＵ３０４はフェッチユニット３０８に接続されたフェッチユニットキャッシュメモリ３１０を有する。フェッチユニット３０８は命令バス３１２を介して関数ユニット３１４と関数ユニット３１６に接続されている。ここでは理解を容易にするために２つの関数ユニットしか図示してないが、実際にはＣＰＵ３０４に含まれる関数ユニットはその数及び種類は問わない。上述のように、関数ユニット３１４と３１６はその種類を問わず、例えばＡＬＵ、乗算器、シフタ、分岐ないしループユニット等が使用できる。このようにして、例えばスーパースケーラ型のマルチプロセッサシステム等において予期されるような、分岐演算及び加算演算の実質的な並列的実行が可能となる。本実施例では、関数ユニット３１４及び３１６はそれぞれ、関連付けられた関数ユニットキャッシュメモリ３１８と３２０をそれぞれ有する。本実施例では、レジスタファイル３２４は関数ユニット３１４，３１６及びプログラミングメモリ３０２のみならず、フェッチユニット３０８にも接続されている。レジスタファイル３２４はフェッチされた命令に関連付けられたオペランドＡ及びＢを格納するよう構成されている。
【００１９】
図４Ａには、本発明の別の実施例におけるタグキャッシュエントリ４００が示されている。タグキャッシュエントリ４００のフォーマットは多数の可能な構成中の一例であり、限定的なものではない。本実施例では、タグキャッシュエントリ４００は典型的にはフェッチユニットキャッシュメモリ３１０に格納されるが、関数ユニットキャッシュメモリ２１８及び２２０、又はその他の、コンピュータシステム３００に図示はしないが含まれ得るキャッシュメモリ内に格納することができる。
【００２０】
タグキャッシュエントリ４００は様々なデータフィールドを含み、それぞれのフィールドは、命令が適用されるアプリケーションに従って定義される。例えば、タグプログラムカウンタデータフィールド４０２は、ＣＰＵ３０４又はユーザが有意であると判断した命令ないし命令形式のプログラムカウンタを指し示すために使用される。タグキャッシュエントリ４００はまた、目的命令が格納された格納場所を特定するために使用される目的プログラムカウンタのフィールドを有する。タグキャッシュエントリ４００はまた、命令がフェッチユニットキャッシュメモリ３１０内にキャッシュされたことを示すために使用される、有効（Ｖ）データフィールド４０６を含む。ループ命令がキャッシュされている場合、ループサイズ（Ｓ）データフィールド４０８により、可変長の命令がある場合のループのサイズ（すなわちループ数）が決定される。従って、フォールスルー（fall through）プログラムカウンタ（すなわち、ループ終了プログラムカウンタ）を、プログラミングメモリ３０２からデータを検索することなく直接計算することが可能となる。スーパースケーラ型のシステムでは、グループデータフィールド（Ｇ）４１０により、発行グループの一部として発行される命令の数が決定される。予測（predictor）（Ｐ）データフィールド４１２は、ループ内の最後から２番目のサイクルにおいて更新され、次のループでループが終了することを示すルックアヘッドを提供する。本発明のいくつかの実施例では、目的命令フィールド４１４を使用して、目的プログラムカウンタ４０４に対応する命令が格納される。目的命令を目的命令フィールド４１４内に格納することにより、目的命令はタグキャッシュエントリ４００内でローカルに利用可能となるため、プログラミングメモリ３０２から目的命令をフェッチすることが不必要となる。
【００２１】
表１には、例えばプログラミングメモリ３０２内に格納された一連の（ｎ＋１）実行可能命令から構成された代表的プログラムの基本例が示されている。この例では、プログラムは、（Ｎ＋１）として表されるプログラムカウンタ（ＰＣ）を有した典型的ループ命令を有し、該プログラムカウンタはＰＣ＝１０からＰＣ＝ｎまでの命令を実行するために使用され、この命令の実行は、ループ終了条件が論理的に真であると判断されるまで行われる。本発明の一実施例では、フェッチユニット３０８は、プログラムカウンタＰＣ＝１０に対応する命令から始めて、プログラミングメモリ３０２から前記代表的プログラムの個々の命令を順次フェッチする。一回フェッチする毎に、フェッチユニット３０８はフェッチした命令を命令バスを介して適切な関数ユニットに発行する。フェッチユニット３０８は次に、次のプログラムカウンタに対応する命令をフェッチする。本実施例では、フェッチユニット３０８による第１回目のＮ＋１におけるループ命令のフェッチの際に、フェッチユニット３０８は図４Ｂに示されたタグキャッシュエントリ４２０を格納する。フェッチユニット３０８はまた、ループ命令を適切な関数ユニット、すなわちこの場合関数ユニット３１６に発行する。発行された命令を受け取る関数ユニット３１６は、命令がフェッチユニットキャッシュメモリ３１０内にキャッシュされつつあると通知され、それに対して関数ユニット３１６は、図４Ｃに示された、対応する関数ユニットキャッシュエントリ４３０を、その関連する関数ユニットキャッシュメモリ３２０に格納する。
【００２２】
表１
プログラムカウンタ        命令
（ＰＣ）
１０              命令１
２０              命令２
３０              命令３
・・
・・
Ｎ                命令ｎ
Ｎ＋１            ループ１０
その後、プログラムカウンタ"Ｎ"がフェッチユニット３０８により見出される度に、プログラムカウンタＮ＋１に対応する命令を要求する代わりに、フェッチユニットは単に、フェッチユニットタグキャッシュエントリ４２０内に含まれた目的プログラムカウンタにより表されたプログラムカウンタ１０における命令を要求する。プログラムカウンタＮ＋１に関連付けられた実際のループ命令はインジェクタユニットにより、フェッチユニット３０８の指示に従って、直接関数ユニット３１６に注入される。このようにして、プログラムカウンタＮ＋１に対応するループ命令は、該命令がフェッチユニット３０８により初めて見出された時だけ、プログラミングメモリ３０２からフェッチされ、命令バスを介して適切な関数ユニットに発行される。すなわちこの第１回目のフェッチユニットによるＮ＋１のフェッチの後は、ループ命令は直接適切な関数ユニットに注入される。その結果、命令バスにより転送される命令トランザクションの数が減る。このようにして、命令バスの実効トランザクション帯域幅が通約可能に増加される。
【００２３】
別の例が表２に示されている。表２は例示的分岐命令を有する代表的プログラムを示す。この例示的分岐命令は特定の条件が真か偽かに基づいて制御を所定のプログラムカウンタに渡す。
【００２４】
表２
プログラムカウンタ          演算コード
（ＰＣ）
０５                カウント＝２
１０                加算
１１                乗算
１２                減算
１３                カウント＝０まで１０へ分岐；
１だけ減少
１４                加算
ＰＣ＝１３（カウンタ＝０の場合を除く）の度毎に分岐演算が実行され、カウントが１だけ減少されて制御がＰＣ＝１０に渡されるため、ＣＰＵ３０４は命令トランザクションの数を減らすことができる。例えば、タグプログラムカウンタデータフィールド４０４を１２（すなわち、ＰＣ＝１３における分岐命令の直前のＰＣ）に設定することにより、制御が即座に、プログラミングメモリ３０２に戻ってＰＣ＝１３により示される分岐命令をフェッチすることなく、ＰＣ＝１０に送られる。このようにして、プログラミングメモリ３０２からフェッチされる命令の数が低減される。フェッチされる命令の数を低減することにより、プログラミングバス３０６の帯域幅が通約可能に増大される、なぜならこの場合、少なくとも１つの"分岐"命令がフェッチ／分配ユニット３０８によりプログラミングメモリ３０２からフェッチされないからである。さらに、同様の概念がルーピング型命令にも当てはまる。
【００２５】
実際の動作において、ＣＰＵ３０４がＰＣ＝１３において分岐命令を実行する時、ＣＰＵ３０４はまた、タグキャッシュエントリ４００内に含まれた検査（Ｖ）データフィールド４０６も更新する。検査（Ｖ）データフィールド４０６は、ＰＣ＝１３（分岐命令と関連付けられている）が、フェッチ／分配ユニット３０８に含まれたキャッシュメモリ３２０に格納されたことを示す。ループ命令がタグ付けされている場合は、ループサイズ（Ｓ）データフィールド４０８により、可変長命令がある場合の実施におけるループのサイズ（ループ命令のビットサイズ）が規定される。このようにして、フォールスループログラムカウンタ（ループ終了プログラムカウンタ）を、プログラミングメモリ３０２からデータを検索することなく直接計算することができる。スーパースケーラ型システムでは、グループデータフィールド（Ｇ）４１０により、発行グループの一部として発行される命令の数が規定される。表２に示された場合では、ＰＣ＝１３における分岐演算に関連付けられた発行グループは、その発行グループは減算型の操作（すなわちカウンタの減少）のみならず分岐演算も指し示すため、サイズ２の発行グループである。予期（Ｐ）データフィールド４１２はループ内の最後から２番目のサイクル内で更新され、それによって、次のループがループ出口プログラムカウンタに出ることを示すルックアヘッドが提供され、ループを再び見た場合には最後の反復においてリセットされる。
【００２６】
引き続き図４を参照する。タグキャッシュエントリ４００はまた、表２に示されたプログラムを実施するために必要なフェッチ操作回数を更に減らすために使用されるデータフィールドを含む。例えば、目的命令データフィールド４１４は、目的プログラムカウンタデータフィールド４０４内に格納された目的プログラムカウンタに関連した命令を格納するために使用される。このようにして、表２の例の場合、制御が即座にＰＣ＝１１に渡されるため、ＰＣ＝１０（すなわち加算）により示されるメモリ場所に格納されたメモリをフェッチすることが不必要となる。さらに、目的命令は、目的命令演算コードにより指示された関数ユニットに直接、インジェクタユニット３２２により注入される。インジェクタユニット３２２は命令バス３１２をバイパスすることにより、命令バス３１２により転送される命令トランザクションの数が低減され、帯域幅が通約可能に増大される。
【００２７】
図５は、本発明の実施例において命令を実行するための１つの可能な方法のフローチャートである。第１の命令がメモリからフェッチされる（５０２）。次に、フェッチされた命令に関連付けられたプログラムカウンタがいずれかのキャッシュメモリのいずれかのエントリに一致するかどうかが判断される（５０４）。いずれのキャッシュメモリにも一致するタグプログラムカウンタがないと判断された場合、フェッチされた命令に関連付けられたプログラムカウンタが発行グループのサイズだけ増大され（５０６）、命令はそこに含まれた演算コードに従って実行される（５０８）。次に、新しい命令を実行する場合には（５１０）、新規命令要求がフェッチのためにプログラミングメモリに送られる（５１２）。
【００２８】
しかし、フェッチされた命令に関連付けられたプログラムカウンタがいずれかのキャッシュメモリのいずれかのエントリと一致した場合は（５０４）、フェッチされた命令に関連付けられたプログラムカウンタは、キャッシュメモリ内で特定された一致する目的プログラムカウンタに更新される（５１４）。フェッチされた命令内に目的命令が格納されていない場合（５１６）は、目的命令がプログラミングメモリからフェッチされる（５１８）が、フェッチされた命令内に目的命令が格納されている場合は、プログラミングメモリに対しては目的命令の要求は行われない。いずれの場合も、目的演算コードは目的命令と共に目的関数ユニットに注入される（５２０）。一旦注入されると、目的命令は実行され（５０８）、実行後、実行すべき新たな命令が無い場合、処理は終了し、そうでなければ、新たな命令がプログラミングメモリから要求される（５１２）。
【００２９】
開示された構成は数多くの効果を有する。例えば、本発明により、命令バスのみならずプログラミングバス上のバストランザクションの数が低減される。従って、プログラミングバスと命令バスの帯域幅が、キャッシュメモリの付加ないし増大を行うことなしに、通約可能に増大される。それぞれの帯域幅を増大することにより、プロセッサの動作性能が、多大なコストの増大又は設計の変更なしに増大される。その他の効果は例えば、キャッシュメモリを付加する必要性が低減されるため、コンピュータシステムのコストが通約可能に低減される。開示された発明は、マイクロプロセッサ等を含む含まないに関わらず、どのようなコンピュータシステムにおいても実施可能である。
【００３０】
本発明の実施例をいくつか詳細に説明したが、本発明は上記以外の態様で実施可能である。特に上記では本発明を主にプロセッササブシステムを有する集積回路との関連において説明したが、バス帯域幅の増大等の発明の効果は、マルチプロセッサコンピュータシステム等の、大量の情報を発生する装置に対しても同様に適用可能である。
【００３１】
さらに、本発明の特徴的事項は、特定のシステムの必要条件に応じて適宜変更可能である。
【図面の簡単な説明】
【図１】
公知の実行可能命令データ語を示す図である。
【図２Ａ】
図１の実行可能命令のための公知のコンピュータシステムである。
【図２Ｂ】
（Ａ）のコンピュータシステム上で実行される公知の命令を示す図である。
【図３】
本発明の実施例におけるコンピュータシステムを示す図である。
【図４】
本発明の実施例における実行可能命令データ語を示す図である。
【図５】
本発明の実施例における、トランザクション数を低減するための装置の詳細を示すフローチャートである。
【符号の説明】
１００  実行可能命令データ語
２００、３００  コンピュータシステム
２０４、３０４  中央処理ユニット
２０６  双方向性プログラミングバス
２１０、３１２  命令バス
２１８  キャッシュメモリ
２２０  命令の典型例
３０６  プログラミングバス
４００  タグキャッシュエントリ
４２０  フェッチユニットタグキャッシュエントリ
４３０  関数ユニットキャッシュエントリ
【図１】
0005238960.tif 000002
【図２Ａ】
0005238960.tif 000003
【図２Ｂ】
0005238960.tif 000004
【図３】
0005238960.tif 000005
【図４】
0005238960.tif 000006
【図５】
0005238960.tif 000007