(57)【要約】【課題】  アウトオブオーダー方式で実行されるロード及びストア動作を管理する方法及び情報処理システムを提供する。【解決手段】  方法及び情報処理システムが、アウトオブオーダー方式で実行されるロード及びストア命令を管理する。ロード命令及びストア命令のうちの少なくとも１つが実行される。オペランドストア比較ハザードに遭遇したという判断がなされる。この判断に基づいて、オペランドストア比較ハザード予測テーブル内のエントリが作成される。このエントリは、少なくとも、実行された命令の命令アドレスと、命令と関連したハザード表示フラグとを含む。ハザード表示フラグは、命令がオペランドストア比較ハザードに遭遇したことを示す。ロード命令がハザード表示フラグと関連付けられると、ロード命令は、実質的に類似したフラグと関連した全てのストア命令に依存するようになる。【選択図】      図４
2013515306.tif 000002
【特許請求の範囲】
【請求項１】
アウトオブオーダー方式で実行されるロード及びストア動作を管理する方法であって、
ロード命令及びストア命令のうちの少なくとも１つの命令を実行するステップと、
前記実行に基づいて、オペランドストア比較ハザードに遭遇したことを判断するステップと、
前記判断に基づいて、オペランドストア比較ハザード予測テーブル内に、少なくとも、実行された前記少なくとも１つの命令の命令アドレスと、実行された前記少なくとも１つの命令と関連したハザード表示フラグとを含むエントリを作成するステップであって、前記ハザード表示フラグは、実行された前記少なくとも１つの命令が前記オペランドストア比較ハザードに遭遇したことを示す、作成するステップと、
を含む方法。
【請求項２】
前記実行するステップは、前記ロード命令及び前記ストア命令から選択される１つの命令を実行するステップを含み、さらに、
前記判断に基づいて、前記オペランドストア比較ハザード予測テーブル内に、選択されなかった前記ロード命令及び前記ストア命令のうちのもう１つの命令の命令アドレスと、前記もう１つの命令と関連したハザード表示フラグとを含むエントリを作成するステップであって、前記もう１つの命令と関連した前記ハザード表示フラグは、前記実行された前記１つの命令と関連した前記ハザード表示フラグと実質的に類似しており、前記もう１つの命令と関連した前記ハザード表示フラグは、前記もう１つの命令が前記オペランドストア比較ハザードに遭遇したことを示す、作成するステップと、
を含む請求項１に記載の方法。
【請求項３】
前記実行するステップは、
前記ストア命令の前に前記ロード命令を実行するステップと、
前記ロード命令が実行を終了した後、前記ストア命令を実行するステップと、
を含み、
前記ロード命令は、前記ストア命令が後の書き込み動作を実行する記憶場所からデータセットを取得する、請求項１に記載の方法。
【請求項４】
前記ストア命令により、前記ロード命令が前記記憶場所から前記データセットを取得したと判断するステップと、
前記判断に応答して、前記ストア命令により、ストア・ヒット・ロードハザードに遭遇したと判断するステップと、
前記ストア・ヒット・ロードハザードに遭遇したと判断するステップに応答して、前記ストア命令により、前記ロード命令が前記記憶場所から前記データセットを取得したと判断したときに前記ストア命令が比較した最も古いロードキューエントリ内に、ハザード表示フラグを設定するステップであって、前記ハザード表示フラグは、前記ロード命令が前記ストア・ヒット・ロードハザードと関連付けられることを示す、設定するステップと、
をさらに含む、請求項３に記載の方法。
【請求項５】
前記ストア命令により、前記オペランドストア比較ハザード予測テーブルを含む命令フェッチユニットに、前記ストア命令が前記ハザード表示フラグを設定したことを通知するステップであって、前記命令フェッチユニットは、前記通知することに応答して前記エントリを生成する、通知するステップと、
前記ストア命令が前記ハザードフラグを設定するステップに応答して、ストアキューにより、命令発行ユニットに、前記ストア命令の前記ストアキュー内のストアキューエントリ番号を通知するステップと、
前記ロード命令により、前記オペランドストア比較ハザード予測テーブルを含む前記命令フェッチユニットに、前記ストア命令が前記ハザード表示フラグを設定したことを通知するステップであって、前記命令フェッチユニットは、前記通知することに応答して前記エントリを生成する、通知するステップと、
のうちの少なくとも１つをさらに含む、請求項４に記載の方法。
【請求項６】
前記実行するステップは、
前記ロード命令の前に前記ストア命令を実行するステップであって、前記ストア命令と関連したデータセットが遅延される、実行するステップと、
前記データセットが前記ストア命令によりストアキュー内に書き込まれる前に前記ロード命令を実行するステップと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記データセットが前記ストア命令によりストアキュー内に書き込まれる前に実行されることに基づいて、前記ストア命令により、前記ロード命令が前記ストア命令に依存していると判断するステップと、
前記ロード命令が前記ストア命令に依存しているとの判断に基づいて、前記ロード命令により、ストア・データ転送を実行することができないと判断するステップと、
前記ストア・データ転送を実行することができないとの判断に基づいて、前記ロード命令により、前記ロード命令が転送不能ロード・ヒット・ストアハザードに遭遇したと判断するステップと、
をさらに含む、請求項６に記載の方法。
【請求項８】
前記ロード命令が前記転送不能ロード・ヒット・ストアハザードに遭遇したとの判断に基づいて、前記ロード命令により、前記ストア命令と関連した前記ストアキュー内のストアキューエントリ内に、ハザード表示フラグを設定するステップであって、前記ハザード表示フラグは、前記ストア命令が前記転送不能ロード・ヒット・ストアハザードと関連付けられることを示す、設定するステップと、
前記ロード命令が前記転送不能ロード・ヒット・ストアハザードに遭遇したとの判断に基づいて、前記ロード命令により、前記ロード命令と関連したロードキュー内のロードキューエントリ内に、ハザード表示フラグを設定するステップであって、前記ハザード表示フラグは、前記ロード命令が持続的転送不能ロード・ヒット・ストアハザードに遭遇したことを示す、設定するステップと、
をさらに含む、請求項７に記載の方法。
【請求項９】
前記ロード命令により、前記オペランドストア比較ハザード予測テーブルを含む命令フェッチユニットに、前記ロード命令が前記ロードキューエントリ内に前記ハザード表示フラグを設定したことを通知するステップであって、前記命令フェッチユニットは、前記通知することに応答して前記エントリを生成する、通知するステップと、
前記ストア命令により、前記オペランドストア比較ハザード予測テーブルを含む前記命令フェッチユニットに、前記ロード命令が前記ストアキューエントリ内に前記ハザード表示フラグを設定したことを通知するステップであって、前記命令フェッチユニットは、前記通知することに応答して前記エントリを生成する、通知するステップと、
のうちの少なくとも１つをさらに含む、請求項８に記載の方法。
【請求項１０】
前記実行するステップは、
前記ロード命令の前に前記ストア命令を実行するステップであって、前記ストア命令と関連したデータセットは持続的に入手可能でない、実行するステップと、
前記ストア命令の後に前記ロード命令を実行するステップと、
をさらに含む、請求項１に記載の方法。
【請求項１１】
前記データセットが持続的に入手可能でないことに基づいて、前記ロード命令により、前記ロード命令が前記ストア命令に依存していると判断するステップと、
前記ロード命令が前記ストア命令に依存しているとの判断に基づいて、前記ロード命令により、ストア・データ・転送を実行できないと判断するステップと、
前記ストア・データ・転送を実行することができず、かつ、前記データセットが持続的に入手可能でないとの判断に基づいて、前記ロード命令により、前記ロード命令が持続的転送不能ロード・ヒット・ストアハザードに遭遇したと判断するステップと、
をさらに含む、請求項１０に記載の方法。
【請求項１２】
前記ロード命令が前記持続的転送不能ロード・ヒット・ストアハザードに遭遇したとの判断に基づいて、前記ロード命令により、前記ストア命令と関連した前記ストアキュー内のストアキューエントリ内に、ハザード表示フラグを設定するステップであって、前記ハザード表示フラグは、前記ストア命令が前記持続的転送不能ロード・ヒット・ストアハザードと関連付けられること示す、設定するステップと、
前記ロード命令が前記持続的転送不能ロード・ヒット・ストアハザードに遭遇したとの判断に基づいて、前記ロード命令により、前記ロード命令と関連したロードキュー内のロードキューエントリ内に、ハザード表示フラグを設定するステップであって、前記ハザード表示フラグは、前記ロード命令が前記持続的転送不能ロード・ヒット・ストアハザードに遭遇したことを示す、設定するステップと、
をさらに含む、請求項１１に記載の方法。
【請求項１３】
前記ロード命令により、前記オペランドストア比較ハザード予測テーブルを含む命令フェッチユニットに、前記ロード命令が前記ロードキューエントリ内に前記ハザード表示フラグを設定したことを通知するステップであって、前記命令フェッチユニットは、前記通知することに応答して前記エントリを生成する、通知するステップと、
前記ストア命令により、前記オペランドストア比較ハザード予測テーブルを含む前記命令フェッチユニットに、前記ロード命令が前記ストアキューエントリ内に前記ハザード表示フラグを設定したことを通知するステップであって、前記命令フェッチユニットは、前記通知することに応答して前記エントリを生成する、通知するステップと、
のうちの少なくとも１つを含む、請求項１２に記載の方法。
【請求項１４】
前記命令の前記命令アドレスについて、前記オペランドストア比較ハザード予測テーブルに問い合わせするステップであって、前記オペランドストア比較ハザード予測テーブルは、ロード命令に関する第１のエントリと、ストア命令に関する第２のエントリとを含み、前記第１及び第２のエントリは、互いに独立しており、前記ロード命令及び前記ストア命令がそれぞれ以前にオペランドストア比較ハザードに遭遇したことを示し、かつ、それぞれ前記ロード命令及び前記ストア命令のうちの１つの少なくとも命令アドレスと、前記オペランドストア比較ハザードと関連したハザード表示フラグとを含む、問い合わせするステップと、
前記予測テーブルに問い合わせするステップに応答して、前記命令が、前記オペランドストア比較ハザード予測テーブル内の前記第１及び第２のエントリのうちの１つと関連付けられると判断するステップと、
前記判断することに基づいて、前記命令と関連した前記第１及び第２のエントリのうちの１つの中に含まれる前記ハザード表示フラグを識別するステップと、
をさらに含み、
前記命令が前記第１のエントリと関連付けられている場合、前記命令はロード命令であり、
前記識別されたハザード表示フラグに基づいて前記命令をマーク付けするステップであって、前記マーク付けするステップは、前記命令の実行を、所与の実行段階に達した前記命令と関連した前記ハザード表示フラグと実質的に類似したハザード表示フラグを含む前記予測テーブルの前記第２のエントリと関連した少なくとも１つのストア命令に依存させる、マーク付けするステップをさらに含み、
前記命令が前記第２のエントリと関連付けられる場合、前記命令はストア命令である、
請求項１に記載の方法。
【請求項１５】
前記命令と関連した前記ハザード表示フラグは、前記命令が以前に転送不能ロード・ヒット・ストアハザードに遭遇したことを示し、
前記マーク付けするステップは、前記命令の実行を、ストアが転送可能である段階に達した前記命令と関連したハザード表示フラグと実質的に類似した前記ハザード表示フラグを含む前記予測テーブルのエントリと関連した全てのストア命令に依存させる、
請求項１４に記載の方法。
【請求項１６】
前記命令と関連した前記ハザード表示フラグは、前記命令が以前に持続的転送不能ロード・ヒット・ストアハザードに遭遇したことを示し、
前記少なくとも１つのストア命令と関連した前記ハザード表示フラグは、前記少なくとも１つのストア命令が以前に持続的転送不能ロード・ヒット・ストアハザードに遭遇したことを示す、
請求項１４に記載の方法。
【請求項１７】
前記命令と関連した前記ハザード表示フラグは、前記命令が以前にストア・ヒット・ロードハザードに遭遇したことを示し、
前記少なくとも１つのストア命令と関連した前記ハザード表示フラグは、前記少なくとも１つのストア命令が以前にストア・ヒット・ロードハザードに遭遇したことを示す、
請求項１４に記載の方法。
【請求項１８】
前記マーク付けするステップに基づいて、前記命令と関連した前記ハザード表示フラグと実質的に類似した前記ハザード表示フラグを含む前記予測テーブルのエントリと関連した全てのストア命令が、そのアドレス計算を実行し、そのデータをストアキュー内の対応するエントリ内に書き込むまで、前記ロード命令の前記実行を遅延させるステップをさらに含む、請求項１４に記載の方法。
【請求項１９】
前記少なくとも１つのストア命令は、前記命令と関連した前記ハザード表示フラグと実質的に類似した前記ハザード表示フラグを含む最新のストア命令であり、
前記マーク付けするステップに基づいて、前記少なくとも１つのストア命令がＬ１キャッシュ・ライトバックを実行するまで、前記命令の前記実行を遅延させることをさらに含む、請求項１４に記載の方法。
【請求項２０】
前記方法の請求項のいずれかに記載の前記方法の全ての前記ステップを実行するように適合された手段を含むシステム。
【請求項２１】
コンピュータプログラムであって、前記コンピュータプログラムがコンピュータシステム上で実行される場合に、前記方法の請求項のいずれかに記載の前記方法の全ての前記ステップを実行するための命令を含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、マイクロプロセッサに関し、より具体的には、アウトオブオーダー方式（out-of-order）で実行されるロード（load）及びストア（store）動作の管理に関する。
【背景技術】
【０００２】
機械命令をアウトオブオーダー方式で発行し、実行することができるマイクロプロセッサは、一般に、ロードがストアの前に実行されることを可能にする。この特徴は、ロードアドレス及びストアアドレスの両方が同じ物理アドレスをもたないことを条件として、大きな性能の利点を可能にする。典型的なプログラムにおいては、ロードはストアより先に進み、それらの物理アドレスが合致する頻度は低い。しかしながら、この書き込み違反（store violation）状態の発見は、典型的には、命令実行パイプラインの終わりの方の段階であるので、回復の不利益は相当に厳しいものとなり得る。例えば、回復プロセスは、典型的には、違反を引き起こしたロード命令、及びロード命令以降のプログラム順における全てのより新しい命令を無効にすること、次いでロード命令を再発行することを要する。ストア・比較ハザード（store-compare hazard）を管理するための従来のメカニズムは、一般に、これらのハザードをあまり有効に管理するものではない。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」、ＳＡ２２−７８３２−０７、英語版、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ社、２００９年２月発行
【発明の概要】
【発明が解決しようとする課題】
【０００４】
アウトオブオーダー方式で実行されるロード及びストア動作を管理するための方法及び情報処理システムを提供する。
【課題を解決するための手段】
【０００５】
一実施形態において、アウトオブオーダー方式で実行されるロード及びストア動作を管理する方法が開示される。この方法は、ロード命令及びストア命令のうちの少なくとも１つを実行することを含む。この実行に基づいて、オペランドストア比較ハザードが発生したという判断がなされる。この判断に基づいて、オペランドストア比較ハザード予測テーブル内にエントリが作成される。このエントリは、少なくとも、実行された命令の命令アドレスと、命令と関連したハザード表示フラグ（ビットのような）とを含む。ハザード表示フラグは、命令がオペランドストア比較ハザードに遭遇したことを示す。
【０００６】
別の実施形態において、アウトオブオーダー方式で実行されるロード及びストア動作を管理する方法が開示される。この方法は、命令をフェッチすることを含む。命令は、ロード命令及びストア命令のうちの１つである。命令はデコードされる。
【０００７】
デコードに応答して、命令の命令アドレスについてオペランドストア比較ハザード予測テーブルに問い合わせする。オペランドストア比較ハザード予測テーブルは、ロード命令に関する第１のエントリと、ストア命令に関する第２のエントリとを含む。第１及び第２のエントリは互いに独立している。第１及び第２のエントリは、それぞれロード命令及びストア命令が以前にオペランドストア比較ハザードに遭遇したことを示す。第１及び第２のエントリは、少なくとも、それぞれロード命令及びストア命令の１つの命令アドレスと、オペランドストア比較ハザードと関連したハザード表示フラグとを含む。予測テーブルに問い合わせすることに応答して、命令が、オペランドストア比較ハザード予測テーブル内の第１及び第２のエントリの１つと関連付けられているという判断がなされる。この判断に基づいて、命令と関連した第１及び第２のエントリのうちの１つの中に含まれるハザード表示フラグが識別される。命令が第１のエントリと関連付けられるとき、命令はロード命令である。識別されたハザード表示フラグに基づいて、命令をマーク付けする。このマーク付けは、命令の実行を、所与の実行段階に達した命令と関連したハザード表示フラグと実質的に類似したハザード表示フラグを含む予測テーブルのエントリと関連した少なくとも１つのストア命令に依存させる。命令が第２のエントリと関連付けられるとき、この命令はストア命令である。
【０００８】
さらに別の実施形態において、アウトオブオーダー方式で実行されるロード及びストア動作を管理するための情報処理システムが開示される。この情報処理システムは、メモリと、メモリに通信可能に結合されたプロセッサとを含む。プロセッサは、ロード命令及びストア命令のうちの少なくとも１つを実行することを含む方法を実行するように構成される。この実行に基づいて、オペランドストア比較ハザードに遭遇したという判断がなされる。この判断に基づいて、オペランドストア比較ハザード予測テーブル内にエントリが作成される。エントリは、少なくとも、実行された命令の命令アドレスと、命令と関連したハザード表示フラグ（ビットのような）とを含む。ハザード表示フラグは、命令がオペランドストア比較ハザードに遭遇したことを示す。
【０００９】
同様の参照番号が、個々の図面を通じて同一の又は機能的に類似した要素を指しており、以下の詳細な説明と共に本明細書内に組み込まれて、本明細書の一部を形成する添付図面は、種々の実施形態をさらに示し、本発明に従った種々の原理及び全ての利点を説明するのに役立つ。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態による動作環境の一例を示す。
【図２】本発明の一実施形態によるロードキューエントリの一例を示す。
【図３】本発明の一実施形態によるストアキューエントリの一例を示す。
【図４】本発明の一実施形態によるオペランドストア比較ハザード予測テーブルの一例を示す。
【図５】本発明の種々の実施形態による、オペランドストア比較ハザード予測テーブル内のエントリを作成する種々の例を示す動作フロー図である。
【図６】本発明の種々の実施形態による、オペランドストア比較ハザード予測テーブル内のエントリを作成する種々の例を示す動作フロー図である。
【図７】本発明の種々の実施形態による、オペランドストア比較ハザード予測テーブル内のエントリを作成する種々の例を示す動作フロー図である。
【図８】本発明の種々の実施形態による、オペランドストア比較ハザードを予測し、回避する一例を示す動作フロー図である。
【図９】本発明の一実施形態による情報処理システムの一例を示すブロック図である。
【発明を実施するための形態】
【００１１】
必要に応じて、本発明の詳細な実施形態を本明細書で開示するが、開示される実施形態は、種々の形態で具体化することができる本発明の例にすぎないことを理解すべきである。従って、本明細書で開示される特定の構造上及び機能上の詳細は、限定として解釈されるべきではなく、単に特許請求の範囲の基礎として、及び、事実上あらゆる適切に詳述される構造及び機能において本発明を様々に用いることを当業者に教示するための代表的な基礎として解釈されるべきである。さらに、本明細書で用いられる用語及び語句は、限定を意図するものではなく、寧ろ、本発明の分かりやすい説明を提供することを意図するものである。
【００１２】
本明細書で用いられる「１つの（a）」又は「１つの（an）」という用語は、１つ以上として定義される。本明細書で用いられる「複数の（plurality）」という用語は、２つ以上として定義される。本明細書で用いられる「別の（another）」という用語は、少なくとも第２の又はそれ以上として定義される。本明細書で用いられる「含む（including）」及び「有する（having）」という用語は、備える（comprising）（すなわち、開放的語法（open language））として定義される。本明細書で用いられる「結合される（coupled）」という用語は、必ずしも直接及び機械的にではなく、接続されたものとして定義される。
特に断らない限り、複数形及び単数形は同じである。
【００１３】
概要
ロード及びストア命令をアウトオブオーダー方式で実行するマイクロプロセッサにおいて、依存しているロードとストアの間の並べ替え（reordering）が原因で、３つのオペランド・ストア・比較ハザード（ストア・ヒット・ロード（store-hit-load)、転送不能ロード・ヒットストア（non-forwardableload-hit store）、及び持続的転送不能ロード・ヒットストア（persistentnon-forwardable load-hit store））が発生することがある。例えば、アドレスＡに対するストアに続いてアドレスＡに対するロードが行われると仮定する。１つの状況においては、ロードは、ストアの前に実行することができる、即ち、ストアキュー（Store Queue、ＳＴＱ）は、ストアアドレス情報を含まない。従って、ロードが実行されるとき、ストアキューは競合を示さない。ひとたびロードが実行を終了すると、ストアが実行され、ロードキュー内の既に終了したロードに対する競合を検出し、パイプラインをフラッシュして、ロード及びあらゆる後続の命令を停止させる。これは、（既に以前推論的に実行されたロード及び全ての後続の命令を）再実行するのに大量の作業が必要であるため、非常に費用のかかる動作である。上記の状況は、ストア・ヒット・ロード（ＳＨＬ）と呼ばれる。
【００１４】
別の状況においては、ストアはそのアドレス計算を実行するが、例えばデータ生成命令が長い待ち時間を有する（例えば、分割する）ために、ストアに関するデータが遅延される。次いで、ストアデータがＳＴＱに書き込まれる前にロードが実行される。ロードは、それがストアに依存していることを検出するが、データが入手可能でないので、ストア・データ転送（store-data-forwarding）を実行することができない。従って、ロードは、拒絶され、後でストアデータが入手可能になった後に再試行する必要がある。この状況は、転送不能ロード・ヒット・ストア（ｎｆ−ＬＨＳ）と呼ばれる。
【００１５】
さらに別の状況においては、上述したｎｆ−ＬＨＳの状況に類似して、特定のストア命令（例えば、これらがライン交差している場合、又は長さが８バイトを上回る場合）、一般に、（特定のＳＴＱ設計毎に）転送できないことがある。この状況において、ロードは、ストアデータが既にＳＴＱ内に書き込まれているとしても、ストアがＬ１キャッシュにライトバックされる（write back、書き戻される）まで、何度も繰り返して再循環させる必要がある。この状況は、「持続的ｎｆ−ＬＨＳ」と呼ばれる。
【００１６】
アウトオブオーダー処理を管理するための従来のメカニズムは、一般に、上述した３つのハザードを有効に処理するものではない。例えば、幾つかの従来のメカニズムは、ロードを全ての先行するストア命令に依存させることによって、命令・レベル・並列処理（Instruction-Level-Parallelism、ＩＬＰ）を制限する。他の従来のメカニズムは、一般に、ロード命令が複数のストア命令に依存しており、これらの複数のストア命令がロード命令に通じる異なる分岐パス上にあり得る、一般的な場合を処理することができない。
【００１７】
しかしながら、本発明の種々の実施形態の１つの利点は、上述した３つのハザードが有効に回避されることである。少なくとも１つの実施形態において、どのロード及びストアが依存性を有するか、並びに、これらの依存性のタイプ（例えば、ｅ−ビット又はｗ−ビット依存性）を予測する予測テーブルが作成される。次いで、命令のデコード後、ｅ−ビットロードは、全ての先行するｅ−ビットストアに依存させられ、命令発行論理により、あたかも正規のレジスタ依存性であるかのように処理される。これにより、全てのｅ−ビットストアがそのアドレス計算を実行し、そのデータをＳＴＱに書き込むまで、ｅ−ビットロード命令の実行が有効に遅延される。このことにより、事実上、ＳＨＬ及びｎｆ−ＬＨＳハザードが取り除かれることになる。ｗ−ビット依存性に関して、ロードは、ｗ−ビットストアとして予測された最後のストアのＬ１キャッシュ・ライトバックに依存させられる。このことは、持続的ｎｆ−ＬＨＳハザードを有効に防止する。
【００１８】
動作環境
図１は、本発明の１つ又は複数の実施形態による、１つ又は複数の処理命令及びデータに適用可能な動作環境１００の一例を示すブロック図である。プロセッサ１０１は、種々の実行ユニット、レジスタ、バッファ、メモリ、及び全て集積回路によって形成された他の機能ユニットを含む、スーパースカラー・プロセッサのような単一の集積回路プロセッサを含む。一実施形態において、プロセッサ１０１は、命令をアウトオブオーダー方式で発行し、実行することができる。
【００１９】
一実施形態において、プロセッサ１０１は、命令フェッチユニット（ＩＦＵ）１０２と、命令デコードユニット（ＩＤＵ）１０４と、命令発行ユニット（ＩＳＵ）１０６と、ロード／ストアユニット（ＬＳＵ）１０８と、オペランドアドレス生成ユニット１１０と、固定小数点ユニット１１２（又は、いずれかの他の実行ユニット）と、種々の他の実行ユニット、レジスタ、バッファ、メモリ、及び他の機能ユニットのような他のコンポーネント１１４とを含む。一実施形態において、ＩＦＵ１０２は、オペランド・ストア・比較（operand-store-compare、ＯＳＣ）予測テーブル１１６を含む。ＯＳＣ予測テーブル１１６は、以下に詳述される。
【００２０】
この実施形態において、発行ユニット１０６は、発行キュー１１８を含む。この実施形態において、ＬＳＵ１０８は、ロードキュー（ＬＤＱ）１２０と、ストアキュー（ＳＴＱ）１２２と、Ｌ１キャッシュ１２４とを含む。ＬＤＱ１２０及びＳＴＱ１２２の各々は、それぞれ、未処理のロード及びストア命令と関連した付加的な情報を追跡するエントリ１２６、１２８を含む。本発明の種々の実施形態は、図１に示されるようなプロセッサ１０１の構成に限定されるものではないことに留意すべきである。本発明の実施形態は、図１に示される例とは異なり得る種々のアーキテクチャに適用可能である。
【００２１】
一般に、ＩＦＵ１０２は、Ｌ１キャッシュ１２４の一部とすることができる、Ｉキャッシュ内にストアされた命令コードをフェッチする。これらのフェッチされた命令コードは、ＩＤＵ１０４によって命令処理データにデコードされる。ひとたびデコードされると、命令はディスパッチされ、適切な発行キュー１１８内に一時的に入れられる。命令は、それらの全ての必要なオペランドが入手可能になるまで、発行キュー１１８内に保持される。発行キュー１１８から、命令を、実行のために、プロセッサ１００の実行ユニット、例えばＬＳＵ１０８、ＦＸＵ１１２等などに日和見的に（opportunistically）発行することができる。換言すれば、命令は、アウトオブオーダー方式で発行することができる。しかしながら、命令のいずれかを再発行する必要がある場合に備えて、これらの命令は、命令の実行が完了し、もしあれば、結果データがライトバックされるまで、発行キュー１１８内に保持される。
【００２２】
実行ユニット１０８、１１２の１つの中での実行中、命令は、実行ユニットに結合されたレジスタファイル内の１つ又は複数の設計済み（architected）及び／又はリネーム・レジスタから、もしあれば、オペランドを受け取る。実行ユニットが１つの命令の実行を終えた後、実行ユニットはその結果を、命令で定められるように指定された宛先に書き込み、発行キューからその命令を取り除き、次いで、命令の完了をプログラム順にスケジュールすることができる。オペランドアドレス生成ユニット１１０は、ロード及びストア命令に関するオペランドアドレス情報を生成し、これらのアドレスをそれぞれのＬＤＱ１２０及びＳＴＱ１２２に書き込む。ＦＸＵ１１２は、データ値をＳＴＱ１２２に書き込む。
【００２３】
上述のように、ＬＳＵ１０８は、ＩＳＵ１０６からロード及びストア命令を受け取り、そのロード及びストア命令を実行する。一般に、各々のロード命令は、必要とされるデータのアドレスを指定するアドレス情報を含む。一実施形態において、ＬＳＵ１０８は、ロード及びストア命令のアウトオブオーダー実行をサポートし、これにより高レベルの性能を達成することができる。一実施形態において、ＬＳＵ１０８は、パイプライン型である。つまり、ＬＳＵ１０８は、順に実行される一組の順序付けられたパイプライン・ステージを介して、ロード及びストア命令を実行する。
【００２４】
ＯＳＣハザード管理
上述のように、３つのタイプのハザード（ストア・ヒット・ロード、転送不能ロード・ヒットストア、及び持続的転送不能ロード・ヒットストア）は、ロード及びストア命令をアウトオブオーダー方式で実行するプロセッサ内で発生し得る。従って、図１に関して上述した一般的な処理メカニズムに加えて、以下の実施形態の１つ又は複数をプロセッサ１００内で実施し、これらのＯＳＣハザードを予測し、回避することもできる。
【００２５】
一般に、あらゆるロードにはＬＤＱ１２０内のエントリが割り当てられ、このエントリは、ロードが実行され、完了するまで各々のロードのアドレスを保存する。あらゆるストアにはＳＴＱ１２２内のエントリが割り当てられ、同様にこのエントリは、ストアが完了し、データをＬ１キャッシュ１２４に書き込むまで、ストアアドレス計算の実行から、ストアアドレスを保存する。しかしながら、検出されたハザードのタイプに基づいて、ＬＤＱエントリ及びＳＴＱエントリは、ＯＳＣハザードを予測し、回避するための付加的な情報を含むこともできる。
【００２６】
例えば、一実施形態において、ＬＳＵ１０８がロード命令を実行し、このロードをＳＴＱ１２２内の対応するエントリと比較する。ロード命令は、ストア・データ・転送を実行することができないと判断する。例えば、ストア・データがＳＴＱに書き込まれる前にロードが実行される（ｎｆ−ＬＨＳ）、又はデータが入手可能なときでさえ、ストア・データ・転送が許可されない（持続的ｎｆ−ＬＨＳ）。次に、ロード命令がｎｆ−ＬＨＳハザードを検出した場合、ロード命令は、これが比較したＳＴＱエントリ内に、「ｅ−フラグ」（例えば、実行フラグ）のようなＯＳＣハザードビットを設定する。或いは、ロード命令が持続的ｎｆ−ＬＨＳハザードを検出した場合、ロード命令は同様に、これが比較したＳＴＱエントリ内に、「ｗ−フラグ」（例えば、書き込みフラグ）のようなＯＳＣハザードビットを設定する。ロード命令はまた、ＬＤＱ１２０のそれ自体のエントリ内に、ｅ−フラグ又はｗ−フラグなどの同じＯＳＣハザードビットを設定する。
【００２７】
実行されたストア命令がＳＨＬハザードを検出し、ＬＤＱエントリに対してＳＨＬフラッシュを実行すると、ストア命令は、それ自体のＳＴＱエントリ内に「ｅ−フラグ」のようなＯＳＣハザードビットを設定し、命令が比較する（最も古い）ＬＤＱエントリ内に、「ｅ−フラグ」のようなＯＳＣハザードビットを設定する。結果として生じるフラッシュのためにこのＬＤＱエントリは無効にされるが、「ｅ−フラグ」はＬＤＱ１２０内に保持されることに留意すべきである。プロセッサのパイプラインがフラッシュされた命令の再フェッチ及び再実行を開始するとき、同じロードが、今やフラッシュ前から設定された「ｅ−フラグ」を有する同じＬＤＱエントリに割り当てられる。
【００２８】
図２−図３は、本発明の一実施形態による、それぞれＬＤＱ２２６及びＳＴＱ３２８エントリの一例を示す。図２に見られるように、オペランドアドレス情報２０４、有効ビット情報２０６、及び他の一般情報２１０などの一般情報に加えて、ＬＤＱキュー１２０内のエントリ２２６はまた、１つ又は複数のＯＳＣハザードビット２０８も含む。上述のように、このＯＳＣハザード表示ビット２０８は、ロード命令がｎｆ−ＬＨＳハザードに遭遇したのか、又は持続的ｎｆ−ＬＨＳハザードに遭遇したのかに応じて、ｅ−フラグ又はｗ−フラグとすることができる。上述のように、このＯＳＣハザードビット２０８は、ストア命令によって設定することもできる。他のタイプのフラグ等を用いて、ロード命令がｎｆ−ＬＨＳハザード又は持続的ｎｆ−ＬＨＳハザードに遭遇したことを示すこともできることに留意すべきである。
【００２９】
図３に見られるように、オペランドアドレス情報３０４、有効ビット情報３０６、データ値情報３０８、及び他の一般情報３１２のような一般情報に加えて、ＳＴＱキュー１２２内のエントリ３２８は、１つ又は複数のＯＳＣハザードビット３１０も含む。上述のように、このＯＳＣハザードビット３１０は、ロード命令がｎｆ−ＬＨＳハザードに遭遇したのか又は持続的ｎｆ−ＬＨＳハザードに遭遇したのかに応じて、ｅ−フラグ又はｗ−フラグとすることができる。また、上述のように、このＯＳＣハザードビット３１０は、ストア命令がＳＨＬハザードに遭遇した場合にｅ−フラグとすることができる。
【００３０】
他のタイプのフラグ等を用いて、ロード命令がｎｆ−ＬＨＳハザード又は持続的ｎｆ−ＬＨＳハザードに遭遇したこと、及び／又はストア命令がＳＨＬハザードに遭遇したことを示すことができることに留意すべきである。また、ロード又はストア命令は、それぞれのキューのエントリ内に設定したのと同じビットを他のキューのエントリ内に設定するので、キュー１２０、１２２の１つの中のＯＳＣハザード表示ビット２０８、３１０は、他のキュー１２０、１２２内の少なくとも１つのＯＳＣハザード表示ビット２０８、３１０と合致する。また、ＯＳＣハザードを予測し、回避するために、ＯＳＣハザードビット情報２０８、３１０をどのように使用するかについての考察が以下に与えられる。
【００３１】
ひとたびロード命令が完了すると、ロード命令は、ＬＤＱ１２０内にｅ−フラグ又はｗ−フラグのようなＯＳＣハザードビット情報を有するかどうかを判断する。ＯＳＣハザードビット情報を有する場合には、ロード命令はこれをＩＦＵ１０２に示す。次に、一実施形態において、ＩＦＵ１０２は、この特定のロード命令に関するエントリをＯＳＣ予測テーブル１１６内に生成する。ＯＳＣ予測テーブルは、ロードの命令アドレスに基づいてエントリを作成し、このロードに関する１つ又は複数のフラグを記憶する。例えば、ＯＳＣ予測テーブル内のエントリは、ロードがｅ−フラグ及び／又はｗ−フラグと関連付けられているかどうかを示し、ここで、ロードが複数のストアキューに対して比較する場合、ロードは両方のフラグを有することができる。
【００３２】
ストア命令が完了し、Ｌ１キャッシュ１２４にライトバックされると、ストア命令は、該ストア命令がＳＴＱ１２２内に、ｅ−フラグ又はｗ−フラグのようなＯＳＣハザードビット情報を有するかどうかを判断する。ＯＳＣハザードビット情報を有する場合、ストア命令は、これをＩＦＵ１０２に示す。次に、ＩＦＵ１０２は、ＯＳＣ予測テーブル１１６内に、ストア命令の命令アドレスと、ストアの命令アドレスの下の１つ又は複数のフラグとを含む、この特定のストア命令に関するエントリを生成する。また、ストア命令がＬ１キャッシュ１２４にライトバックされるとき、ＳＴＱ１２２は、ＩＳＵ１０６に、ＳＴＱ１２２内の所与のストア命令のＳＴＱエントリ番号（スタグ）を通知する。
【００３３】
図４は、ＯＳＣ予測テーブル１１６内のロード命令エントリ及びストア命令エントリの一例を示す。特定的には、図４は、ロード命令エントリ４０２が、命令の命令アドレス４０４と、エントリ有効ビット４０６と、ロード「ｅ」ビット４０８及びロード「ｗ」ビット４１０のような１つ又は複数のハザード表示ビットとを含むことを示す。ストア命令エントリ４０３は、命令の命令アドレス４１２と、エントリ有効ビット４１４と、ストア「ｅ」ビット４１６及びストア「ｗ」ビット４１８のような１つ又は複数のハザード表示ビットとを含む。上述のように、ロード命令及びＳＴＱ１２２から得られた情報に基づいて、ＯＳＣハザード表示ビット４０８、４１０、４１４、４１６が設定される。ＯＳＣ予測テーブル１１６内の各々のロード及びストアエントリは、互いに独立して作成される。換言すれば、ＯＳＣ予測テーブル１１６内のロードエントリは、ＯＳＣ予測テーブル１１６内のストアエントリ又はそれと関連した他のいずれのテーブルも参照せず、かつ、それらによっても参照されず、さらに言えば逆も又同様である。
【００３４】
例えば、図４に示されるように、ＬＤＱエントリ内に「ｅ」依存性ビット（dependency bit）を設定し、対応するストア命令のＳＴＱエントリ内に「ｅ」ビットを設定したロード命令は、これをＩＦＵ１０２に通知し、次に、予測テーブル１１６内にロード及びストア命令の各々についてのエントリ４０２、４０３を作成する。この例においては、ロード「ｅ」ビット４０８がロード命令エントリ４０２内に設定され、ストア「ｅ」ビット４１６がストア命令エントリ４０３内に設定される。種々の技術を用いて、命令アドレスに基づいた予測テーブルを生成できることにも留意すべきである。例えば、オーバーフローに向けられた技術（最長時間未使用技術）、読み出し／書き込み競合（キューイング）、及び予測テーブルに対する類似の技術を用いることができる。
【００３５】
ひとたび予測テーブル１１６がポピュレートされる（populate）と、命令がＩＦＵ１０２によりフェッチされ、ＩＦＵ１０２は、ＩＤＵ１０４によりデコードするためにパイプライン内に送られる度に、並行して、ＯＳＣ予測テーブル１１６に問い合わせし、この情報をＩＤＵ１０４に送る。この問い合わせは、所与のフェッチされた命令が「ｅ」又は「ｗ」ビットを含むロード及び／又はストアとして認識されるかどうかを判断するために、ＩＤＵ１０４により用いられる。例えば、ＩＦＵ１０２は、命令の命令アドレスを用いて予測テーブル１１６に問い合わせし、対応する命令アドレスを有するエントリを識別する。ＯＳＣ予測テーブル１１６から得られた情報は、ＩＤＵ１０４からＩＳＵ１０６に渡される。
【００３６】
ＩＳＵ１０６は、この依存性情報を用いて、以下のことを実行する。命令がストア・ｅ−ビットを含む場合、ＩＳＵ１０６は、その命令をストア・ｅ−ビット命令として記憶する。命令がストア・ｗ−ビットを有する場合、ＩＳＵ１０６は、その命令に対して割り当てられたＳＴＱエントリ番号（「スタグ（stag）」）を記憶する。一実施形態において、ＩＳＵ１０６は、ｗ−スタグと呼ばれる、最も新しいそうしたスタグを記憶する。命令がロード・ｅ−ビットを有する場合、ＩＳＵ１０６は、この命令を、ストア・ｅ−ビットでマーク付けされたあらゆる先行命令に依存するものとしてマーク付けする。この依存性は、所与の汎用レジスタのライターとリーダーの間で生成される依存性とよく似ている。ＩＳＵ１０６は、ロード命令が、ストア命令が正常に実行され、ストアアドレス及びデータがＳＴＱエントリ内に書き込まれるまで実行されないことを保証する。その時点までロードを遅延させることにより、ＩＳＵ１０６は、ロードがストア・転送済みデータをＳＴＱエントリから取得することができ、従って、ＳＨＬハザード又はｎｆ−ＬＨＳハザードが回避されることを保証する。
【００３７】
命令がロード・ｗ−ビットを有する場合、ロード（即ち、ｗ−スタグ）前の最後のストア・ｗ−ビットストアのスタグがＬ１キャッシュ１２４にライトバックされるまで、ＩＳＵ１０６がロードの実行を許容しないように、ロードがマーク付けされる（上述のように、ＳＴＱ１２２は、いつライトバックが行われるかを、ＩＳＵ１０６に通知する）。ストアがＬ１キャッシュ１２４にライトバックするまでロードを遅延させることにより、持続的ｎｆ−ＬＨＳハザードが防止される。事実上、ＩＳＵ１０６によって実行される上記のプロセスは、全てのｅ−ビットロードを、全ての先行するｅ−ビットストアの実行に依存させ、全てのｗ−ビットロードを全ての先行するｗ−ビット・ストアのライトバックに依存させる。
【００３８】
例えば分岐の誤りのために、ＩＳＵ１０６内の最後にｗ−スタグを設定したストア命令がフラッシュされることもあることに留意すべきである。しかしながら、依然としてｗ−スタグを追跡することができる。例えば、一実施形態において、最新のフラッシュされていないｗ−ビットストアが、保存された最新のｗ−ビットストアとして指定される。この選択肢は、相当な追跡費用を必要とし得る。別の実施形態においては、最新のフラッシュされていないスタグが、保存された最新のｗ−ビットストアとなる。このストアを、実際に、ｗ−ビットストアとしてマーク付けする必要はない。この選択肢は、あまり追跡費用を必要とせず、そのストアがｗ−ビット予測を有していなかった場合でも、ストアをｗ−ストアとして処理する。このことは、僅かな性能の低下をもたらす。さらに別の実施形態においては、保存された最新のｗ−ビットストアが無効にされる。保存された最新のｗ−ビットストアが依然として無効状態にある間にディスパッチされたｗ−ビットロードは、スタグ依存性をマーク付けしない。
【００３９】
ロードでもストアでもある命令に対して、これらの命令が、それ自体へのｗ−ビット依存性をマーク付けしないことを確実にするように、ステップが取られる。これは特に、命令が複数の部分で構成される場合に問題となる。一実施形態においては、ｗ−ビットをマーク付けしたストア部分が常にｗ−ビットをマーク付けしたロード部分の後にくるのを確実にすることによって、或いは、命令の全ての部分がディスパッチされるまで、保存された最新のｗ−ビットストアが更新されないことを確実にすることによって、この依存性の防止を達成することができる。一般に、それらの部分が互いに対して単にインオーダー方式に発行されるので、複数の部分からなる命令内でｅ−ビット依存性をマーク付けするのが安全である。しかしながら、必要に応じて、類似の方法を用いてこの依存性を防止することが可能である。
【００４０】
一実施形態において、ｅ−ビットでマーク付けされたストアのベクトルが保持され（他のレジスタ依存性のような追跡メカニズムが可能である、発行キューエントリ毎に１ビット）、ｅ−ビットでマーク付けされたロードは、ベクトル内の対応するビットが設定される全てのより古い有効な発行キューエントリに依存させられる。ベクトル内のビットは、命令がそれらにディスパッチされるときに書き込まれ、命令がｅ−ビットストアである場合に設定状態におかれ、他の場合には未設定状態におかれる。
【００４１】
代替的に、ロード及びストアは、ｅ及びｗビットのグループで追跡することができる（例えば、５個のｅ−ビットｅ１．．．ｅ５が存在し、ｅ１−ストアとｅ１−ロードだけが対にされる、ｅ２−ストアとｅ２−ロードが対にされるなど）。ハザード時には、ＬＤＱ及びＳＤＱ内に設定するように、無作為のｅ−ビット（例えば、ｅ２）を選択することができる。この設計は、２つの態様を別個に処理するが、ストアとしての依存性及びロードとしての依存性の両方を強制することによって、特定の命令がロードでもあり、ストアでもある（例えば、システムｚ内のＣＳ命令）上述した方法に拡張することができる。
【００４２】
示されるように、本発明の上記の実施形態は、どのロード及びストアが依存性を有するか、及びこれらの依存性のタイプ（例えば、ｅ−ビット又はｗ−ビット依存性）を予測する予測テーブルが作成されるという点で有利である。次に、命令のデコード後、ｅ−ビットロードは、全ての先行するｅ−ビットストアに依存させられ、命令発行論理により、あたかも正規のレジスタ依存性であるかのように処理される。これは、全てのｅ−ビットストアがそのアドレス計算を実行し、そのデータをＳＴＱに書き込むまで、ｅ−ビットロード命令の実行を有効に遅延させる。このことにより、事実上、ＳＨＬ及びｎｆ−ＬＨＳハザードが取り除かれる。ｗ−ビット依存性に関して、ロードは、ｗ−ビットストアとして予測された最後のストアのＬ１キャッシュ・ライトバックに依存させられる。このことは、持続的ｎｆ−ＬＨＳハザードを有効に防止する。各ロードエントリ及び各ストアエントリは、ＯＳＣ予測テーブル内で互いに独立している。換言すれば、ロード命令エントリはストア命令エントリを参照せず、逆もまた同様である。このことは、複数のストア命令及び複数のロードの間に依存性をもたらすことを可能にする。
【００４３】
さらに、一実施形態によると、ロードが設定されたｅ−ビット及びｗ−ビットの両方を有する場合、ロードは、全てのｅ−ビットストア及び全てのｗ−ビットストアがＯＳＣ予測テーブル内に示されるまで遅延される。つまり、ロードは、全てのｅ−ビットストアがそのアドレス計算を実行し、そのデータをＳＴＱ内に書き込むまで遅延され、また、最後のｗ−ビットストアのＬ１キャッシュ・ライトバックに依存させられる。
【００４４】
同様に、一例によると、ロードがＯＳＣテーブル内に設定されたｅ−ビットを有し、ストアがＯＳＣテーブル内に設定されたｅ−ビット及びｗ−ビットの両方を有する場合、ロードは、設定されたｅ−ビットを有するストアがそのアドレス計算を実行し、そのデータをＳＴＱ内に書き込む（例えば、データが転送される）まで遅延される。ロードがＯＳＣテーブル内に設定されたｗ−ビットを有し、ストアが設定されたｅ−ビット及びｗ−ビットの両方を有する場合、ロードは、設定されたｗ−ビットを有するストアがＬ１キャッシュのライトバックを実行するまで遅延される。最後に、ロードが設定されたｅ−ビット及び設定されたｗ−ビットの両方を有し、ストアが設定されたｅ−ビット及び設定されたｗ−ビットの両方を有する場合、ｗ−ビットが優先する。設定されたｗ−ビットを有するロードは、設定されたｗ−ビットを有するストアの実行まで遅延され、これは、設定されたｗ−ビットを有するストアの最長遅延（Ｌ１キャッシュのライトバックに依存する）に対応する。
【００４５】
一実施形態によると、１つ又は複数のロード及び１つ又は複数のストアが、１つの複合命令内に含まれることがある。このタイプの複合命令の種々の例は、次の非特許文献１に見出すことができる。つまり、１つの命令をロード及びストアと見なすことができる。同じ命令が、ＯＳＣテーブル内に１つ又は複数のロードエントリ及び１つ又は複数のストアエントリを作成することができる。これらのロード及びストアは、ＯＳＣテーブル内のそれぞれのｅ−ビット及びｗ−ビットによって追跡することができる。
【００４６】
動作フロー図
図５は、ＯＳＣハザードを予測し、防止するためのＯＳＣ予測テーブル１１６内にエントリを生成する一例を示す動作フロー図である。図５の動作フロー図は、ステップ５０２で開始し、直ちにステップ５０４に進む。ステップ５０４において、関連したストア命令に先立って、ロード命令が実行を開始する。ステップ５０６において、ロード命令は、ストア命令が将来書き込む記憶場所からデータを取得する。ステップ５０８において、ロード命令が実行を終了する。ステップ５１０において、ストア命令が実行を開始する。ステップ５１２において、ストア命令は、ロード命令が、ストア命令が現在書き込んでいる記憶場所から以前にデータを取得していると判断する。
【００４７】
ステップ５１４において、ストア命令は、ＳＨＬハザードに遭遇したことを判断する。次にステップ５１６において、ストア命令は、この命令がＯＳＣハザード状況の候補であることを示すように、ｅ−フラグビットのようなフラグビットを設定する。このｅ−フラグビットは、ストア命令が比較する最も古いＬＤＱエントリ内に設定される。ステップ５１８において、ストア命令は、ＳＴＱ１２２内のストア命令と関連したＳＴＱエントリ内にｅ−フラグビットを設定する。次にステップ５２０において、ストア命令は、ロード命令及びパイプラインからの全てのより新しいロード命令をフラッシュする。
【００４８】
ステップ５２２において、ストア命令は、Ｌ１キャッシュ１２４にライトバックする。ステップ５２４において、ストア命令は、ストア命令がｅ−フラグ（又はロード命令によって設定されたようなｗ−フラグ）ビット・ペンディングを有することを、ＩＦＵ１０２に通知する。ステップ５２６において、ＩＦＵ１０２は、ＯＳＣ予測テーブル１１６内に、ストア命令に関するエントリを生成する。このエントリは、ストア命令の命令アドレス、有効ビット、及びストア命令がｅ−フラグと関連付けられているという表示を含む。例えば、ビット又はフラグをエントリ内に設定し、命令がストア・ｅ−ビットと関連付けられていることを示すことができる。ステップ５２７において、ＩＦＵ１０２はまた、ＯＳＣ予測テーブル１１６内に、ロード命令に関するエントリも生成する。例えば、ステップ５２０においてロードがＳＨＬからフラッシュされた後、パイプラインが、以前と同じＬＤＱエントリを用いるロードを再実行する。ロードが完了した後、ロードは、そのフラグ（例えば、ｅ−ビット）をＯＳＣ予測テーブル１１６内に書き込む。このエントリは、ロード命令の命令アドレス、有効ビット、及びロード命令がｅ−フラグと関連付けられているという表示を含む。ストアエントリ及びロードエントリは互いに独立しており、決して互いに参照しない。ステップ５２８において、ＳＴＱ１２２は、ＩＳＵ１０６に、Ｌ１キャッシュ１２４にライトバックされたストア命令のＳＴＱエントリ番号（スタグ）を通知する。次に、ステップ５３０において、制御フローが終了する。
【００４９】
図６は、ＯＳＣハザードを予測し、防止するためのＯＳＣ予測テーブル１１６内にエントリを生成する別の例を示す動作フロー図である。図６の動作フロー図は、ステップ６０２で開始し、直ちにステップ６０４に進む。ステップ６０４において、ストア命令がそのアドレス計算を実行する。ステップ６０６において、ストア命令に関するデータが遅延される。ステップ６０８において、ストア・データがＳＴＱ１２２に書き込まれる前に、ロード命令が実行される。ステップ６１０において、ロード命令は、ロード命令がストア命令に依存しており、ストア・データ・転送を実行できないと判断する。
【００５０】
ステップ６１２において、ロード命令は、ｎｆ−ＬＨＳ状況に遭遇したと判断する。ステップ６１４において、ロード命令は、ストア命令のＳＴＱエントリ内にｅ−フラグビットを設定する。ステップ６１６において、ロード命令は、対応するＬＤＱエントリ内にｅ−フラグビットを設定する。ステップ６１８において、ロード命令が実行を終了する。ステップ６２０において、ロード命令は、ロード命令がＬＤＱ１２０内にｅ−フラグビットを設定したという情報をＩＦＵ１０２に送る。ステップ６２２において、ＩＦＵが、ＯＳＣテーブル１１６内にロード命令に関するエントリを生成する。このエントリは、ロード命令の命令アドレス、有効ビット、及びロード命令がｅ−フラグビットと関連付けられているという表示を含む。例えば、命令がロード・ｅ−ビットと関連付けられていることを示すビット又はフラグをエントリ内に設定することができる。ステップ６２３において、ＩＦＵ１０２も同様に、ＯＳＣ予測テーブル１１６内にストア命令に関するエントリを生成する。例えば、ストア命令がＬ１キャッシュ１２４にライトバックするとき（ステップ６２０の前又は後に起こり得る）、ＳＴＱ内のフラグ（ｅ−ビット）がＩＦＵ１０２に通信され、ストアに関するエントリがテーブル１１６内に作成される。このエントリは、ストア命令の命令アドレス、有効ビット、及びストア命令がｅ−フラグビットと関連付けられているという表示を含む。ロード及びストアエントリは互いに独立しており、決して互いに参照しない。次に、ステップ６２４において、制御フローが終了する。
【００５１】
図７は、ＯＳＣハザードを予測し、防止するためのＯＳＣ予測テーブル１１６内にエントリを生成するさらに別の例を示す動作フロー図である。図７の動作フロー図はステップ７０２で開始し、直ちにステップ７０４に進む。ステップ７０４において、ストア命令がそのアドレス計算を実行する。ステップ７０６において、ロード命令がその実行を開始する。ステップ７０８において、ロード命令は、ロード命令がストア命令に依存しており、ストア・データ・転送を実行できないと判断する。
【００５２】
ステップ７１０において、ロード命令が持続的ｎｆ−ＬＨＳ状況に遭遇したと判断する。ステップ７１２において、ロード命令は、ストア命令のＳＴＱエントリ内にｗ−フラグビットを設定する。ステップ７１４において、ロード命令は、対応するＬＤＱエントリ内にｗ−フラグビットを設定する。ステップ７１６において、ロード命令が実行を終了する。ステップ７１８において、ロード命令は、ロード命令がＬＤＱ１２０内にｗ−フラグビットを設定したことをＩＦＵ１０２に通知する。ステップ７２０において、ＩＦＵは、ＯＳＣ予測テーブル１１６内にロード命令に関するエントリを生成する。このエントリは、ロード命令の命令アドレス、有効ビット、及びロード命令がｗ−フラグビットと関連付けられているという表示を含む。例えば、命令がロード・ｗ−ビットと関連付けられていること示すビット又はフラグをエントリ内に設定することができる。ステップ７２１において、ＩＦＵは、ＯＳＣ予測テーブル１１６内にストア命令に関するエントリを生成する。例えば、ストア命令がＬ１キャッシュ１２４にライトバックするとき（ステップ７１８の前又は後に起こり得る）、ＳＴＱ内のフラグ（ｅ−ビット）がＩＦＵ１０２に通信され、ストアに関するエントリがテーブル１１６内に作成される。このエントリは、ストア命令の命令アドレス、有効ビット、及びストア命令がｗ−フラグビットと関連付けられているという表示を含む。ロード及びストアエントリは互いに独立しており、決して互いに参照しない。次に、ステップ７２２において、制御フローが終了する。
【００５３】
図８は、ＯＳＣハザードを予測し、防止する一例を示す動作フロー図である。図８の動作フロー図はステップ８０２で開始し、直ちにステップ８０４に進む。ステップ８０４において、ＩＦＵ１０２が命令をフェッチする。ステップ８０６において、ＩＦＵ１０２は、並行して、命令の命令アドレスを用いてＯＳＣ予測テーブル１１６に問い合わせする。ステップ８０８において、ＩＦＵ１０２は、命令が予測テーブル１１６内のエントリを含むかどうかを判断する。この判断の結果が否定である場合には、ステップ８１０において、通常の処理が行われる。次いでステップ８１２において、制御フローが終了する。判断の結果が肯定である場合、ステップ８１３において、ＩＦＵ１０２は、命令、及びＯＳＣ予測テーブル１１６から取得された命令と関連したＯＳＣハザード情報をＩＤＵ１０４に送る。ステップ８１４において、ＩＤＵ１０４が命令をデコードする。
【００５４】
ステップ８０８における判断の結果が肯定である場合、ステップ８１６において、ＩＤＵ１０４は、命令がストア・ｅ−ビットを含む（例えば、命令がｅ−フラグビットを有するストアである）かどうかを判断する。判断の結果が肯定である場合、ステップ８０８において、ＩＳＵ１０６は、ストア命令をストア・ｅ−ビットとして記憶する。この命令が単一ビットしか含まない場合、次に制御フローはステップ８０４に戻る。しかしながら、命令が１つ又は複数のロード及び１つ又は複数のストアの両方を実行するために命令が複数のビットを含む場合、ＩＤＵは、他のビットがロード「ｅ」ビットである場合にはステップ８２６及び８２８を実行し、又は他のビットがロード「ｗ」ビットである場合にはステップ８３２を実行する。
【００５５】
ステップ８１６における判断の結果が否定である場合、ステップ８２０において、ＩＤＵ１０４は、命令がストア・ｗ−ビットを含む（例えば、命令がｗ−フラグビットを有するストアである）かどうかを判断する。判断の結果が肯定である場合、ステップ８２２において、ＩＳＵ１０６は、ストア命令に割り当てられたＳＴＱエントリ番号（スタグ）を記憶する。次いで制御フローはステップ８０４に戻る。
【００５６】
ステップ８２０の判断の結果が否定である場合、ステップ８２４において、ＩＤＵ１０４は、命令がロード・ｅ−ビットを含む（例えば、命令がｅ−フラグビットを有するロードである）かどうかを判断する。判断の結果が肯定である場合、ステップ８２６において、ＩＳＵ１０６は、ストア・ｅ−ビットでマーク付けされたあらゆる先行命令に依存するものとして、ロード命令をマーク付けする。ステップ８２８において、マーク付けされた結果として、ストアが成功裏に実行され、ストアアドレス及びデータがそのＳＴＱエントリ内に書き込まれるまで、ロード命令を実行することができない。次いで制御フローはステップ８０４に戻る。
【００５７】
ステップ８２４の判断が否定である場合、ステップ８３０において、命令は、ｗ−フラグビットを有するロードであると判断される。ステップ８３２において、ＩＳＵ１０６は、ロードの前の最後のストア・ｗ−ビットストアのスタグ（即ち、ｗ−スタグ）がＬ１キャッシュにライトバックするまで実行されないように、この命令をマーク付けする。次に制御フローはステップ８０４に戻る。
【００５８】
情報処理システム
図９は、本発明の一実施形態による情報処理システム９００の詳細な図を示すブロック図である。この情報処理システム９００は、本発明の１つ又は複数の実施形態を実施するように適合された、適切に構成された処理システムに基づくものである。いずれかの適切に構成された処理システムを、本発明の実施形態による情報処理システム９００として同様に用いることができる。
【００５９】
情報処理システム９００は、コンピュータ９０２を含む。コンピュータ９０２は、図１のプロセッサのようなプロセッサ１０１を有する。プロセッサ１０１は、図１に示されるように、ＯＳＣ予測テーブル１１６を含むＩＦＵ１０２と、ＩＤＵ１０４と、発行キュー１１８を含むＩＳＵ１０６と、ＬＤＱ１２０、ＳＴＱ１２２、及びＬ１キャッシュ１２４を含むＬＳＵ１０８と、オペランドアドレス生成ユニット１１０と、ＦＸＵ１１２と、種々の他のコンポーネント１１４とを含む。
【００６０】
プロセッサ１０１は、主メモリ９０６、マスストレージインタフェース９０８、及びネットワークアダプタハードウェア９１０に接続される。システムバス９１２がこれらのシステムコンポーネントを相互接続する。マスストレージインタフェース９０８は、データストレージ装置９１４のようなマスストレージ装置を接続するために用いられる。データストレージ装置の１つの特定のタイプは、ＣＤ／ＤＶＤ９１６（これに限定されるものではないが）などのコンピュータ可読媒体又はストレージ製品にデータをストアし、これからデータを読み出すために用いることができる、ＣＤ／ＤＶＤドライブのような光ドライブである。別のタイプのストレージ装置は、例えばファイルシステムの動作をサポートするように構成されたデータストレージ装置である。
【００６１】
一実施形態において、情報処理システム９００は、従来の仮想アドレス指定メカニズムを用いて、プログラムが、あたかも、主メモリ９０６及びデータストレージ装置９１６のような複数のより小さいストレージエンティティにアクセスするのではなく、本明細書でコンピュータシステムメモリと呼ばれる、より大きい単一のストレージエンティティにアクセスするかのように動作することを可能にする。「コンピュータシステムメモリ」という用語は、本明細書において、情報処理システム９００の仮想メモリ全体を総称的に指すように用いられる。
【００６２】
コンピュータ９０２に関して１つだけのプロセッサ１０１が示されるが、複数のプロセッサを有するコンピュータシステムを等しく有効に用いることもできる。本発明の種々の実施形態は、各々が、プロセッサ１０１からのオフロード処理のために用いられる完全にプログラムされた別個のマイクロプロセッサを含む、インタフェースをさらに組み込む。主メモリ内に含まれるオペレーティングシステム（図示せず）は、限定するものではないが、ＧＮＵ／Ｌｉｎｕｘ、ＡＩＸ、Ｓｏｌａｒｉｓ、及びＨＰ−ＵＸのような適切なマルチタスクオペレーティングシステムである。本発明の種々の実施形態は、いずれかの他の適切なオペレーティングシステムを用いることもできる。本発明の幾つかの実施形態は、オペレーティングシステム（図示せず）のコンポーネントの命令が、情報処理システム９００内に配置されたいずれかのプロセッサ上で実行されるのを可能にする、オブジェクト指向フレームワークメカニズムのようなアーキテクチャを用いる。ネットワークアダプタハードウェア９１０は、１つ又は複数のネットワーク９１８へのインタフェースを与えるように用いられる。本発明の種々の実施形態は、今日のアナログ及び／又はデジタル技術を含む、又は将来のネットワーキングメカニズムを介する、いずれかのデータ通信接続と共に機能するように適合させることができる。
【００６３】
本発明の例示的な実施形態を完全に機能的なコンピュータシステムとの関連で説明したが、当業者であれば、実施形態は、例えば、ＣＤ９１６、ＣＤ  ＲＯＭ、又は他の形態の記録可能媒体などのＣＤ若しくはＤＶＤを介して、或いは任意のタイプの電子伝送メカニズムを介して、プログラム製品として配布できることを認識するであろう。
【００６４】
限定されない例
本発明の特定の実施形態を開示したが、当業者であれば、本発明の趣旨及び範囲から逸脱することなく、特定の実施形態に対する変更を行うことができることを理解するであろう。従って、本発明の範囲は、特定の実施形態に限定されず、添付の特許請求の範囲は、本発明の範囲内のいずれか又は全てのこのような用途、修正及び実施形態を包含することが意図される。
【００６５】
本発明の種々の例示的な実施形態を、完全に機能的なコンピュータシステムとの関連で説明したが、当業者であれば、種々の実施形態は、ＣＤ若しくはＤＶＤ、例えばＣＤ９１６、ＣＤ  ＲＯＭ、又は他の形態の記録可能媒体を介して、又は任意の型の電子伝送メカニズムを介して、プログラム製品として配布することができることを認識するであろう。
【符号の説明】
【００６６】
１００：動作環境
１０１：プロセッサ
１０２：命令フェッチユニット（ＩＦＵ）
１０４：命令デコードユニット（ＩＤＵ）
１０６：命令発行ユニット（ＩＳＵ）
１０８：ロード／ストアユニット（ＬＳＵ）
１１０：オペランドアドレス生成ユニット
１１２：固定小数点ユニット（ＦＸＵ）
１１４：他のコンポーネント
１１６：オペランド・ストア・比較（ＯＳＣ）予測テーブル
１１８：発行キュー
１２０：ロードキュー（ＬＤＱ）
１２２：ストアキュー（ＳＴＱ）
１２４：Ｌ１キャッシュ
１２６、１２８、２２６、３２８、４０２、４０３：エントリ
２０４、３０４：オペランドアドレス情報
２０６、３０６：有効ビット情報
２０８、３１０：ＯＳＣハザードビット
２１０、３１２：他の一般情報
３０８：データ値情報
４０４、４１２：命令アドレス
４０６、４１４：入力有効ビット
４０８：ロード「ｅ」ビット
４１０：ロード「ｗ」ビット
４１６：ストア「ｅ」ビット
４１８：ストア「ｗ」ビット
９００：情報処理システム
９０２：コンピュータ
９０６：主メモリ
９０８：マスストレージインタフェース
９１０：ネットワークアダプタハードウェア
９１２：システムバス
９１４：データストレージ
９１６：ＣＤ／ＤＶＤ
９１８：ネットワーク
【図１】
2013515306.tif 000003
【図２】
2013515306.tif 000004
【図３】
2013515306.tif 000005
【図４】
2013515306.tif 000006
【図５】
2013515306.tif 000007
【図６】
2013515306.tif 000008
【図７】
2013515306.tif 000009
【図８】
2013515306.tif 000010
【図９】
2013515306.tif 000011
【国際調査報告】
2013515306.tif 000012
2013515306.tif 000013
2013515306.tif 000014