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