(57)【特許請求の範囲】
【請求項１】
プロセッサにおいて命令を実行する方法であって、
第１ロード命令および第２ロード命令を受け取るステップと、
少なくとも第１実行パイプラインおよび第２実行パイプラインを有するカスケード型遅延実行パイプライン・ユニットに前記第１ロード命令および前記第２ロード命令を送出するステップであって、前記第２実行パイプラインは共通送出グループにおける命令を、前記第１実行パイプラインにおいて実行された前記共通送出グループにおける他の命令に関して遅延態様で実行する、前記送出するステップと、
前記第１ロード命令および前記第２ロード命令を実行することによってキャッシュをアクセスするステップであって、前記第１ロード命令の実行と前記第２ロード命令の実行との間の遅延は、前記キャッシュが前記第２ロード命令によるアクセスの開始前に前記第１ロード命令によるアクセスを完了することを可能にする、前記アクセスするステップと、を含み、
前記第１ロード命令および前記第２ロード命令が送出キューから送出された後、前記第２ロード命令は、少なくとも前記第１ロード命令が実行されている期間中、遅延キューにおいて維持され、
前記第１ロード命令および前記第２ロード命令は、前記第１ロード命令および前記第２ロード命令がレベル２キャッシュからフェッチされた後且つ前記第１ロード命令および前記第２ロード命令がレベル１キャッシュに収納される前、実行のためにデコードおよびスケジュールされる、
方法。
【請求項２】
前記第１ロード命令および前記第２ロード命令は共通送出グループにおいて送出され、前記第１ロード命令は前記第１実行パイプラインに送出され、前記第２ロード命令は前記第２実行パイプラインに送出される、請求項１に記載の方法。
【請求項３】
前記第１ロード命令は第１共通送出グループにおいて送出され、前記第２ロード命令は第２共通送出グループにおいて送出される、請求項１に記載の方法。
【請求項４】
前記第１ロード命令および前記第２ロード命令は、それぞれ、前記第１共通送出グループおよび前記第２共通送出グループ内の同じ実行パイプラインに送出される、請求項３に記載の方法。
【請求項５】
前記第１ロード命令および前記第２ロード命令は従属ロード命令であり、前記第１ロード命令によってロードされた第１データが第２データをロードするために前記第２ロード命令によって使用される、請求項１に記載の方法。
【請求項６】
前記キャッシュは単一ポート・キャッシュである、請求項１に記載の方法。
【請求項７】
前記キャッシュは一時に単一のアクセス・オペレーションのみを遂行することが可能である、請求項１に記載の方法。
【請求項８】
前記第１ロード命令および前記第２ロード命令はプログラム順に実行される、請求項１に記載の方法。
【請求項９】
前記第１ロード命令は、前記第１ロード命令が競合する第３命令に関して遅延態様で実行される、請求項１に記載の方法。
【請求項１０】
キャッシュと、
少なくとも第１実行パイプラインおよび第２実行パイプラインを有するカスケード型遅延実行パイプラインであって、前記第２実行パイプラインは共通送出グループにおける命令を、前記第１実行パイプラインにおいて実行された前記共通送出グループにおける他の命令に関して遅延態様で実行する、前記カスケード型遅延実行パイプラインと、
回路と、
を含み、前記回路は、
第１ロード命令および第２ロード命令を受け取り、
前記第１ロード命令および前記第２ロード命令を前記カスケード型遅延実行パイプラインに送出し、
前記第１ロード命令および前記第２ロード命令を実行することによって前記キャッシュをアクセスする
ように構成され、
前記回路は、更に、前記第１ロード命令の実行と前記第２ロード命令の実行との間の遅延をスケジュールし、それによって、前記第２ロード命令によるアクセスの開始前に前記キャッシュが前記第１ロード命令によるアクセスを完了することを可能にするように構成され、
送出キューと、
遅延キューと、
を更に含み、前記第１ロード命令および前記第２ロード命令が前記送出キューから送出された後、前記遅延キューは、少なくとも前記第１ロード命令が実行されている期間中、前記第２ロード命令を前記遅延キューにおいて維持するように構成され、
前記第１ロード命令および前記第２ロード命令は、前記第１ロード命令および前記第２ロード命令がレベル２キャッシュからフェッチされた後且つ前記第１ロード命令および前記第２ロード命令がレベル１キャッシュに収納される前、実行のためにデコードおよびスケジュールされる、
プロセッサ。
【請求項１１】
前記回路は、前記第１ロード命令および前記第２ロード命令を共通送出グループにおいて送出するように構成され、前記第１ロード命令は前記第１実行パイプラインに送出され、前記第２ロード命令は前記第２実行パイプラインに送出される、請求項１０に記載のプロセッサ。
【請求項１２】
前記回路は、前記第１ロード命令を第１共通送出グループにおいて送出するように、および、前記第２ロード命令を第２共通送出グループにおいて送出するように構成される、請求項１０に記載のプロセッサ。
【請求項１３】
前記第１ロード命令および前記第２ロード命令はそれぞれ前記第１共通送出グループおよび前記第２共通送出グループ内の同じ実行パイプラインに送出される、請求項１２に記載のプロセッサ。
【請求項１４】
前記第１ロード命令および前記第２ロード命令は従属ロード命令であり、前記第１ロード命令によってロードされた第１データが、第２データをロードするために前記第２ロード命令によって使用される、請求項１０に記載のプロセッサ。
【請求項１５】
前記キャッシュは単一ポート・キャッシュである、請求項１０に記載のプロセッサ。
【請求項１６】
前記キャッシュは一時に単一のアクセス・オペレーションのみを遂行することが可能である、請求項１０に記載のプロセッサ。
【請求項１７】
前記第１ロード命令および前記第２ロード命令をプログラム順に実行するように構成される、請求項１０に記載のプロセッサ。
【請求項１８】
前記回路は、前記第１ロード命令が競合する第３命令に関して遅延態様で実行されるように前記第１ロード命令をスケジュールするように構成される、請求項１０に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にはプロセッサにおける命令の実行に関するものであり、特に、ロード命令を実行するときのプロセッサにおける機能停止（stall）の最少化に関するものである。
【背景技術】
【０００２】
現在のコンピュータ・システムは、一般に、コンピュータ・システムにおいて情報を処理するために使用し得るプロセッサを含む幾つもの集積回路（ＩＣ）を内蔵している。プロセッサによって処理されるデータは、プロセッサによって実行されるコンピュータ命令と、コンピュータ命令を使用してプロセッサにより操作されるデータとを含み得る。コンピュータ命令およびデータは、一般に、コンピュータ・システムにおけるメイン・メモリに格納される。
【０００３】
プロセッサは、一般に、一連の小さいステップで命令を実行することによって命令を処理する。場合によっては、プロセッサによって処理される命令の数を増加させるために（従って、プロセッサの速度を高めるために）、プロセッサがパイプライン化されることがある。パイプライン化はプロセッサ内に個別のステージを設けることを指し、その場合、各ステージが、命令を実行するために必要な１つまたは複数の小さいステップを遂行する。場合によっては、パイプラインは、（他の回路に加えて）、プロセッサ・コアと呼ばれるプロセッサの一部に設けられることもある。
【０００４】
プロセッサは、データおよび命令に対する速いアクセス並びにプロセッサの良好な利用を提供するために、幾つものキャッシュを有することがある。キャッシュは、一般にメイン・メモリよりも小さく、一般にプロセッサと同じダイ（即ち、チップ）上に作成されたメモリである。現在のプロセッサは、一般に幾つものレベルのキャッシュを有する。プロセッサのコアに最も近接して設けられる最速のキャッシュはレベル１キャッシュ（Ｌ１キャッシュ）と呼ばれる。プロセッサは、一般に、Ｌ１キャッシュのほかに、レベル２キャッシュ（Ｌ２キャッシュ）と呼ばれる二次的な大型キャッシュを有する。場合によっては、プロセッサは、他の更なるキャッシュ・レベル（例えば、Ｌ３キャッシュおよびＬ４キャッシュ）を有することもある。
【０００５】
プロセッサは、一般に、キャッシュおよび／またはメイン・メモリにある情報をアクセスするためにロード命令およびストア命令を供給する。ロード命令はメモリ・アドレス（命令内に直接与えられるかまたはアドレス・レジスタを使って与えられる）を含み、ターゲット・レジスタ（Ｒｔ）を識別することができる。ロード命令が実行されるとき、メモリ・アドレスに格納されているデータは（例えば、キャッシュから、メイン・メモリから、或いは他の記憶装置から）検索されることもあり、そしてＲｔによって識別されたターゲット・レジスタに収納されることもある。同様に、ストア命令はメモリ・アドレスおよびソース・レジスタ（Ｒｓ）を含み得る。ストア命令が実行されるとき、Ｒｓからのデータはそのメモリ・アドレスに書き込まれることがある。一般に、ロード命令およびストア命令は、Ｌ１キャッシュにおいてキャッシュされたデータを利用する。
【０００６】
場合によっては、プロセッサは複数のロード命令を同時に実行し得ることもある。しかし、プロセッサ・コアによって使用されるキャッシュは、所与の時間に、限られた数のロード・アクセスしか行わないように構成されることがある。キャッシュがあまりにも多くのロード・アクセスによって過負荷にされることを防ぐために、プロセッサ・コアは、例えば、一時に単一のロード命令しか実行のために送出しないことによって、同時に実行することができるロード命令の数を制限することがある。プロセッサによって送出されるロード命令の数を制限することは、命令がプロセッサによって実行される速度全体を減少させることがある。従って、プロセッサにおいて複数のロード命令を実行することはプロセッサ効率を低下させることになり得る。
【０００７】
従って、ロード命令を実行する方法の改善を求める要求が存在する。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、一般的には、ロード命令を実行するための方法および装置を提供することにある。
【課題を解決するための手段】
【０００９】
１つの実施例では、本発明の方法は、第１ロード命令および第２ロード命令を受け取るステップを含む。更に、その方法は、少なくとも第１実行パイプラインおよび第２実行パイプラインを有するカスケード型遅延実行パイプライン・ユニットに第１ロード命令および第２ロード命令を送出するステップを含む。この場合、第２実行パイプラインは、共通送出グループにおける命令を、第１実行パイプラインにおいて実行された共通送出グループにおける別の命令に関して遅延態様で実行する。更に、その方法は、第１ロード命令および第２ロード命令を実行することによってキャッシュをアクセスするステップを含む。第１ロード命令の実行と第２ロード命令の実行との間の遅延は、キャッシュが、第２ロード命令によるアクセスの開始前に第１ロード命令によるアクセスを完了することを可能にする。
【００１０】
本発明のもう１つの実施例は、キャッシュと、少なくとも第１実行パイプラインおよび第２実行パイプラインを有するカスケード型遅延実行パイプライン・ユニットとを含むプロセッサを提供する。この場合、第１実行パイプラインは、共通送出グループにおける命令を、第２実行パイプラインにおいて実行される共通送出グループにおける他の命令に関して遅延態様で実行する。プロセッサは、更に、第１ロード命令および第２ロード命令を受け取り、第１ロード命令および第２ロード命令をカスケード型遅延実行パイプラインに送出するように構成された回路を含む。その回路は、更に、第１ロード命令および第２ロード命令を実行することによってキャッシュをアクセスするように構成される。その回路は、第１ロード命令の実行と第２ロード命令を実行との間の遅延をスケジュールし、それによって、第２ロード命令によるアクセスの開始前にキャッシュが第１ロード命令によるアクセスを完了することを可能にするように構成される。
【００１１】
本発明のもう１つの実施例は、プロセッサにおいて命令を実行する方法を提供する。その方法は、第１ロード命令および第２ロード命令を共通送出グループにおいて受け取るステップを含む。第１ロード命令および第２ロード命令は、少なくとも第１実行パイプラインおよび第２実行パイプラインを有するカスケード型遅延実行パイプライン・ユニットに送出される。第２実行パイプラインは、第１実行パイプラインにおいて実行された共通送出グループにおける第１ロード命令に関して遅延態様で共通送出グループにおける第２ロード命令を実行する。第１ロード命令および第２ロード命令が送出キューから送出された後、第２ロード命令が、少なくとも第１ロード命令が実行されている期間中、遅延キューにおいて維持される。第１ロード命令および第２ロード命令を実行することによって、キャッシュがアクセスされる。遅延キューによって提供される第１ロード命令の実行と第２ロード命令の実行との間の遅延が、第２ロード命令によるアクセスの開始前にキャッシュが第１ロード命令によるアクセスを完了することを可能にする。
【発明を実施するための最良の形態】
【００１２】
本発明は、一般的にはロード命令を実行するための方法および装置を提供する。１つの実施例では、その方法は、第１ロード命令および第２ロード命令を受け取るステップを含む。更に、その方法は、少なくとも第１実行パイプラインおよび第２実行パイプラインを有するカスケード型遅延実行パイプライン・ユニットに第１ロード命令および第２ロード命令を送出するステップを含む。この場合、第２実行パイプラインは、共通送出グループにおける命令を、第１実行パイプラインにおいて実行された共通送出グループにおける他の命令に関して遅延態様で実行する。更に、その方法は、第１ロード命令および第２ロード命令を実行することによってキャッシュをアクセスするステップを含む。第１ロード命令の実行と第２ロード命令の実行との間の遅延は、キャッシュが、第２ロード命令によるアクセスの開始前に第１ロード命令によるアクセスを完了することを可能にする。
【００１３】
以下では、本発明の実施例に対する参照が行われる。しかし、本発明が特定の記述された実施例に限定されないということは当然である。代わりに、下記の特徴および要素のいずれの組み合わせも、それが種々の実施例に関連していても或いは関連していなくても、本発明を実装および実施することを意図するものである。更に、様々な実施例において、本発明は従来技術を越えた多くの利点をもたらす。しかし、本発明の実施例は他の可能な解決法、および／または、従来技術を越えた利点を得ることが可能であるが、特定の利点が所与の実施例によって得られるか否かは本発明を限定するものではない。従って、下記のような視点、特徴、実施例、および利点は単に例示的なものであり、「特許請求の範囲」において明示的に記述された場合を除けば、本発明の要素または限定と見なされるべきではない。同様に、「本発明」に対する言及は、本明細書において開示されたすべての発明上の主題を概括したものと解釈されるべきではなく、「特許請求の範囲」において明示的に記述された場合を除けば、本発明の要素または限定であると見なすべきではない。
【００１４】
以下は、添付図面に示された本発明の実施例の詳細な説明である。それらの実施例は例示的なものであって、本発明を明瞭に伝授し得る程度に詳細なものである。しかし、提示された細部の意義は、実施例の予測される変更の程度を限定することを意図するものではなく、むしろ、これの意図するところは、「特許請求の範囲」によって定義された本発明の趣旨および範囲内におけるすべての修正物、均等物、および代替物をカバーすることである。
【００１５】
本発明の実施例は、システム、例えば、コンピュータ・システムにおいて利用することが可能であり、そのシステムに関連して説明される。本明細書において使用されるように、システムは、プロセッサおよびキャッシュ・メモリを利用する任意のシステムを含み、パーソナル・コンピュータ、インターネット装置、デジタル・メディア装置、ポータブル・デジタル・アシスタント（ＰＤＡ）、ポータブル音楽／ビデオ・プレーヤ、およびビデオゲーム・コンソールを含み得る。キャッシュ・メモリは、そのキャッシュ・メモリを利用するプロセッサと同じダイ（die）上に設置されてもよいが、プロセッサおよびキャッシュ・メモリが種々のダイ（個別のモジュールにおける個別のチップまたは単一のモジュールにおける個別のチップ）の上に設置されてもよい。
【００１６】
複数のプロセッサ・コアおよび複数のＬ１キャッシュを有するプロセッサ（ここでは、各プロセッサ・コアが命令の実行のために複数のパイプラインを使用する）に関しては後述するが、本発明の実施例は、キャッシュを利用する任意のプロセッサが利用し得るものである。なお、そのプロセッサは、単一の処理コアを有するプロセッサを含む。一般に、本発明の実施例は、任意のプロセッサが利用し得るものであり、如何なる特定の構成にも制限されない。更に、Ｌ１命令キャッシュ（Ｌ１ＩキャッシュまたはＩキャッシュ）およびＬ１データ・キャッシュ（Ｌ１ＤキャッシュまたはＤキャッシュ）に分割されたＬ１キャッシュに関しても後述するが、本発明の実施例は、統合Ｌ１キャッシュが利用される構成においても利用することが可能である。更に、Ｌ１キャッシュ・ディレクトリを利用するＬ１キャッシュに関しても後述するが、本発明の実施例は、キャッシュ・ディレクトリが使用されないものにおいても利用することが可能である。
【００１７】
Ａ．例示的システムの概要
図１は、本発明の一実施例によるシステム１００を示すブロック図である。システム１００は、命令およびデータを格納するためのシステム・メモリ１０２と、図形処理のためのグラフィックス処理ユニット１０４と、外部装置と通信するためのＩ／Ｏインターフェース１０６と、命令およびデータを長期保存するための記憶装置１０８と、命令およびデータを処理するためのプロセッサ１１０とを含み得る。
【００１８】
本発明の一実施例によれば、プロセッサ１１０は、１つのＬ２キャッシュ１１２および複数のＬ１キャッシュ１１６を有し得るし、各Ｌ１キャッシュ１１６は複数のプロセッサ・コア１１４の１つによって利用される。一実施例によれば、各プロセッサ・コア１１４はパイプライン化され得るし、その場合、各命令は一連の小さいステップで遂行され、各ステップは異なるパイプライン・ステージによって遂行される。
【００１９】
図２は、本発明の一実施例によるプロセッサ１１０を示すブロック図である。単純化するために、図２は、プロセッサ１１０の単一のコア１１４を示し、そのコア１１４に関連して説明される。一実施例では、各コア１１４は同じもの（例えば、同じパイプライン・ステージを有する同じパイプラインを含むもの）であってもよい。別の実施例では、各コア１１４は異なるもの（例えば、相異なるパイプライン・ステージを有する相異なるパイプラインを含むもの）であってもよい。
【００２０】
本発明の一実施例では、Ｌ２キャッシュ１１２は、プロセッサ１１０によって使用される命令およびデータの一部を含み得る。場合によっては、プロセッサ１１０は、Ｌ２キャッシュ１１２に含まれていない命令およびデータを要求し得る。要求された命令およびデータがＬ２キャッシュ１１２に含まれていない場合、その要求された命令およびデータは（より高いレベルのキャッシュまたはシステム・メモリ１０２のいずれかから）検索され、Ｌ２キャッシュ１１２に収納され得る。プロセッサ・コア１１４がＬ２キャッシュ１１２からの命令を要求するとき、それらの命令は先ずプリデコーダ兼スケジューラ２２０によって処理され得る。
【００２１】
本発明の一実施例では、命令が、Ｉラインと呼ばれるグループでＬ２キャッシュ１１２からフェッチされ得る。同様に、データが、Ｄラインと呼ばれるグループでＬ２キャッシュ１１２からフェッチされ得る。図１に示されたＬ１キャッシュ１１６は、２つの部分、即ち、Ｉラインを格納するためのＬ１命令キャッシュ（Ｉキャッシュ）２２２およびＤラインを格納するためのＬ１データ・キャッシュ（Ｄキャッシュ）２２４に分割可能である。ＩラインおよびＤラインは、Ｌ２キャッシュ・アクセス回路２１０を使用してＬ２キャッシュ１１２からフェッチされ得る。
【００２２】
Ｌ２キャッシュ１１２から検索されたＩラインは、プリデコーダ兼スケジューラ２２０によって処理され、Ｉキャッシュ２２２に収納され得る。プロセッサのパフォーマンスを更に改善するために、命令は、例えば、ＩラインがＬ２（または、もっと高レベルの）キャッシュから検索されるとき、および命令がＬ１キャッシュ１１６に収納される前に、プリデコードされてもよい。そのようなプリデコーディングは、アドレス生成機能、ブランチ予測機能、および、命令実行を制御するディスパッチ情報（フラッグのセット）として得られるスケジューリング機能（命令が発生されるべき順序を決定する）のような様々な機能を含み得る。例えば、本発明の実施例は、デコーディングがプロセッサにおける別のロケーションで行なわれる場合にも、例えば、命令がＬ１キャッシュ１１６から検索された後にデコーディングが行なわれる場合にも使用し得る。
【００２３】
場合によっては、プリデコーダ兼スケジューラ２２０は、複数のコア１１４とＬ１キャッシュ１１６との間で共用し得る。同様に、Ｌ２キャッシュ１１２からフェッチされるＤラインはＤキャッシュ２２４に収納可能である。各ＩラインおよびＤラインにおける１つのビットは、Ｌ２キャッシュ１１２における情報のラインがＩラインまたはＤラインのどちらであるかを追跡するためにも使用し得る。任意選択的には、Ｌ２キャッシュ１１２からＩラインおよび／またはＤラインにおけるデータをフェッチする代わりに、データは、別の方法で、例えば、少量の、多量の、または可変量のデータをフェッチすることによってＬ２キャッシュ１１２からフェッチされてもよい。
【００２４】
一実施例では、Ｉキャッシュ２２２およびＤキャッシュ２２４は、現在どのＩラインおよびＤラインがＩキャッシュ２２２およびＤキャッシュ２２４にあるかを追跡するために、それぞれ、Ｉキャッシュ・ディレクトリ２２３およびＤキャッシュ・ディレクトリ２２５を有し得る。ＩラインまたはＤラインがＩキャッシュ２２２またはＤキャッシュ２２４に加えられるとき、対応するエントリがＩキャッシュ・ディレクトリ２２３またはＤキャッシュ・ディレクトリ２２５に収納される。ＩラインまたはＤラインがＩキャッシュ２２２またはＤキャッシュ２２５から除去されるとき、Ｉキャッシュ・ディレクトリ２２３またはＤキャッシュ・ディレクトリ２２５における対応するエントリが除去される。Ｄキャッシュ・ディレクトリ２２５を利用するＤキャッシュ２２４に関しては後述されるが、本発明の実施例は、Ｄキャッシュ・ディレクトリ２２５が利用されない場合にも利用し得る。そのような場合、Ｄキャッシュ２２４自体に格納されたデータは、どのようなＤラインがＤキャッシュ２２４に存在するかを表し得る。
【００２５】
一実施例では、コア１１４のための命令をフェッチするために、命令フェッチ回路２３６が使用可能である。例えば、命令フェッチ回路２３６は、コア１１４において実行されている現在の命令を追跡するプログラム・カウンタを含み得る。ブランチ命令に遭遇するとき、プログラム・カウンタを変更するために、コア１１４内のブランチ・ユニットが使用可能である。Ｌ１Ｉキャッシュ２２２からフェッチされた命令を格納するために、Ｉライン・バッファ２３２が使用可能である。後述のようにコア１１４へ並行に送出され得るＩラインバッファ２３２における命令を命令グループにグループ化するために、送出キュー２３４および関連の回路が使用可能である。場合によっては、送出キュー２３４は、適切な命令グループを形成するためにプリデコーダ兼スケジューラ２２０によって提供される情報を使用し得る。
【００２６】
送出キュー２３４からの命令を受け取ることに加えて、コア１１４は種々のロケーションからデータを受け取り得る。コア１１４がデータ・レジスタからのデータを要求する場合、データを得るためにレジスタ・ファイル２４０が使用可能である。コア１１４がメモリ・ロケーションからのデータを要求する場合、Ｄキャッシュ２２４からデータをロードするために、キャッシュ・ロードおよびストア回路２５０が使用可能である。そのようなロードが行なわれる場合、必要なデータを求める要求がＤキャッシュ２２４に送出され得る。同時に、所望のデータがＤキャッシュ２２４において見つかったかどうかを決定するために、Ｄキャッシュ・ディレクトリ２２５がチェックされ得る。Ｄキャッシュ２２４が所望のデータを含んでいる場合、Ｄキャッシュ・ディレクトリ２２５は、Ｄキャッシュ２２４が所望のデータを含んでいるということおよびＤキャッシュ・アクセスがその後の或る時点で完了し得るということを表す。Ｄキャッシュ２２４が所望のデータを含んでいない場合、Ｄキャッシュ・ディレクトリ２２５は、Ｄキャッシュ２２４が所望のデータを含んでいないということを表す。Ｄキャッシュ・ディレクトリ２２５はＤキャッシュ２２４よりも速くアクセスされ得るので、Ｄキャッシュ・アクセスが完了する前に所望のデータに対する要求が（例えば、Ｌ２アクセス回路２１０を使用して）Ｌ２キャッシュ１１２に送出され得る。
【００２７】
場合によっては、データがコア１１４において修正されることもある。修正されたデータは、レジスタ・ファイル２４０書き込まれるかまたはメモリ１０２に格納され得る。データをレジスタ・ファイル２４０に書き戻すために書き戻し回路２３８が使用可能である。場合によっては、書き戻し回路２３８は、データをＤキャッシュに書き戻すためにキャッシュ・ロードおよびストア回路２５０を利用し得る。任意選択的には、コア１１４が、ストアを行うためにキャッシュ・ロードおよびストア回路２５０直接アクセスし得る。場合によっては、命令をＩキャッシュ２２２に書き戻すためにも、書き戻し回路２３８が使用可能である。
【００２８】
上記のように、送出キュー２３４は、命令グループを形成し且つ形成された命令グループをコア１１４に送出するために使用し得る。送出キュー２３４は、Ｉラインおける命令を回転することおよび組み合せることによって適切な命令グループを形成するための回路も含み得る。送出グループの形成は、送出グループにおける命令相互間の従属性および、更に詳しく後述するように、命令の順序付けから達成することが可能である最適化のような幾つかの事柄を勘案し得る。一旦送出グループが形成されると、その送出グループはプロセッサ・コア１１４と並行してディスパッチされ得る。場合によっては、命令グループはコア１１４における各パイプラインに対して１つの命令を含み得る。任選択的に、命令グループは少数の命令を含み得る。
【００２９】
本発明の一実施例によれば、１つまたは複数のプロセッサ・コア１１４はカスケード型遅延実行パイプライン構成を利用し得る。図３に示される例では、コア１１４は４つのパイプラインをカスケード型構成で含む。任意選択的には、このような構成において、少数（２つ以上）のパイプライン或いは多数（４つ以上）のパイプラインが使用可能である。更に、図３に示されるパイプラインの物理的なレイアウトは例示的なものであって、必ずしも、カスケード型遅延実行パイプライン・ユニットの実際の物理的なレイアウトを暗示するものではない。
【００３０】
一実施例では、カスケード型遅延実行パイプライン構成における各パイプライン（Ｐ０、Ｐ１、Ｐ２、およびＰ３）は実行ユニット３１０を含み得る。実行ユニット３１０は、所与のパイプラインに対して１つまたは複数の機能を遂行し得る。例えば、実行ユニット３１０は命令のフェッチおよびデコードのすべて或いは一部分を遂行し得る。実行ユニットによって遂行されるデコードは、複数のコア１１４の間で共用されるか、または任意選択的に単一のコア１１４によって利用されるプリデコーダ兼スケジューラ２２０によって共用されてもよい。実行ユニット３１０は、レジスタ・ファイル２４０からデータを読み取り、アドレスを計算し、整数演算機能を（例えば、演算論理ユニット即ちＡＬＵを使用して）遂行し、浮動小数点演算機能を遂行し、命令ブランチを実行し、データ・アクセス機能（例えば、メモリからのロードおよびストア）を遂行し、データを（例えば、レジスタ・ファイル２４０における）レジスタに書き戻すことができる。場合によっては、コア１１４は、命令フェッチ回路２３６、レジスタ・ファイル２４０、キャッシュ・ロードおよびストア回路２５０、書き戻し回路２３８、並びにこれらの機能を遂行するための任意の他の回路を利用し得る。
【００３１】
一実施例では、各実行ユニット３１０が同じ機能を遂行し得る（例えば、各実行ユニット３１０がロード／ストア機能を遂行し得る）。任意選択的に、各実行ユニット３１０（または、実行ユニットの種々のグループ）は種々の機能セットを遂行し得る。更に、場合によっては、各コア１１４における実行ユニット３１０は、他のコアに設けられた実行ユニット３１０と同じであってもよく、またはそれとは異なっていてもよい。例えば、或るコアでは、実行ユニット３１００および３１０２がロード／ストアおよび演算機能を遂行し得るし、一方、実行ユニット３１０１および３１０２が演算機能だけを遂行し得る。
【００３２】
一実施例では、図示のように、実行ユニット３１０における実行は、他の実行ユニット３１０に関して遅延態様でも遂行可能である。図示の構成は、カスケード型遅延構成とも呼ばれることもあるが、図示のレイアウトは、必ずしも、実行ユニットの実際の物理的構成を表すものではない。そのような構成では、命令グループにおける４つの命令（便宜上、Ｉ０、Ｉ１、Ｉ２、Ｉ３と呼ばれる）がパイプラインＰ０、Ｐ１、Ｐ２、Ｐ３に並行して送出される場合、各命令を他の各命令に関して遅延態様で実行することが可能である。それは、例えば、命令Ｉ０が、先ず、パイプラインＰ０に対する実行ユニット３１００において実行され、次に、命令Ｉ１が、パイプラインＰ１に対する実行ユニット３１０１において実行される、等々である。その後、命令Ｉ０が実行ユニット３１００において実行され終わった後、実行ユニット３１００が命令Ｉ１を実行し始める、等々となり、従って、コア１１４に並行して送出された命令が互いに関して遅延態様で実行される。
【００３３】
一実施例では、或る実行ユニット３１０は互いに関して遅延し得るし、一方、他の実行ユニット３１０は互いに関して遅延し得ない。第２命令の実行が第１命令の実行に従属する場合、転送パス３１２は、第１の命令から第２の命令に結果を転送するために使用可能である。図示の転送パス３１２は単に例示的なものであり、コア１１４は、実行ユニット３１０における種々のポイントから他の実行ユニット３１０への、或いは同じ実行ユニット３１０への、更なる転送パスを有してもよい。
【００３４】
一実施例では、実行ユニット３１０によって実行されていない命令は、遅延キュー３２０またはターゲット遅延キュー３３０に保持され得る。遅延キュー３２０は、実行ユニット３１０によって実行されていない命令グループにおける命令を保持するために使用可能である。例えば、命令Ｉ０が実行ユニット３１００において実行されている間、命令Ｉ１、Ｉ２、およびＩ３は遅延キュー３３０に保持され得る。一旦命令が遅延キュー３３０を通過してしまうと、その命令は適切な実行ユニット３１０に送出され、実行されることが可能である。ターゲット遅延キュー３３０は、実行ユニット３１０によって既に実行された命令の結果を保持するために使用し得る。場合によっては、ターゲット遅延キュー３３０における結果が処理のために実行ユニット３１０に転送され、それの無効化が適切である場合には無効化される。同様に、状況によっては、後述のように遅延キュー３２０における命令を無効化することも可能である。
【００３５】
一実施例では、命令グループにおける命令の各々が遅延キュー３２０、実行ユニット３１０、およびターゲット遅延キュー３３０を通過した後、その結果（例えば、データ、および、後述のように、命令）がレジスタ・ファイル或いはＬ１Ｉキャッシュ２２２、および／または、Ｄキャッシュ２２４のいずれかに書き戻されることがある。場合によっては、レジスタの最近修正された値を書き戻し且つ無効化された結果を廃棄するために書き戻し回路３０６を使用してもよい。
【００３６】
Ｂ．複数のロード命令の実行
本発明の一実施例は、ロード命令を実行するための方法を提供する。上述のように、場合によっては、Ｌ１キャッシュ１１６（例えば、Ｌ１Ｄキャッシュ２２４または統合Ｌ１キャッシュ１１６における）は、所定の期間中、或る限定された数のアクセスを行うためにだけ構成されることもある。Ｌ１キャッシュ１１６は、一度に単一のロード・オペレーションを行うように制限されることもある。例えば、Ｌ１キャッシュ１１６は、ロード・オペレーションを遂行し得る単一のポートを含み得る。Ｌ１キャッシュ１１６は任意選択的に一度に２つ以上の（例えば、２以上の整数個の）アクセスを行うように制限されてもよい。更に、場合によっては、Ｌ１キャッシュ・アクセスは、別のキャッシュ・アクセスが開始し得る前に、１つまたは複数のクロック・サイクルの間、継続し得る（例えば、他のロード命令を遂行するためにＬ１キャッシュ１１６を使用し得ない期間中、３つのクロック・サイクルで第１のロード命令を取り出してＬ１キャッシュ・アクセスを完了させることも可能である）。
【００３７】
後述するように、カスケード型遅延実行パイプライン構成を利用するプロセッサ・コア１１４においてロード命令の実行をスケジュールすることによって、少ない遅延でまたは遅延なしでロード命令を実行することが可能である。更に、場合によっては、プロセッサ・コア１１４におけるロード命令の実行が、プロセッサ・コア１１４内のパイプラインを不必要に停止またはアイドリングさせることなく（例えば、プロセッサ・コア１１４に「ノー・オペレーション（ＮＯＰ）」命令を送出することなく）遂行可能である。
【００３８】
図４は、ロード命令を実行するためのプロセス４００を示すフローチャートである。プロセスが開始すると、ステップ４０２において、実行されるべき第１ロード命令および第２ロード命令を含む命令のグループが受け取られる。ステップ４０４において、命令がデコードされ、実行をスケジュールし得る。例えば、上述のように、デコーディングは、命令がＬ２キャッシュ１１２からフェッチされてＬ１キャッシュ１１６に収納されたとき、プリデコーダ兼スケジューラ２２０によって行われ得る。任意選択的には、デコーディングは、命令がＬ１キャッシュ１１６からフェッチされた後を含む任意の適切な時間（例えば、実行ユニット３１０内の命令の実行中におけるデコード・ステージのような時間）に行われ得る。
【００３９】
ステップ４０６において、第１ロード命令の実行と第２ロード命令の実行との間の遅延がスケジュールされ得る。その遅延は、Ｌ１キャッシュ１１６が第１ロード命令に対するアクセスを、第２ロード命令によるアクセスの開始前に完了することを可能にし得る。後述するように、その遅延は、例えば、第１ロード命令が送出される第１パイプラインに関して、実行が遅れる第２パイプラインへの第２ロード命令をスケジュールすることによってスケジュールし得る。その遅延は、同じパイプラインに対して第１ロード命令および第２ロード命令をスケジュールすることによって、第１ロード命令に対するアクセスが第２ロード命令に対するアクセスの開始前に完了することを可能にすることにより提供され得る。
【００４０】
ステップ４０８において、第１ロード命令および第２ロード命令がプロセッサ・コア１１４におけるカスケード型遅延実行パイプライン・ユニットに送出され、ステップ４１０において、Ｌ１キャッシュ１１６が第１ロード命令および第２ロード命令によってアクセスされ得る。上述のように、第２ロード命令の実行は、第１ロード命令に関して或る遅延後に開始し得る。その遅延は、適切な遅延（例えば、第１ロード命令に対するアクセスが完了するに十分な遅延）を提供する遅延キュー３２０に第２ロード命令を維持することによって、または同じパイプラインにおける第１ロード命令および第２ロード命令の順次実行をスケジュールすることによって提供することが可能である。
【００４１】
図４に関して説明したように、スケジューリングおよびデコーディングは、第１ロード命令および第２のロード命令が（例えば、Ｌ２キャッシュ１１２またはＬ１キャッシュ１１６から）フェッチされた後に行なわれてもよい。図５は、本発明の一実施例に従ってデコーディングドおよびスケジューリング中に遂行され得るロード命令の実行をスケジュールするためのプロセス４５０を示すフローチャートである。プロセス４５０は、例えば、第１ロード命令および第２ロード命令を実行するとき、プロセッサ・コア１１４によって使用されるスケジュール情報を生成するために使用することが可能である。
【００４２】
プロセス４５０が開始すると、ステップ４０２において、実行されるべき第１ロード命令および第２ロード命令を含む命令のグループが、例えば、プリデコーダ兼スケジューラ２２０によって受け取られる。ステップ４５４において、第１ロード命令が前の命令と競合するかどうかに関する決定が行われる。例えば、ストア命令が第１ロード命令の実行前に実行されるようにスケジュールされ、ロード命令がロードするデータのアドレスにそのストア命令がデータをストアする場合、そのロード命令およびストア命令は、場合によっては競合することがある。そのような競合（または任意の別の競合）の場合、ステップ４５６において、第１ロード命令の実行が前の命令に関して遅延することがある。第１ロード命令の遅延は、競合する命令が実行されるパイプラインに関して（例えば、遅延キュー３１０により）実行が遅延するパイプラインに対して第１ロード命令をスケジュールすることによって遂行され得る。その遅延は、当業者にとっては既知の任意の代替遅延方法を使用して提供することも可能である。
【００４３】
場合によっては、第１ロード命令および第２ロード命令が同じ命令グループにおいて適切に実行されないことがある。例えば、複数の命令が、第１ロード命令と第２ロード命令との間での実行をスケジュールされることがある。別の事例として、第１ロード命令および／または第２ロード命令と他の命令との間の競合は、第１ロード命令および第２ロード命令が同じ送出グループにおいて送出されることを防ぐことがある。従って、１つの実施例では、ステップ４５８において、第１ロード命令および第２ロード命令が共通送出グループにおいて送出され得るどうかに関する決定が行われる。第１ロード命令および第２ロード命令が共通送出グループにおいて送出され得る場合、ステップ４６０において、上述のように、第１ロード命令の実行に関して第２ロード命令の実行が遅延する場合、第１ロード命令および第２ロード命令は共通送出グループにおいて送出するようにスケジュールされ得る。
【００４４】
ステップ４６２において、第１ロード命令および第２ロード命令が共通送出グループにおいて送出され得ない場合、第１ロード命令および第２ロード命令は個別の送出グループにおける送出をスケジュールされ得る。第２ロード命令の実行は、例えば、第１ロード命令および第２ロード命令を同じパイプラインに送出することによって、または第２ロード命令が送出されるパイプラインに関して全く遅延のなく或いは少ない遅延で第１パイプラインに第１ロード命令を送出することによって、第１ロード命令の実行に関して遅延し得る。ステップ４６４において、キャッシュ（例えば、Ｌ１キャッシュ１１６）は、上述したように、第１ロード命令および第２ロード命令を用いてアクセスすることができる。
【００４５】
第１ロード命令および第２ロード命令に関して説明したが、本発明の実施例は３つ以上のロード命令が実行される場合にも使用可能である。例えば、３つのロード命令が実行されるべき場合、（例えば、各命令を同じパイプラインに対して、または遅延の増加を伴う個別のパイプラインに対して、またはそれらの組合せとしてスケジュールすることによって）上述のように各ロード命令間の遅延がスケジュールされてもよい。
【００４６】
一実施例では、Ｌ１キャッシュ１１６が一度に２つ以上のアクセスを行うことができる場合、上述した方法を使用して適切な遅延が提供され得る。例えば、Ｌ１キャッシュ１１６が２つのアクセスを同時に行うことができ、３つのロード命令が実行される場合、（第１および第２ロード命令が相互に従属していないものと仮定すると）第１および第２ロード命令が同時に実行されるようにスケジュールされ得るし、一方、第１および第２ロード命令に対するアクセスと第３ロード命令に対するアクセスとの間に遅延が提供され得る。
【００４７】
場合によっては、第１ロード命令および第２ロード命令が従属している場合（例えば、第２ロード命令が第１ロード命令の結果を使用する場合）、Ｌ１キャッシュ１１６が第１ロード命令および第２ロード命令を同時に実行することができても、第２ロード命令の実行は第１ロード命令の実行に関して遅延することがある。第１ロード命令と第２ロード命令との間のスケジュールされた遅延は、第１ロード命令と第２ロード命令との間の従属性が解決されることを可能にするに十分なものになり得る（例えば、遅延は、従属する第２ロード命令に対するアクセスの開始前に、第１ロード命令に対するアクセスが完了することを可能にし得る）。
【００４８】
第１ロード命令および第２ロード命令に関して説明したが、第１ロード命令および第２ロード命令は、必ずしも、それぞれプログラム順における第１命令およびプログラム順における第２命令ではあり得ない。例えば、プログラムに対するソース・コードがコンパイルされた後、第２命令がプログラム順では第１命令の前に置かれることもある。しかし、プロセッサ・コア１１４が順不同の実行用に構成される場合、第１ロード命令は、プログラム順から外れた第２ロード命令の前に実行されることがある。任意選択的には、順不同の実行が望ましくないか或いは利用不可能である場合、第１ロード命令および第２ロード命令は必要に応じてプログラム順で実行され得る。
【００４９】
更に、一実施例では、第１ロード命令および第２ロード命令は同じスレッド内のものではないことがある。例えば、プロセッサ・コア１１４は第１スレッドおよび第２スレッドからの命令を実行するように構成され得る。従って、第１ロード命令および第２ロード命令は、それぞれ、第１スレッドおよび第２スレッドにあることがある。
【００５０】
本発明の一実施例では、第１ロード命令および第２ロード命令が、第１ロード命令に関して第２ロード命令の実行を遅らせるためにパイプラインに如何なる停止も設定することなく実行されるようにスケジュールされ得る。従って、場合によっては、第１ロード命令に関して第２ロード命令に対する遅延を提供するとき、「ノー・オペレーション（ＮＯＰ）」命令は使用され得ない。その代り、遅延は、前述のように、同じパイプラインにおいて或いは相互に関して遅延するパイプラインにおいて、第１ロード命令および第２ロード命令が実行されるようにスケジュールすることによって提供され得る。第１ロード命令および第２ロード命令を実行するときにカスケード型遅延実行コア１１４が停止され得ないので、プロセッサ・コア１１４は、（例えば、第２ロード命令が遅延している間に他の命令を実行することによって）高い効率を維持し得る。
【００５１】
本発明の一実施例では、第１ロード命令および第２ロード命令が実行されるようにスケジュールさるとき、第１ロード命令および第２ロード命令がＬ１キャッシュ１１６に同時にアクセスしようとし得る場合を表わすスケジュール情報が生成され得る。そのスケジュール情報に基づいて、第２ロード命令に対するアクセスが開始する前に、第１ロード命令がＬ１キャッシュ１１６のアクセスを完了するというような方法で、第１ロード命令および第２ロード命令の実行がスケジュールされ得る。例えば、上述したように、第２ロード命令の実行は、第２ロード命令に対するアクセスが開始する前に第１ロード命令がＬ１キャッシュ１１６のアクセスを完了するように、第１ロード命令の実行に関して遅延し得る。
【００５２】
図６は、本発明の一実施例に従って共通送出グループ５０２におけるロード命令のスケジューリングを表わす図である。図示のように、第１ロード命令（ロード１）および第２ロード命令（ロード２）が、送出キュー２３４における共通送出グループに収納され、プロセッサ・コア１１４における個別のパイプライン（例えば、Ｐ０およびＰ２）に同時に送出され得る。第１ロード命令は、第２ロード命令が送出されるパイプライン（Ｐ２）に関して実行が遅延しない（または、遅延の少ない）パイプライン（Ｐ０）に送出され得る。第２ロード命令を遅延実行パイプラインに収納することによって、上述したように、第２ロード命令の実行が遅延し得る。例えば、第２ロード命令の実行の遅延は、第２ロード命令の実行の開始前にＬ１キャッシュ１１６が第１ロード命令を使用してアクセスを完了することを可能にし得る。第１ロード命令が実行されている間、第２ロード命令がパイプラインＰ２に対する遅延キュー３２０に保持され得るので、ロード命令が送出されるパイプラインＰ２に対する実行ユニット３１０は、他の以前に送出された命令を実行するために依然として利用され得るし、それによって、プロセッサ１１０の効率全体を高めることが可能である。他のパイプライン（Ｐ１、Ｐ３）も、第１ロード命令に対するアクセスが完了することを可能にするために第２ロード命令の実行の十分な遅延を提供し得る。
【００５３】
場合によっては、第１ロード命令および第２ロード命令は、第２ロード命令によるＬ１キャッシュ１１６のアクセス前に第１ロード命令がＬ１キャッシュ１１６のアクセスを完了することを可能にするために、同じパイプラインに送出されてもよい。図６は、本発明の一実施例に従って第１ロード命令および別のロード命令を同じパイプライン（例えば、Ｐ０））にスケジュールすることを示す図である。図示のように、ロード命令およびストア命令は、個別の送出グループ５０２、５０４における送出キュー２３４から同じパイプライン（Ｐ０）に送出され得る。第１ロード命令および第２ロード命令を同じパイプラインに送出することによって、第２ロード命令の実行が第１ロード命令の実行に関して遅延し得る。第２ロード命令の実行を遅延させることによって、Ｌ１キャッシュ１１６は、第２ロード命令の実行の開始前に第１ロード命令を使用してアクセスを完了し得る。第１ロード命令および第２ロード命令は、他のパイプライン（例えば、Ｐ１、Ｐ２、またはＰ３）に対してもスケジュールされ得るし、任意選択的には、同等量の遅延を有する種々のパイプラインに対してもスケジュールされ得る（例えば、他のパイプラインＰ４がパイプラインＰ０の遅延に等しい遅延を有する場合、ロード命令またはストア命令はパイプラインＰ０またはＰ４いずれにおける順序における実行に対してもスケジュールされ得る）。
【００５４】
場合によっては、前述のように第１のロード命令および第２ロード命令の実行をスケジュールするために、そうでない場合はロード命令が収納される送出グループ（例えば、デフォルト送出グループ）が修正され得る。例えば、送出グループは、一般に、各パイプラインに送出される単一の命令（例えば、Ｐ０、Ｐ１、Ｐ２、Ｐ３にそれぞれ送出される４つの命令）を含み得る。しかし、上述のように（例えば、共通送出グループにおける、または個別の送出グループでは同じパイプラインに）ロード命令を送出するために、４つよりも少ない命令が送出されるいくつかの送出グループが作成され得る。
【００５５】
場合によっては、種々の実行ユニット３１０が異なる機能を提供し得る。例えば、実行ユニット３１００および３１０２がロード／ストア機能を提供し得るし（従って、ロード命令およびストア命令を実行するために使用され得るし）、一方、実行ユニット３１０１および３１０３が演算および論理機能を提供し得る（従って、演算命令および論理命令を実行するために使用され得る）。従って、第１ロード命令および第２ロード命令がＬ１キャッシュ１１６を同時にアクセスしようとし得るということをスケジューリング情報が表すとき、スケジューリング・オプション（上述された）は、第１ロード命令および第２ロード命令の実行を適正にスケジュールするために機能制約に関連して利用され得る。例えば、図６に示されるように、第２ロード命令が第１ロード命令と共に共通送出グループにおいて送出され得るし、送出グループ内では、第１ロード命令がパイプラインＰ０に送出され、第２ロード命令がパイプラインＰ２に送出され、それによって、スケジューリング要件および機能制約を満足し得る。場合によっては、任意選択的に、プロセッサ・コア１１４におけるパイプラインＰ０、Ｐ１、Ｐ２、Ｐ３の各々がロード命令および他の命令を実行するために必要な機能を提供し得る。 
【００５６】
一実施例では、情報のスケジューリングは、（例えば、命令における情報を再エンコードすることによって、またはデータをＩラインに付加することによって）第１ロード命令および／または第２ロード命令を含むＩラインに格納され得る。図８は、本発明の一実施例に従ってスケジューリング情報ロード命令（ＳＣＨ）を格納するために使用される例示的なＩライン６０２を示すブロック図である。
【００５７】
図示のように、Ｉライン６０２はスケジューリング情報を格納するために使用される複数の命令（命令１、命令２等）ビットを含み得る。実行中、スケジューリング情報は、上述のように、ロード命令の実行をスケジュールするように使用され得る。場合によっては、スケジューリング情報は、命令がデコードおよび／または実行された後、ロード命令に格納され得る（再エンコードとも呼ばれる）。図９は、本発明の一実施例に従って、例示的な再エンコードされたストア命令６０４を示すブロック図である。ロード命令６０４は、命令のタイプを識別するために使用されるオペレーション・コード（Ｏｐコード）、１つまたは複数のレジスタ・オペランド（Ｒｅｇ．１、Ｒｅｇ．２）、および／または、データを含み得る。図示のように、ロード命令６０４は、スケジューリング情報（ＳＣＨ）および他の情報を格納するために使用されるビットも含み得る。スケジューリング情報は、命令６０４の実行をスケジュールするためにも使用され得る。 
【００５８】
本発明の一実施例では、スケジューリング情報はＩラインに（例えば、Ｉラインに付加されて、または命令内に）に格納され、システム１００において使用される各レベルのキャッシュおよび／またはメモリがＩラインに含まれた情報のコピーを含み得る。本発明の別の実施例では、指定されたレベルのキャッシュおよび／またはメモリだけが、命令および／またはＩラインに含まれた情報を含み得る。当業者には知られているキャッシュ・コヒーレンシ法則が各レベルのキャッシュおよび／またはメモリにおけるＩラインのコピーを更新するために使用され得る。
【００５９】
命令キャッシュを利用する従来のシステムでは、一般に、命令がプロセッサ１１０によって修正されない（例えば、命令は読み取り専用である）ということは注目される。従って、従来のシステムでは、Ｉラインは、Ｌ２キャッシュ１１２に書き戻される代わりに、一般には、或る時間後にＩキャッシュ２２２から排出される。しかし、後述されるように、或る実施例では、修正されたＩラインおよび／または命令がＬ２キャッシュ１１２に書き戻され、それによってスケジューリング情報が高いキャッシュ・レベルおよび／またはメモリ・レベルに維持されることを可能にし得る。
【００６０】
例えば、Ｉラインにおける命令がプロセッサ・コア１１４によって（できればスケジューリング情報を更新させることによって）処理されたとき、Ｉラインが、Ｉキャッシュ２２２およびＬ２キャッシュ１１２を含む１つまたは複数のレベルのキャッシュに書き戻され得る。一実施例では、Ｉラインが、任意選択的に、一度に幾つかのキャッシュ・レベルに（例えば、Ｌ２キャッシュ１１２およびＩキャッシュ２２２に）またはＩキャッシュ２２２に（例えば、Ｌ２キャッシュ１１２に直接に）書き戻され得る。命令は一般に読み取り専用であるので（例えば、命令は、一般に、オリジナル・プログラムが実行された後では修正されないので）、Ｉキャッシュ２２２またはプロセッサ・コア１１４からＬ２キャッシュ１１２に命令情報を書き戻すための追加回路が設けられてもよい。
【００６１】
場合によっては、任意選択的に、Ｄキャッシュ２２４から書き戻されたデータがＬ２キャッシュ１１２に自動的に書き戻され、その上（両方のキャッシュがデータの同じコピーを含むことを可能にする）ようにＤキャッシュ２２４からＬ２キャッシュ１１２へのストア・スルーが利用される場合、Dキャッシュ２２４からＬ２キャッシュ１１２までの個別のパスがストア・スルーを行うために提供され得る。本発明の一実施例では、ストア・スルー・パスは、更にDキャッシュ２２４を許可して、Ｉキャッシュ２２２からＬ２キャッシュ１１２に命令および／またはＩライン・フラグを書き戻すためにも利用され、それによって、Ｄキャッシュ２２４およびＩキャッシュ２２２がストア・スルー・パスの帯域幅を共用することを可能にし得る。
【００６２】
ある場合には、スケジューリング情報は、命令が高レベル・ソース・コードからコンパイルされるとき、命令内にもエンコードされ得る。例えば、一実施例では、コンパイラーは、第１ロード命令および第２ロード命令がＬ１キャッシュ１１６を同時にアクセスしようとし、命令内にスケジューリング・ビットを設け得る場合を認識するように設計され得る。
【００６３】
任意選択的には、一旦プログラムのソース・コードが作成されてしまうと、ソース・コードが命令にコンパイルされ得るし、その命令がテスト実行中に実行され得る。テスト実行およびそのテスト実行の結果は、命令のためのスケジューリング情報を決定するためにモニタされ得る。その後、ソース・コードは再コンパイルされてもよい、スケジューリング情報がテスト実行に照らして適当な値にセットされるように再コンパイルされ得る。場合によっては、テスト実行はプロセッサ１１０上で遂行され得る。場合によっては、プロセッサ１１０における制御ビットおよび制御ピンがプロセッサ１１０をテスト実行に対する特別のテスト・モードに置くために使用され得る。任意選択的には、テスト実行を遂行し且つその結果を監視するように設計された特別のプロセッサが利用され得る。
【００６４】
Ｃ．更なる実施例
本発明の一実施例では、スケジューリング情報は、所与の命令セットが実行されるときに時間と共に、その情報および他の格納された値が変化し得るように、実行時に連続的に追跡および更新され得る。従って、スケジューリング情報は、例えば、プログラムが実行されるとき、動的に修正され得る。
【００６５】
本発明の別の実施例では、スケジューリング情報は、１セットの命令の初期実行フェーズ中に（例えば、プログラムが実行される初期「トレーニング」期間中に）に格納され得る。初期実行フェーズは初期化フェーズまたはレーニング・フェーズ過程とも呼ばれることもある。トレーニング・フェーズ中、スケジューリング情報が追跡され、上記の基準に従って（例えば、命令を含むＩラインに、または特別のキャッシュに）格納されてもよい。トレーニング・フェーズが終了するとき、格納された情報は上述のように命令の実行をスケジュールするために使用され続け得る。
【００６６】
一実施例では、命令がトレーニング・フェーズで実行されているかどうか或いはプロセッサ１１０がトレーニング・フェーズ・モードにあるかどうかを表すために、１つまたは複数のビット（例えば、ロード命令を含んでいるＩラインに格納される、或いは特別のキャッシュまたはレジスタに格納される）が使用され得る。例えば、プロセッサ１１０中のモード・ビットがトレーニング・フェーズ中にクリアされてもよい。そのビットがクリアされる間に、上述のように、スケジューリング情報が更新され得る。トレーニング・フェーズが終了するとき、そのビットはセットされ得る。そのビットがセットされるとき、スケジューリング情報はもはや更新され得ず、トレーニング・フェーズは完全し得る。
【００６７】
一実施例では、トレーニング・フェーズは、指定された期間の間（例えば、 多くのクロック・サイクルが経過するまで、或いは所与の命令が何回も実行されるまで）継続し得る。一実施例では、指定された期間が経過し、トレーニング・フェーズが終了したとき、最近格納されたスケジューリング情報は格納されたままであってもよい。更に、一実施例では、所与のＩラインが閾値回数だけ実行されてしまうまで、トーニング・フェーズは継続し得る。例えば、Ｉラインが所与のレベルのキャッシュから（例えば、メイン・メモリ１０２、L３キャッシュ、またはＬ２キャッシュ１１２から）フェッチされるとき、Ｉラインにおけるカウンタ（例えば、２または３ビット・カウンタ）はゼロにリセットされ得る。カウンタが閾値数未満のＩライン実行である間、Ｉラインの命令に対するトレーニング・フェーズは継続し得る。Ｉラインの各実行後、カウンタはインクリメントされ得る。Ｉラインの閾値数の実行後、Ｉラインの命令のためのトレーニング・フェーズは終了し得る。更に、場合によっては、実行されるＩラインにおける命令に従って種々の閾値が使用され得る（例えば、かなりに程度まで結果が変わる命令に対してはもと多くのトレーニングが使用され得る）。本発明の別の実施例では、１つまたは複数の終了基準が満たされるまで、トレーニング・フェーズは継続し得る。
【００６８】
本発明の別の実施例では、スケジューリング情報は、断続的なトレーニング・フェーズにおいて修正され得る。例えば、各トレーニング・フェーズに対する頻度および期間値が格納され得る。頻度に対応する多くのクロック・サイクルが経過するたびに、トレーニング・フェーズが開始され、指定された期間値の間継続し得る。別の実施例では、頻度に対応する多くのクロック・サイクルが経過するたびに、トレーニング・フェーズが開始され、指定された閾値条件が満たされるまで（例えば、指定されたレベルのスケジューリング予測可能状態に到達するまで）継続し得る。
【００６９】
カスケード型遅延実行パイプライン・ユニットに関しておよび複数のコア１１４を有するプロセッサに関して本発明の実施例を説明したが、本発明の実施例は、カスケード型遅延実行パイプライン・ユニットを利用し得ない通常のプロセッサを含む任意のプロセッサを用いて利用され得る。代替の適当な構成も当業者には容易に明らかであろう。
【００７０】
以上は本発明の実施例に関するものであるが、本発明の基本的範囲から逸脱することなく、本発明の他のおよび更なる実施例を工夫し得る。
【図面の簡単な説明】
【００７１】
【図１】本発明の一実施例によるシステムを示すブロック図である。
【図２】本発明の一実施例によるコンピュータ・プロセッサを示すブロック図である。
【図３】本発明の一実施例によるプロセッサのコアの１つを示すブロック図である。
【図４】本発明の一実施例に従って命令を実行するためのプロセスを示すフローチャートである。
【図５】本発明の一実施例に従って命令を実行するためのプロセスを示すフローチャートである。
【図６】本発明の一実施例によるロード命令のスケジューリングを示すブロック図である。
【図７】本発明の一実施例によるロード命令のスケジューリングを示すブロック図である。
【図８】本発明の一実施例による例示的なキャッシュ・ラインおよび命令を示すブロック図である。
【図９】本発明の一実施例による例示的なキャッシュ・ラインおよび命令を示すブロック図である。
【図１】
0005128382.tif 000002
【図２】
0005128382.tif 000003
【図３】
0005128382.tif 000004
【図４】
0005128382.tif 000005
【図５】
0005128382.tif 000006
【図６】
0005128382.tif 000007
【図７】
0005128382.tif 000008
【図８】
0005128382.tif 000009
【図９】
0005128382.tif 000010