JP5357017B2 - 高速で安価なストア−ロード競合スケジューリング及び転送機構 - Google Patents

高速で安価なストア−ロード競合スケジューリング及び転送機構 Download PDF

Info

Publication number
JP5357017B2
JP5357017B2 JP2009513663A JP2009513663A JP5357017B2 JP 5357017 B2 JP5357017 B2 JP 5357017B2 JP 2009513663 A JP2009513663 A JP 2009513663A JP 2009513663 A JP2009513663 A JP 2009513663A JP 5357017 B2 JP5357017 B2 JP 5357017B2
Authority
JP
Japan
Prior art keywords
store
load
instruction
data
cache
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009513663A
Other languages
English (en)
Other versions
JP2009540411A (ja
Inventor
ルーイク、デービッド、アーノルド
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2009540411A publication Critical patent/JP2009540411A/ja
Application granted granted Critical
Publication of JP5357017B2 publication Critical patent/JP5357017B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、一般に、プロセッサにおける命令の実行に関する。具体的には、本出願は、ストア−ロード競合によるプロセッサの停止を最小限にすることに関する。
現代のコンピュータ・システムは、典型的には、コンピュータ・システムにおいて情報を処理するのに用いることができるプロセッサを含む幾つかの集積回路(IC)を含んでいる。プロセッサによって処理されるデータは、プロセッサによって実行されるコンピュータ命令と、コンピュータ命令を用いてプロセッサによって操作されるデータとを含むことができる。コンピュータ命令とデータは、典型的には、コンピュータ・システムのメイン・メモリにストアされる。
プロセッサは、典型的には、一連の小ステップで命令を実行することによって、命令を処理する。プロセッサによって処理される命令の数を増やすために(したがって、プロセッサの速度を増すために)、プロセッサをパイプライン方式とする場合がある。パイプライン方式とは、プロセッサに別々のステージを設け、各々のステージが命令を実行するのに必要な小ステップの1つ又は複数を行うことをさす。パイプライン(他の回路に加えて)は、プロセッサ・コアと呼ばれるプロセッサの部分に置かれる場合がある。プロセッサが複数のプロセッサ・コアを有することがあり、各々のプロセッサ・コアが複数のパイプラインを有することもある。プロセッサ・コアが複数のパイプラインを有する場合には、(発行グループと呼ばれる)命令のグループを、複数のパイプラインに並列に発行し、パイプラインの各々によって並列に実行させることができる。
パイプラインにおける命令の実行の一例として、第1の命令が受信されたときに、第1のパイプライン・ステージがその命令の一部分を処理することができる。第1のパイプライン・ステージが命令の一部分の処理を終了すると、第2のパイプライン・ステージが第1の命令の別の一部分の処理を開始する一方で、第1のパイプライン・ステージは、第2の命令の一部分を受信し、その処理を開始することができる。このように、プロセッサは、2つ又はそれ以上の命令を同時に(並列に)処理することができる。
より高速にデータ及び命令にアクセスし、より良好にプロセッサを使用するために、プロセッサは、幾つかのキャッシュを有する場合がある。キャッシュは、典型的にはメイン・メモリより小型であり、典型的にはプロセッサと同じダイ(即ちチップ)上に製造されるメモリである。現代のプロセッサは、典型的には幾つかのレベルのキャッシュを有する。プロセッサのコアの最も近くに配置されるより高速なキャッシュは、レベル1キャッシュ(L1)と呼ばれる。L1キャッシュに加えて、プロセッサは、典型的には、レベル2キャッシュ(L2キャッシュ)と呼ばれる第2の、より大型のキャッシュを有する。プロセッサが他の付加的なキャッシュ・レベル(例えば、L3キャッシュ及びL4キャッシュ)を有する場合もある。
プロセッサは、典型的には、キャッシュ及び/又はメイン・メモリに配置される情報にアクセスするためのロード命令及びストア命令を与える。ロード命令は、(命令の中に直接与えられるか、アドレス・レジスタを用いて与えられる)メモリ・アドレスを含み、ターゲット・レジスタ(Rt)を特定することができる。ロード命令が実行されたときには、メモリ・アドレスにストアされたデータを(例えば、キャッシュ、メイン・メモリ、又は他のストレージ手段から)取り出し、Rtによって特定されるターゲット・レジスタに置くことができる。同様に、ストア命令は、メモリ・アドレスとソース・レジスタ(Rs)とを含むことができる。ストア命令が実行されたときには、Rsからのデータをメモリ・アドレスに書き込むことができる。典型的には、ロード命令及びストア命令は、L1キャッシュにキャッシュされたデータを利用する。
ストア命令が実行されたときに、ストアされているデータが直ちにL1キャッシュに置かれない場合がある。例えば、ロード命令がパイプラインにおいて実行を開始した後で、ロード命令がパイプラインにおける実行を終了するまで、数回のプロセッサ・サイクルを経る場合がある。別の例として、ストアされているデータが、L1キャッシュに書き戻される前にストア・キューに置かれる場合がある。ストア・キューは、幾つかの理由で用いられることがある。例えば、ストア・データがL1キャッシュに書き戻されるより速く、複数のストア命令がプロセッサ・パイプラインにおいて実行される場合がある。ストア・キューが複数のストア命令についての結果を保持することにより、より低速なL1キャッシュが、ロード命令の結果を後でストアし、より高速なプロセッサ・パイプラインに「追いつく」ことができるようになる。ストア命令の結果を用いてL1キャッシュを更新するのに必要な時間は、ストア命令の「待ち時間(latency)」と呼ばれることがある。
ストア命令からのデータが、待ち時間が原因でL1キャッシュにおいて直ちに利用できない場合には、特定の命令の組み合わせが実行エラーを生じさせることがある。例えば、データをメモリ・アドレスにストアするストア命令が実行されることがある。上述されたように、ストア・データはL1キャッシュにおいて直ちに利用できないことがある。ストア命令の後すぐに、同じメモリ・アドレスからのデータをロードするロード命令が実行された場合には、ロード命令は、ストア命令の結果を用いてL1キャッシュが更新される前に、L1キャッシュからのデータを受信することができる。
このように、ロード命令は、不正確なデータ又は「古くなった(stale)」データ(例えば、以前に実行されたストア命令の結果を用いて置換されるはずの、L1キャッシュからのより古いデータ)を受信することがある。ロード命令が、以前に実行されたストア命令と同じアドレスからデータをロードする場合には、ロード命令は、依存ロード命令(dependent load instruction)と呼ぶことができる(ロード命令によって受信されるデータは、ストア命令によってストアされるデータに依存する)。ストア命令の待ち時間の結果として依存ロード命令がキャッシュから不正確なデータを受信した場合には、結果として得られる実行エラーは、ロード−ストア競合(load-store conflict)と呼ぶことができる。
依存ロード命令が不正確なデータを受信していることがあるため、不正確にロードされたデータを用いる後続の発行命令もまた、不適切に実行され、不正確な結果に至る場合がある。このようなエラーを検出するために、ロード命令のメモリ・アドレスがストア命令のメモリ・アドレスと比較される場合がある。メモリ・アドレスが同じ場合には、ロード−ストア競合を検出することができる。しかしながら、ロード命令のメモリ・アドレスはロード命令の実行後まで知ることができないため、ロード−ストア競合は、ロード命令が実行されるまで検出されない場合がある。
したがって、検出されたエラーを解決するために、実行されたロード命令及び後続の発行命令がパイプラインからフラッシュされることがあり(例えば、ロード命令及び後続の実行命令の結果が廃棄されることがある)、フラッシュされた命令の各々は、再発行され、パイプラインにおいて再び実行されることがある。ロード命令及び後続の発行命令が無効になり、再発行されている間に、L1キャッシュは、ストア命令によってストアされたデータを用いて更新される場合がある。再発行されたロード命令が二度目に実行されるときには、そのロード命令は、正確に更新されたデータをL1キャッシュから受信することができる。
ロード−ストア競合後にロード命令及び後続の実行命令を実行し、無効にし、再発行することによって、多くのプロセッサ・サイクルが経過することになる。ロード命令及び後続の発行命令の最初の結果は無効であるため、命令を実行することに費やされた時間は実質的に無駄になる。このように、ロード−ストア競合は、典型的には、プロセッサの非効率性をもたらす。
したがって、ロード命令及びストア命令を実行する方法を改善する必要性が存在する。
第1の態様によれば、本発明は、プロセッサにおいて命令を実行する方法であって、ロード命令及びストア命令を受信するステップと、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するステップと、ロード実効アドレスをストア実効アドレスと比較するステップと、ストア命令についてのストア・データを、ストア命令が実行されている第1のパイプラインから、ロード命令が実行されている第2のパイプラインに転送するステップであって、ロード命令はストア・データを第1のパイプラインから受信し、要求されたデータをデータ・キャッシュから受信する、ステップと、ロード実効アドレスがストア実効アドレスと一致する場合には、転送されたストア・データをロード・データと統合するステップと、ロード実効アドレスがストア実効アドレスと一致しない場合には、データ・キャッシュからの要求されたデータをロード・データと統合するステップと、を含む方法を提供する。
本発明は、ロード・データのページ番号がストア・データのページ番号の一部と一致する場合にのみ、転送されたデータが統合される方法を提供することが好ましい。
本発明は、ロード・データのロード物理アドレスの一部がストア・データのストア物理アドレスの一部と一致する場合にのみ、転送されたデータが統合される方法を提供することが好ましい。
本発明は、ロード物理アドレスがロード実効アドレスを用いて取得され、ストア物理アドレスがストア実効アドレスを用いて取得される方法を提供することが好ましい。
本発明は、ロード実効アドレスの一部のみとストア実効アドレスの一部のみとを用いて比較が行われる方法を提供することが好ましい。
本発明は、ロード命令及びストア命令が、各々の命令についての実効アドレスを各々の命令についての実アドレスに変換することなく第1のパイプライン及び第2のパイプラインによって実行される方法を提供することが好ましい。
本発明は、投機的に転送されたストア・データをロード・データと統合した後で、ストア・データのストア物理アドレスをロード・データのロード物理アドレスと比較して、ストア物理アドレスがロード物理アドレスと一致するかどうかを判定する検証を行うステップをさらに含む方法を提供することが好ましい。
第2の態様の観点から、本発明は、キャッシュと、第1のパイプラインと、第2のパイプラインと、キャッシュからロード命令及びストア命令を受信し、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算し、ロード実効アドレスをストア実効アドレスと比較し、ストア命令についてのストア・データをストア命令が実行されている第1のパイプラインからロード命令が実行されている第2のパイプラインに転送し、ロード実効アドレスがストア実効アドレスと一致する場合には、転送されたストア・データをロード・データと統合するように構成された回路と、を含むプロセッサを備える。
本発明は、ロード・データのページ番号がストア・データのページ番号の一部と一致する場合にのみ、予測的に転送されたデータを統合するように回路を構成可能なプロセッサを提供することが好ましい。
本発明は、ロード・データのロード物理アドレスの一部がストア・データのストア物理アドレスの一部と一致する場合にのみ、予測的に転送されたデータを統合するように回路を構成可能なプロセッサを提供することが好ましい。
本発明は、ロード実効アドレスを用いてロード物理アドレスを取得するように回路を構成可能であり、ストア実効アドレスを用いてストア物理アドレスを取得するように回路を構成可能な、プロセッサを提供することが好ましい。
本発明は、ロード実効アドレスの一部のみとストア実効アドレスの一部のみとを用いて比較を行うように回路を構成可能なプロセッサを提供することが好ましい。
本発明は、ロード命令及びストア命令を、各々の命令についての実効アドレスを各々の命令についての実アドレスに変換することなく第1のパイプライン及び第2のパイプラインにおいて実行するように構成可能なプロセッサを提供することが好ましい。
本発明は、転送されたストア・データをロード・データと統合した後で、ストア・データのストア物理アドレスをロード・データのロード物理アドレスと比較して、ストア物理アドレスがロード物理アドレスと一致するかどうかを判定する検証を行うように回路を構成可能なプロセッサを提供することが好ましい。
第3の態様の観点から、本発明は、コンピュータ上で実行された時に上述の発明を実現するように機能するソフトウェア・コード部分を含む、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムを提供する。
第4の態様の観点から、本発明は、キャッシュと、2つ又はそれ以上の実行パイプラインを有するカスケード式遅延実行パイプライン・ユニットであって、第1の実行パイプラインは、共通発行グループの中の第1の命令を、第2の実行パイプラインにおいて実行される共通発行グループの中の第2の命令に対して遅延させて実行する、カスケード式遅延実行パイプライン・ユニットと、キャッシュからロード命令及びストア命令を受信し、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算し、ロード実効アドレスをストア実効アドレスと比較し、ストア命令についてのストア・データを、ストア命令が実行されている第1のパイプラインからロード命令が実行されている第2のパイプラインに転送し、ロード実効アドレスがストア実効アドレスと一致する場合には、転送されたストア・データをロード・データと統合するように構成可能な回路と、を備えるプロセッサを提供する。
本発明は、ロード・データのページ番号がストア・データのページ番号の一部と一致する場合にのみ、転送されたデータを統合するように回路を構成可能なプロセッサを提供することが好ましい。
本発明は、ロード・データのロード物理アドレスの一部がストア・データのストア物理アドレスの一部と一致する場合にのみ、転送されたデータを統合するように回路を構成可能なプロセッサを提供することが好ましい。
本発明は、ロード実効アドレスを用いてロード物理アドレスを取得するように回路を構成可能であり、ストア実効アドレスを用いてストア物理アドレスを取得するように回路を構成可能な、プロセッサを提供することが好ましい。
本発明は、ロード実効アドレスを用いてデータ・キャッシュ・ディレクトリからロード物理アドレスの一部を取り出すように回路を構成可能であり、ストア実効アドレスを用いてデータ・キャッシュ・ディレクトリからストア物理アドレスの一部を取り出すように回路を構成可能な、プロセッサを提供することが好ましい。
本発明は、ロード実効アドレスの一部のみとストア実効アドレスの一部のみとを用いて比較を行うように回路を構成可能なプロセッサを提供することが好ましい。
本発明は、ロード命令及びストア命令を、各々の命令についての実効アドレスを各々の命令についての実アドレスに変換することなく第1のパイプライン及び第2のパイプラインにおいて実行するように構成可能なプロセッサを提供することが好ましい。
本発明は、投機的に転送されたストア・データをロード・データと統合した後で、ストア・データのストア物理アドレスをロード・データのロード物理アドレスと比較して、ストア物理アドレスがロード物理アドレスと一致するかどうかを判定する検証を行うように回路を構成可能なプロセッサを提供することが好ましい。
本発明の実施形態は、命令を実行するための方法及び装置を提供する。1つの実施形態においては、本方法は、ロード命令及びストア命令を受信するステップと、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するステップと、を含む。本方法は、さらに、ロード実効アドレスをストア実効アドレスと比較するステップと、ストア命令についてのストア・データをストア命令が実行されている第1のパイプラインからロード命令が実行されている第2のパイプラインに投機的に転送するステップと、を含む。ロード命令は、ストア・データを第1のパイプラインから受信し、要求されたデータをデータ・キャッシュから受信する。ロード実効アドレスがストア実効アドレスと一致する場合には、投機的に転送されたストア・データはロード・データと統合される。ロード実効アドレスがストア実効アドレスと一致しない場合には、データ・キャッシュからの要求されたデータがロード・データと統合される。
本発明の1つの実施形態は、キャッシュと、第1のパイプラインと、第2のパイプラインと、回路とを含むプロセッサを提供する。1つの実施形態においては、回路は、キャッシュからロード命令及びストア命令を受信し、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するように構成される。回路は、さらに、ロード実効アドレスをストア実効アドレスと比較し、ストア命令についてのストア・データをストア命令が実行されている第1のパイプラインからロード命令が実行されている第2のパイプラインに投機的に転送するように構成される。ロード実効アドレスがストア実効アドレスと一致する場合には、投機的に転送されたストア・データはロード・データと統合される。
本発明の1つの実施形態は、キャッシュと、カスケード式遅延実行パイプライン・ユニットと、回路とを含むプロセッサを提供する。カスケード式遅延実行パイプライン・ユニットは、2つ又はそれ以上の実行パイプラインを含み、第1の実行パイプラインは、共通発行グループの中の第1の命令を、第2の実行パイプラインにおいて実行される共通発行グループの中の第2の命令に対して遅延させて実行する。1つの実施形態においては、回路は、キャッシュからロード命令及びストア命令を受信し、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するように構成される。回路は、さらに、ロード実効アドレスをストア実効アドレスと比較し、ストア命令についてのストア・データをストア命令が実行されている第1のパイプラインからロード命令が実行されている第2のパイプラインに投機的に転送するように構成される。ロード実効アドレスがストア実効アドレスと一致する場合には、投機的に転送されたストア・データはロード・データと統合される。
本発明の上述された特徴、利点、及び目的が達成され、詳細に理解できるように、上記で要約された本発明のより具体的な説明が、添付図面において示される本発明の実施形態を参照して行われる。
しかしながら、添付図面は、本発明の典型的な実施形態のみを示しており、したがって本発明の範囲を限定するものとみなされるべきではなく、本発明は等しく有効な他の実施形態を許容できることに留意されたい。
本発明は、一般に、命令を実行するための方法及び装置を提供する。1つの実施形態においては、本方法は、ロード命令及びストア命令を受信するステップと、ロード命令についてのロード・データのロード実効アドレスとストア命令についてのストア・データのストア実効アドレスとを計算するステップと、を含む。本方法は、さらに、ロード実効アドレスをストア実効アドレスと比較するステップと、ストア命令についてのストア・データをストア命令が実行されている第1のパイプラインからロード命令が実行されている第2のパイプラインに投機的に転送するステップと、を含む。ロード命令は、ストア・データを第1のパイプラインから受信し、要求されたデータをデータ・キャッシュから受信する。ロード実効アドレスがストア実効アドレスと一致する場合には、投機的に転送されたストア・データはロード・データと統合される。ロード実効アドレスがストア実効アドレスと一致しない場合には、データ・キャッシュからの要求されたデータがロード・データと統合される。ストア・データをロード命令が実行されているパイプラインに投機的に転送し、投機的に転送されたデータをロード・データと統合するかどうかを判定するためにロード実効アドレスとストア実効アドレスとの比較を用いることによって、実行するためにロード命令及びストア命令を再発行することなく、ロード−ストア競合を解決できるようになる。
以下においては、本発明の実施形態が参照される。しかしながら、本発明は説明された具体的な実施形態に限定されるものではないことが理解されるべきである。むしろ、異なる実施形態に関するかどうかにかかわらず、以下の特徴及び要素のいかなる組み合わせも本発明を実装し、実施するように考慮されている。さらに、本発明は種々の実施形態において、従来技術に勝る多数の利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決策及び/又は従来技術に勝る利点を実現することができるが、所与の実施形態によって特定の利点が実現されるかどうかは、本発明を限定することにはならない。したがって、以下の態様、特徴、実施形態、及び利点は、単なる例示であり、1つ又は複数の請求項において明確に記載される場合を除き、特許請求の範囲の要素又は限定とみなされることはない。同様に、「本発明」というときは、本明細書で開示されるいずれかの発明の主題を包括していると解釈されるべきであり、1つ又は複数の請求項において明確に記載される場合を除き、特許請求の範囲の要素又は限定であるとみなすべきではない。
以下は、添付図面に示される本発明の実施形態の詳細な説明である。実施形態は、一つの例であり、本発明を明瞭に伝えるように詳細なものとなっている。しかしながら、提示される詳細さの程度は、実施形態の予想される変化形を限定することを意図するものではなく、逆に、特許請求の範囲によって定められる本発明の趣旨及び範囲内にある全ての変更物、等価物、及び代替物を網羅することが意図されている。
本発明の実施形態は、例えばコンピュータ・システムなどのシステムにおいて使用することができ、そのようなシステムに関して以下で説明される。ここで用いられる際には、システムは、パーソナル・コンピュータ、インターネット機器、デジタル・メディア機器、携帯情報端末(PDA)、携帯用音楽/動画再生装置、及びビデオゲーム機を含む、プロセッサ及びキャッシュ・メモリを使用するいずれかのシステムを含むものとすることができる。キャッシュ・メモリは、そのキャッシュ・メモリを使用するプロセッサと同一のダイ上に配置することができるが、プロセッサとキャッシュ・メモリとを異なるダイ上に配置することもできる(例えば、別個のモジュール内の別個のチップ、又は、単一のモジュール内の別個のチップ)。
本発明の実施形態は、以下においては、各々のプロセッサ・コアが複数のパイプラインを用いて命令を実行する、複数のプロセッサ・コア及び複数のL1キャッシュを有するプロセッサに関して説明されるが、単一のプロセッサ・コアを有するプロセッサを含む、キャッシュを使用するあらゆるプロセッサで用いることができる。一般に、本発明の実施形態は、あらゆるプロセッサで用いることができ、いずれかの特定の構成に限定されることはない。さらに、本発明の実施形態は、以下においては、L1命令キャッシュ(L1 I−キャッシュ又はI−キャッシュ)とL1データ・キャッシュ(L1 D−キャッシュ又はD−キャッシュ)とに分割されたL1キャッシュを有するプロセッサに関して説明されるが、統合されたL1キャッシュが用いられる構成において使用することもできる。また、本発明の実施形態は、以下においては、L1キャッシュ・ディレクトリを使用するL1キャッシュに関して説明されるが、キャッシュ・ディレクトリが用いられない場合にも使用することができる。
例示的なシステムの概要
図1は、本発明の1つの実施形態によるシステム100を示すブロック図である。システム100は、命令及びデータをストアするためのシステム・メモリ102と、グラフィックス処理のためのグラフィックス処理ユニット104と、外部装置と通信するためのI/Oインターフェース106と、命令及びデータの長期ストレージのためのストレージ・デバイス108と、命令及びデータを処理するためのプロセッサ110と、を含むことができる。
本発明の1つの実施形態によれば、プロセッサ110は、L2キャッシュ112と複数のL1キャッシュ116とを有することができ、各々のL1キャッシュ116は複数のプロセッサ・コア114の1つによって使用される。1つの実施形態によれば、各々のプロセッサ・コア114はパイプライン方式とすることができ、各々の命令は、各々が異なるパイプライン・ステージによって実施される一連の小ステップで実施される。
図2は、本発明の1つの実施形態によるプロセッサ110を示すブロック図である。分かりやすくするために、図2は、プロセッサ110の単一のコア114に関して示され、説明される。1つの実施形態においては、各々のコア114は、同一のものとすることができる(例えば、同一のパイプライン・ステージを有する同一のパイプラインを含む)。別の実施形態においては、各々のコア114は、異なるものとすることができる(例えば、異なるステージを有する異なるパイプラインを含む)。
本発明の1つの実施形態においては、L2キャッシュは、プロセッサ110によって用いられる命令及びデータの一部を含むことができる。プロセッサ110が、L2キャッシュ112に含まれていない命令及びデータを要求する場合もある。要求された命令及びデータがL2キャッシュ112に含まれていない場合には、要求された命令及びデータを(より高いレベルのキャッシュ又はシステム・メモリ102のどちらかから)取り出し、L2キャッシュに置くことができる。プロセッサ・コア114がL2キャッシュ112からの命令を要求したときには、命令は、最初にプリデコーダ及びスケジューラ220によって処理することができる(以下でより詳細に説明される)。
本発明の1つの実施形態においては、命令は、L2キャッシュ112からI−ラインと呼ばれるグループの形でフェッチすることができる。同様に、データは、L2キャッシュ112からD−ラインと呼ばれるグループの形でフェッチすることができる。図1に示されるL1キャッシュ116は、2つの部分、即ち、I−ラインをストアするためのL1命令キャッシュ222(I−キャッシュ222)と、D−ラインをストアするためのL1データ・キャッシュ224(D−キャッシュ224)とに分割することができる。I−ライン及びD−ラインは、L2アクセス回路210を用いて、L2キャッシュ112からフェッチすることができる。
L2キャッシュ112から取り出されたI−ラインは、プリデコーダ及びスケジューラ220によって処理することができ、I−ラインは、I−キャッシュ222に置くことができる。プロセッサの性能をさらに改善するために、命令はプリデコードされることが多く、例えば、I−ラインはL2(又はより高レベルの)キャッシュから取り出される。このようなプリデコードは、アドレス生成、分岐予測、及びスケジューリング(命令を発行する順序を決定すること)などの種々の機能を含むものとすることができ、それらは命令の実行を制御するディスパッチ情報(フラグの組)として捉えられる。
プリデコーダ及びスケジューラ220は、複数のコア114及びL1キャッシュの間で共用される場合もある。同様に、L2キャッシュ112からフェッチされたD-ラインは、D−キャッシュ224に置くことができる。各々のI−ライン及びD−ラインの1つのビットを用いて、L2キャッシュ112における情報のラインがI−ラインであるのかD−ラインであるのかを追跡することができる。必要に応じて、L2キャッシュ112からI−ライン及び/又はD−ラインとしてデータをフェッチする代わりに、より少ない量のデータ、より多い量のデータ、又は可変量のデータをフェッチするなどといった他の方法で、L2キャッシュ112からデータをフェッチしてもよい。
1つの実施形態においては、I−キャッシュ222及びD−キャッシュ224に現在どのI−ライン及びD−ラインがあるのかを追跡するために、I−キャッシュ222及びD−キャッシュ224は、それぞれI−キャッシュ・ディレクトリ223及びD−キャッシュ・ディレクトリ225を持つものとすることができる。I−ライン又はD−ラインが、I−キャッシュ222又はD−キャッシュ224に追加されたときには、対応するエントリをI−キャッシュ・ディレクトリ223又はD−キャッシュ・ディレクトリ225に置くことができる。I−ライン又はD−ラインが、I−キャッシュ222又はD−キャッシュ224から削除されたときには、I−キャッシュ・ディレクトリ223又はD−キャッシュ・ディレクトリ225の対応するエントリを削除することができる。本発明の実施形態は、以下においてはD−キャッシュ・ディレクトリ225を使用するD−キャッシュ224に関して説明されるが、D−キャッシュ・ディレクトリ225が用いられない場合にも使用することができる。そのような場合には、D−キャッシュ224にストアされたデータ自体が、どのD−ラインがD−キャッシュ224に存在するかを示すことができる。
1つの実施形態においては、命令フェッチ回路236を用いて、コア114についての命令をフェッチすることができる。例えば、命令フェッチ回路236は、コアにおいて現在実行されている命令を追跡するプログラム・カウンタを含むことができる。コア内の分岐ユニットを用いて、分岐命令に遭遇したときにプログラム・カウンタを変更することができる。I−ライン・バッファ232を用いて、L1 I−キャッシュ222からフェッチされた命令をストアすることができる。発行及びディスパッチ回路234を用いて、I−ライン・バッファ232にある命令を、以下で説明されるように後にコア114に並列に発行することができる命令グループとしてグループ化することができる。発行及びディスパッチ回路234は、適切な命令グループを形成するために、プリデコーダ及びスケジューラ220によって与えられる情報を用いる場合もある。
発行及びディスパッチ回路234から命令を受信することに加えて、コア114は、様々な場所からデータを受信することができる。コア114がデータ・レジスタからのデータを必要とする場合には、レジスタ・ファイル240を用いてデータを取得することができる。コア114がメモリ位置からの情報を必要とする場合には、キャッシュ・ロード及びストア回路250を用いて、D−キャッシュ224からデータをロードすることができる。このようなロードが行われる場合には、必要なデータについての要求をD−キャッシュ224に発行することができる。同時に、所望のデータがD−キャッシュ224に配置されているかどうかを判定するために、D−キャッシュ・ディレクトリ225をチェックすることができる。D−キャッシュ224が所望のデータを含んでいる場合には、D−キャッシュ・ディレクトリ225は、D−キャッシュ224が所望のデータを含んでいることを示すことができ、その後のある時点でD−キャッシュ・アクセスを完了することができる。D−キャッシュ224が所望のデータを含んでいない場合には、D−キャッシュ・ディレクトリ225は、D−キャッシュ224が所望のデータを含んでいないことを示すことができる。D−キャッシュ・ディレクトリ225は、D−キャッシュ224より高速にアクセスすることができるため、所望のデータについての要求は、D−キャッシュへのアクセスが完了する前に、L2キャッシュ112に(例えば、L2アクセス回路210を用いて)発行することができる。
データがコア114内で修正される場合もある。修正されたデータは、レジスタ・ファイルに書き込むか又はメモリにストアすることができる。書き戻し回路238を用いて、データをレジスタ・ファイル249に書き戻すことができる。データをD−キャッシュ224に書き戻すために、書き戻し回路238がキャッシュ・ロード及びストア回路250を用いる場合もある。必要に応じて、コア114がキャッシュ・ロード及びストア回路250に直接アクセスして、ストアを行ってもよい。以下で説明されるように、書き戻し回路238を用いて、命令をI−キャッシュ222に書き戻す場合もある。
上述されたように、発行及びディスパッチ回路234を用いて、命令グループを形成し、形成された命令グループをコア114に発行することができる。発行及びディスパッチ回路234は、I−ラインの命令を循環させ、統合し、それにより適切な命令グループを形成するための回路を含むこともできる。発行グループの形成にあたっては、発行グループにおける命令間の依存関係、及び、以下でより詳細に説明されるような命令の順序付けにより実現できる最適化などといった、幾つかの事項を考慮することがある。発行グループが形成されると、その発行グループは、プロセッサ・コア114に並列にディスパッチすることができる。命令グループが、コア114のパイプラインごとの1つの命令を含む場合もある。必要に応じて、命令グループは、より少ない数の命令を含むこともある。
本発明の1つの実施形態によれば、1つ又は複数のプロセッサ・コア114は、カスケード型遅延実行パイプライン構成を利用することができる。図3に示される例においては、コア114は、4つのパイプラインをカスケード型構成で含む。必要に応じて、より少ない数(2つ又はそれ以上のパイプライン)又はより多い数(5つ以上のパイプライン)をこのような構成で用いてもよい。さらに、図3に示されるパイプラインの物理的なレイアウトは例示的なものであり、必ずしもカスケード型遅延実行パイプライン・ユニットの実際の物理的なレイアウトを示唆するものではない。
1つの実施形態においては、カスケード型遅延実行パイプライン構成における各々のパイプライン(P0、P1、P2、P3)は、実行ユニット310を含むことができる。実行ユニット310は、所与のパイプラインについて1つ又は複数の機能を行うことができる。例えば、実行ユニット310は、命令のフェッチ及びデコードの全て又は一部を行うことができる。実行ユニットによって行われるデコードは、複数のコア114の間で共用される、又は必要に応じて単一のコア114によって使用される、プリデコーダ及びスケジューラ220と分担することもできる。実行ユニットは、また、レジスタ・ファイルからデータを読み取り、アドレスを計算し、(例えば論理演算ユニット即ちALUを用いて)整数演算機能を行い、浮動小数点演算機能を行い、命令分岐を実行し、データ・アクセス機能(例えば、メモリからのロード及びストア)を行い、データをレジスタに(例えば、レジスタ・ファイル240に)戻してストアすることができる。コア114は、これらの機能を行うために、命令フェッチ回路236、レジスタ・ファイル240、キャッシュ・ロード及びストア回路250、及び書き戻し回路、並びに他のいずれかの回路を利用することもできる。
1つの実施形態においては、各々の実行ユニット310は、同じ機能を行う(例えば、各々の実行ユニット310は、ロード/ストア機能を行うことができる)。必要に応じて、各々の実行ユニット310(又は、異なるグループの実行ユニット)は、それぞれ異なる機能を行うことができる。また、各々のコア114における実行ユニット310は、他のコアに設けられた実行ユニット310と同一のもの又は異なるものとすることができる。例えば、1つのコアにおいて、実行ユニット310及び実行ユニット310がロード/ストア機能及び演算機能を行う一方で、実行ユニット310及び実行ユニット310が演算機能しか行わないことがある。
1つの実施形態においては、図示されるように、実行ユニット310における実行は、他の実行ユニット310に対して遅延させて行うことができる。図示される配置は、カスケード型遅延構成と呼ぶこともできるが、図示されるレイアウトは、必ずしも実行ユニットの実際の物理的なレイアウトを示すものではない。命令グループにおける4つの命令(便宜上、I0、I1、I2、I3と呼ばれる)がパイプラインP0、P1、P2、P3に並列に発行されるこのような構成においては、各々の命令は、各々の他の命令に対して遅延させて行うことができる。例えば、第1にパイプラインP0の実行ユニット310において命令I0を実行し、第2にパイプラインP1の実行ユニット310において命令I1を実行し、などとすることができる。I0は、実行ユニット310において直ちに実行することができる。その後、実行ユニット310における命令I0の実行が終了した後で、実行ユニット310が命令I1の実行を開始するなどのようにすることができ、このようにして、コア114に並列に発行された命令は、互いに対して遅延して行われる。
1つの実施形態においては、幾つかの実行ユニット310は互いに対して遅延させることができる一方、他の実行ユニット310は互いに対して遅延されない。第2の命令の実行が第1の命令の実行に依存する場合には、転送パス312を用いて、第1の命令からの結果を第2の命令に転送することができる。図示される転送パス312は単なる例示であり、コア114は、実行ユニット310の異なるポイントから他の実行ユニット310又は同じ実行ユニット310までの、より多くの転送パスを含むこともできる。
1つの実施形態においては、実行ユニット310によって実行されていない命令は、遅延キュー320又はターゲット遅延キュー330に保持することができる。遅延キュー320は、命令グループのうちの実行ユニット310によってまだ実行されていない命令を保持するのに用いることができる。例えば、命令I0が実行ユニット310において実行されている間は、命令I1、I2、及びI3を遅延キュー320に保持することができる。命令が遅延キュー320の中を移動し終わると、その命令を適切な実行ユニット310に発行して実行することができる。ターゲット遅延キュー330は、実行ユニット310によって既に実行済みの命令の結果を保持するのに用いることができる。ターゲット遅延キュー330の中の結果は、処理又は無効化するために、適宜、実行ユニット310に転送される場合もある。同様に、以下で説明されるように、状況によっては、遅延キュー320の中の命令が無効化される場合もある。
1つの実施形態においては、命令グループの命令の各々が遅延キュー320、実行ユニット310、及びターゲット遅延キュー330を通過した後で、レジスタ・ファイルか、又は、L1 I−キャッシュ222及び/又はD−キャッシュ224のどちらかに、結果(例えば、データ、及び、以下で説明されるように、命令)を書き戻すことができる。レジスタの最新の修正値を書き戻し、無効化された結果を廃棄するために、書き戻し回路306が用いられる場合もある。
ロード−ストア命令についてのデータを転送するための実効アドレスの使用
本発明の1つの実施形態は、ロード−ストア競合を解決するための方法を提供する。本方法は、第1のパイプラインにおけるロード命令の実効アドレスが第2のパイプラインにおけるストア命令の実効アドレスと一致するかどうかを判定することを含む。ストア命令の実効アドレスとロード命令の実効アドレスとが一致した場合には、ストア命令からのデータは、ロード命令を含むパイプラインに投機的に転送される。実効アドレスの比較が実施された後で転送が行われる場合もある。必要に応じて、実効アドレスの比較が完了する前に転送を行うこともできる。1つの実施形態においては、転送は、最初にロード実効アドレス及びストア実効アドレスを実アドレスに変換することなく、行うことができる(例えば、実効アドレスが、ストア・データをロード命令に転送するかどうかを判定するための唯一の根拠となる場合がある)。
実効アドレスの比較が、ロード命令とストア命令とが同一の実効アドレスを有することを示した場合には、ストア命令からのデータは、ロード命令についてのデータと統合される。また、以下で説明されるように、ストア・データをロード・データと統合する前に、ストア命令データについての実アドレスの一部が、ロード命令データについての実アドレスの一部と比較される場合もある。このような一部は、例えば、対応する実効アドレスと共にD−キャッシュ・ディレクトリ225にストアすることができる。ロード命令の実行中に、ロードされるデータがD−キャッシュ224に配置されているかどうかを判定しながら、D−キャッシュ・ディレクトリ225にアクセスすることができる。
ストア・データがロード・データと統合された後で(アドレスの比較が一致を示したと仮定する)、ロード命令についてのデータは、フォーマットされ、レジスタに置くことができる。ロード命令とストア命令が競合するかどうかを判定するのに、パイプラインにおいて(例えば、実アドレスではなく)実効アドレスが用いられるため、ロード命令及びストア命令についての実効アドレスの比較は、従来のパイプラインよりも高速に(例えば、アドレス比較を行うために実効アドレスから実アドレスへの変換を必要とするパイプラインと比べてより高速に)行うことができる。また、ストア命令についてのデータを、ロード命令を含むパイプラインに投機的に転送することによって、実効アドレスから実アドレスへの変換の結果(実効アドレスの比較の結果の場合もある)を直ちに取得して、転送が必要かどうかを判定する必要がなくなる。
図4は、本発明の1つの実施形態による、ロード−ストア競合を解決するためのプロセス400を示すフロー図である。プロセスは、実行されるロード命令及びストア命令が受信されるステップ402において開始することができる。ステップ404において、ロード命令についての実効アドレスとストア命令についての実効アドレスとを計算することができる。次いで、ステップ406において、ロード命令及びストア命令についての実効アドレスが比較され、一方で、ストア命令によってストアされるデータについてのレジスタ・ファイル読み取りが始められ、ロードされるデータについての要求がD−キャッシュ224に送信される。ステップ408において、ストアされるデータをレジスタ・ファイル240から受信し、ストア命令を実行するパイプラインからロード命令を実行するパイプラインに投機的に転送することができ、その間に、ロードされるデータをD−キャッシュから受信することができる。ステップ410において、受信されたロード・データをフォーマットすることができ、一方で、ロード実効アドレスがストア実効アドレスと一致することを比較が示すかどうかの判定が行われる。ステップ412において、ロード実効アドレスがストア実効アドレスと一致する場合には、転送されたストア・データをロード・データと統合することができる。ロード実効アドレスがストア実効アドレスと一致しない場合には、転送されたストア・データを廃棄し、D−キャッシュ224から受信されたロード・データを用いることができる。ステップ414において、ロード命令及びストア命令は、実行を終了することができる。
本発明の1つの実施形態においては、ロード命令及びストア命令は、別個のパイプラインにおいて実行することができる。また、ロード命令は、ストア命令後1つ又は複数のクロック・サイクルで実行される場合もある。ロード命令がストア命令後1つ又は複数のクロック・サイクルで実行される場合には、上述されたアクション(例えば、ロード実効アドレスとストア実効アドレスとの比較)は、適切な情報(例えば、実効アドレス)が解決されるとすぐに行うことができる。
上述されたように、本発明の1つの実施形態においては、ロード実効アドレスの全体とストア実効アドレスの全体とを互いに比較することができる。必要に応じて、ロード実効アドレスの一部のみとストア実効アドレスの一部のみとを比較することもできる。例えば、アドレスの高位ビット部分、低位ビット部分、又は中間ビット部分を比較することもできる。比較を行うのに必要以上のクロック・サイクル数を必要とせず、ストア命令からロード命令にデータを転送する及び/又は統合するかどうかを判定するのに十分な時間をプロセッサ110に与えることができるように、アドレスの一部のみを比較する場合もある。
2つの異なる実効アドレスが同一の物理アドレスを指す場合もある。2つの異なる実効アドレスが同一の物理アドレスを指す場合には、実効アドレスの比較は、ストア命令と競合するロード命令を正確に特定できないことがある。このような状況が生じる場合には、曖昧でない(例えば、異なる物理アドレスについて常に異なる)実効アドレスの一部を比較して、ロード−ストア競合が生じているかどうかを判定することができる。比較を完了するために、ロード命令及びストア命令について物理アドレスの一部を比較することができる。実効アドレスの一部と物理アドレスの一部の両方が一致した場合には、ロード−ストア競合が存在することになり、ストア命令からのデータを転送してロード命令と統合することができる。物理アドレスの一部を取得するために、実効アドレスをインデックスとして用いて、ロード命令及びストア命令についての物理アドレスの一部を取り出すことができる。1つの実施形態においては、ロード命令及びストア命令についての物理アドレスの一部は、D−キャッシュ・ディレクトリ225にストアされ、そこから取得されることがある。また、以下で説明されるように、ストアされた命令についての物理アドレスは、ストア・ターゲット・キュー、実効アドレス−実アドレス変換テーブル(ERAT)、又は他のいずれかの適切な場所にストアすることもできる。
本発明の1つの実施形態においては、ロード命令がストア命令と競合するかどうかの判定は、ロード実効アドレスの一部とストア実効アドレスの一部とを比較すること、及び、各々の実効アドレスがどのページを(例えば、キャッシュ内のどのページを)指しているかを示す、ロード・データ及びストア・データについてのページ番号を比較することによって、行われる。例えば、実効アドレスの低位ビットは、ページ内の場所を一意的に特定することができ、ページ番号は、各々の実効アドレスがどのページを参照するかを一意的に特定することができる。
本発明の1つの実施形態においては、各々の実効アドレスについてのページ番号(PN)は、実効アドレスをキャッシュ(例えばL2キャッシュ112)に含まれる実アドレスにマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)において追跡することができる。より高いレベルのキャッシュ及び/又はメモリからデータ・ラインが取り出され、このキャッシュに置かれる度に、TLBに1つのエントリを追加することができる。ページ番号を保持するために、TLBは、各々のエントリについてのエントリ番号を保持することができる。各々のエントリ番号は、そのエントリによって参照されるデータを含むキャッシュ内のページに対応することができる。
プロセッサによって使用される実効アドレスが、対応するエントリをTLB内に持たない場合もある。例えば、計算された実効アドレスが、キャッシュに含まれておらず、したがって対応するエントリを持たないメモリをアドレス指定することがある。このような場合には、ページ番号妥当性ビット(PNV)を用いて、所与の実効アドレスについて妥当なページ番号が存在するかどうかを判定することができる。ロード命令及びストア命令によって使用される実効アドレスについて妥当性ビットが設定される場合には、競合が存在するかどうかを判定するために、実効アドレスの一部に加えて、ロード命令及びストア命令についてのページ番号を比較することができる。逆に妥当性ビットが設定されない場合には、ページ番号は比較しなくてよい。ロード命令、ストア命令、又はその両方についてページ番号妥当性ビットが設定されない場合には、どちらかの命令についてのデータがキャッシュされていないことがあるので、ロード−ストア競合は存在しない可能性がある。このように、ロード命令及びストア命令が同一のデータを参照するが、参照されたデータがキャッシュされていないということが生じた場合には、データがフェッチされD−キャッシュ224に置かれたときに、プロセッサ・コア114をフラッシュして命令を再発行することなく競合を解決することができる。
各々のロード実効アドレス及びストア実効アドレスについてのページ番号は、多くの方法で与えることができる。例えば、データがより高いレベルのキャッシュから(例えば、データ・ラインとして)取り出されるときには、ページ番号をデータ・ラインと共に伝送することができ、そのデータ・ラインについてのページ番号を必要に応じてプロセッサ・コア114によって判定することが可能になる。ページ番号は、D−キャッシュ224におけるエントリを追跡するD−キャッシュ・ディレクトリ225にストアされる場合もある。ページ番号は、その目的のために設計された専用のキャッシュなどの他のいずれかの都合のよい場所にストアするか、又は、ストア・ターゲット・キューにストアすることができる。各々のページ番号と共に、ページ番号が妥当なTLBエントリを参照するかどうかを示すページ番号妥当性ビットをストアすることもできる。
本発明の1つの実施形態においては、ストア・データは、ロード命令が実行されているパイプラインに常に転送することができる。必要に応じて、ストア・データは、ロード命令の実効アドレスとストア命令の実効アドレスとが一致する場合にのみ、転送される場合もある。実効アドレスの一部のみの比較が行われる、及び/又は、物理アドレスの一部の比較が後で行われるといった他の場合においては、実効アドレスの一部の比較を用いて、ストア・データを転送するかどうかを判定し、一方で、物理アドレスの一部の比較を用いて、転送されるデータをロード命令についてのデータと統合するかどうかを判定することができる。
本発明の1つの実施形態においては、実効アドレスの比較を用いて、データを受信することができる複数の転送パスのうちの1つを選択することができる。各々の転送パスは、複数のパイプラインのうちの1つから入って来るものとすることができ、所与のパイプラインにおける複数ステージのうちの1つから入って来るものとすることもできる。転送パスは、以下で説明されるようにストア・ターゲット・キューなどの他の回路から入って来ることもある。
転送パスが複数のパイプラインから与えられる場合には、複数のパイプラインの各々において、ロード命令の実効アドレス及びストア命令の実効アドレスがあればそれらの間で(又は、アドレスの一部の間で)、実効アドレスの比較を行うことができる。実効アドレスの比較のいずれかが、パイプラインの1つにストアされているデータの実効アドレスがロードされているデータの実効アドレスと一致することを示した場合には、一致した実効アドレスを持つストア命令を含むパイプラインからのデータを選択し、ロード命令を含むパイプラインにそれを転送することができる。複数のパイプラインからの複数の実効アドレスが、ロード命令の実効アドレスと一致した場合には、実行された最新のストア命令からのストア・データ(したがって直前のデータ)を選択し、ロード命令を含むパイプラインにそれを転送することができる。
転送パスが単一のパイプラインの複数のステージから与えられる場合には、複数のステージの各々におけるストア命令の実効アドレスは(これがある場合には)、ロード命令の実効アドレスと比較することができる。パイプライン・ステージにおけるストア命令の実効アドレスのいずれかが、ロード命令の実効アドレスと一致した場合には、一致する実効アドレスを持つストア命令についてのストア・データを、ストア命令と共に、パイプラインの適切なステージからロード命令を含むパイプラインに転送することができる。1つのパイプラインの複数のステージにおける複数のストア命令が、ロード命令の実効アドレスと一致する実効アドレスを有する場合には、実行された最新のストア命令からのストア・データ(したがって、直前のデータ)のみを、ストア命令を含むパイプラインからロード命令を含むパイプラインに転送することができる。比較及び転送が、複数のパイプラインの複数のステージについて行われる場合もあり、その場合の比較は、転送パスを持つ各々のパイプラインの各々のステージについて行われる。
また、上述されたように、データが、ストア・ターゲット・キューからロード命令を含むパイプラインに転送される場合もある。例えば、ストア命令が実行されるときに、ストア命令についてのデータをレジスタ・ファイル240から読み取ることができ、ストア・データが書き込まれるストア・ターゲット・アドレス(例えば、実効アドレスを用いて特定することができるメモリ位置)を決定するために、ストア命令についてアドレス生成を行うことができる。次いで、ストア・データ及びストア・ターゲット・アドレスは、ストア・ターゲット・キューに置くことができる。以下で説明されるように、その後のロード命令の実行の際に、ストアされたキュー・データのいずれかがロード命令についてのロード実効アドレスと一致する実効アドレスを有するかどうかの判定を行うことができる。ストア・ターゲット・キューにおいてロード命令の実効アドレスと一致する実効アドレスを持つエントリの各々について、実行された最新のストア命令についてのストア・データ(したがって、直前のデータ)を選択することができる。実行された最新のストア命令(例えば、パイプラインにおいてまだ実行されているストア命令)からのストア・データが利用不可能の場合には、ストア・ターゲット・キューの中の一致する最新のエントリについてのストア・データを、ストア・ターゲット・キューからロード命令を含むパイプラインに転送することができる。また、ロード命令及びストア命令についての実効アドレスの一部のみを用いて、ロード命令及びストア命令が同一のアドレスにおけるデータにアクセスしているかどうかを判定する幾つかの場合においては、ストア命令についての物理アドレスの一部をストア・ターゲット・キューにストアし、これを用いて、同一の実効アドレスに位置するデータにアクセスするためにロード命令及びストア命令についての異なる実効アドレスが用いられているかどうかを判定することができる。
図5は、本発明の1つの実施形態による、ストア命令からのデータをロード命令に転送するための転送パス550、552を持つ、例示的な実行ユニット310、310を示す。転送されるデータが、実行ユニット310において実行されているストア命令から入って来る場合もある(ホット転送と呼ばれる)。必要に応じて、転送されるデータは、実行ユニット310における実行を完了したストア命令についてのエントリを含むストア・ターゲット・キュー540から入って来ることもある(コールド転送と呼ばれる)。ストア・ターゲット・キュー540は、ストア命令によってストアされているデータを保持するのに用いることができる。ストア・ターゲット・キュー540のデータは、典型的には、D−キャッシュ224に書き戻されることになっているが、データ書き戻しの際のD−キャッシュ224の帯域幅が限定されているために直ちに書き戻すことができないデータである。1つの実施形態においては、ストア・ターゲット・キュー540は、キャッシュ・ロード及びストア回路250の一部とすることができる。実行ユニット310において実行されているストア命令は、ストア・ターゲット・キュー540に入っているデータと比べてより最近更新されたストア・データを与えるため、実行ユニット310とストア・ターゲット・キュー540の両方が、ロード命令と競合するストア命令を含んでいる場合には、正確なデータがロード命令によって受信されるように、最新の更新されたストア・データ310を選択してロード命令に転送することができる。ストア・ターゲット・キューが複数の一致するエントリ(例えば、ロード命令と競合するかもしれない複数のストア命令)を含む場合には、選択回路542を用いて、ロード命令データとして転送される適切なエントリをキュー540から選択することができる。
図示されるように、転送パス550、552、554は、ストア・ターゲット・キュー540から実行ユニット310のステージ536に転送するために、又は、実行ユニット310の1つのステージ514から別の実行ユニット310の別のステージ536に転送するために、設けることができる。しかしながら、図5に示される転送パスは例示的な転送パスであることに留意されたい。より多くの転送パス又はより少ない転送パスを設けることもできる。転送パスは、各々の実行ユニットの他のステージについて設けることができ、所与の実行ユニット310、310からそれぞれ同じ実行ユニット310、310に戻るように設けることもできる。実行ユニット310におけるストア命令の実行及び実行ユニット310におけるロード命令の実行は、実行ユニット310、310における各ステージに関して以下で説明される。
実行ユニット310、310における各々の命令の実行は、例えばロード命令及びストア命令の実行に用いられるデータ及び/又はアドレスを取得するためにレジスタ・ファイル240がアクセスされる、(RF1及びRF2と呼ばれる)最初の2つのステージ502、504、522、524で開始することができる。次いで、各々の実行ユニット310、310の第3のステージ506、526において、アドレス生成ステージ(AGEN)を用いて、命令の各々についての実効アドレス(EAX)を生成することができる。
図示されるように、ストア命令についてのソース・レジスタ(SR)値(例えば、ストアされているデータのソース)をロード命令についてのターゲット・レジスタ(TR)値(例えば、ロードされているデータのターゲット)に転送する転送パス554が設けられる場合もある。このような転送は投機的なものであり、例えば、転送されたデータは、実際にはロード命令によって用いられないこともある。転送されたデータは、例えば、ストア命令の実効アドレスがロード命令の実効アドレスと一致するという判定が行われた場合に用いることができる。また、以下で説明されるように、他のアドレス比較を利用することもでき、データを転送できるかどうかは、ストアされているデータとロードされているデータとの整合性に依存するものとすることができる。
実行ユニット310、310の各々の第4のステージ508、528において、(例えば、ロード命令及びストア命令によって)アクセスされているデータがD−キャッシュ224にあるかどうかを判定するために、D−キャッシュ・ディレクトリ225(DIR0)へのアクセスを始めることができる。上述されたように、D−キャッシュ・ディレクトリ225にアクセスすることによって、ロード命令及びストア命令が同一のデータにアクセスしているかどうかを判定する際に用いるために、物理アドレスのビットを取得する場合もある。また、第4のステージ中に、実効アドレス(又は、実効アドレスの一部)の比較を行うこともできる。上述されたように、実効アドレスの比較を利用して、データを転送するのにどの転送パス(例えば、550、552)が用いられるべきかを判定することができる。
第5のステージ510、530において、ロード命令及びストア命令についての物理アドレス・ビットをD−キャッシュ・ディレクトリ225から受信することができる(DIR1→PAX)。次いで、第6のステージ512、532において、受信された物理アドレス・ビットの比較を行うことができる(PA CMP)。実行ユニット3100の第7のステージにおいて、転送パス550を介して、又はストア・ターゲット・キュー540から転送パス552を介して、ストア命令についてのデータをロード実行ユニット310投機的に転送することができる。ロード実効アドレスとストア実効アドレスが一致するという判定が行われた後で、転送パス550を用いてストア・データをロード命令に転送することができる。必要に応じて、上述されたように、転送されたデータを別の転送パス554を介して以前の転送から受信し、その後、転送されたデータを統合するかどうかを判定する前にアドレス比較を行ってもよい。適切な転送パス550、552の選択は、例えば、実行ユニット310、310におけるロード命令の実効アドレスとストア命令の実効アドレスとの間の比較、及び、ストア・ターゲット・キュー540におけるデータの実効アドレス間の比較の結果に基づいて、行うことができる。前述されたように、選択回路542を用いて、ロード実効アドレスがストア・ターゲット・キュー540におけるデータのいずれかの実効アドレスと一致するかどうかを判定することができる。また、実行ユニット310の第7のステージ534において、ロードされているデータ(例えば、D−キャッシュ224から受信されたデータ)のフォーマットを行うことができる。
ロード命令についての実行ユニット310の第8のステージにおいて、統合操作を行うことができる。実効アドレスと物理アドレスの比較が、ロード命令とストア命令が同一のデータにアクセスしていることを示した場合には、ストア命令を処理する実行ユニット310から投機的に転送されたデータを統合し、ロードされているデータとして用いることができる。必要に応じて、実効アドレスと物理アドレスの比較が、ロード命令とストア命令が異なるデータにアクセスしていることを示した場合には、投機的に転送されたデータを廃棄し、D−キャッシュ224から受信されたロード・データをロード命令データとして用いることができる。図示されるように、ロード命令及びストア命令の実行を完了するための操作を行うために、他のステージ516、518、538を設けることもできる。
図6は、本発明の1つの実施形態による、プロセッサ・コア114においてロード−ストア競合を解決するのに利用することができるハードウェアを示すブロック図である。図示されるように、ハードウェアは、アドレス生成(AGEN)回路610を含むことができる。AGEN回路610は、実効アドレス比較回路(EA CMP)612を用いてストア命令についての実効アドレスと比較される、ロード命令についての実効アドレスを生成することができる。実効アドレスの比較を用いて、ロード・データがどのようにフォーマットされ統合されるかを判定することができ、どのストア・データ(例えば、実行ユニット310におけるストア命令からのデータ、又は、ストア・ターゲット・キュー540からのデータ)がロード命令に転送されるかを判定することもできる。フォーマットは、フォーマット回路616によって行うことができ、転送されるデータの選択は、実効アドレス比較の結果に基づいて転送選択回路(FWD選択)606を用いて行うことができる。また、図示されるように、物理アドレス比較回路を用いて、(例えば、ロード命令、実行ユニット310において実行されているストア命令、及び/又は、ストア・ターゲット・キュー540におけるエントリからの)物理アドレス・ビットを比較し、統合回路618を用いてロード命令からのデータとストア命令からのデータとを統合するかどうかを判定することができる。
上述されたように、ストア命令からロード命令にデータを転送するかどうかの判定において、ストア・ターゲット・キュー540におけるエントリが、ロード命令の実効アドレス及び/又は物理アドレスと一致する実効アドレス及び/又は物理アドレスを有するかどうかの判定を行うことができる。ストア・ターゲット・キュー540におけるエントリのアドレスと、ロード命令のアドレスとが一致し、ストア・ターゲット・キュー540にエントリが置かれてから他の競合するストア命令が実行されていない場合(例えば、他の競合するストア命令がまだ実行ユニット310において実行されていない場合)には、ストア・ターゲット・キュー540は、一致するアドレスについて最新の更新されたデータを含んでいる場合がある。
ストア・ターゲット・キュー540における複数のアドレスがロード・アドレスと一致する場合には、ストア・ターゲット・キュー540における最新の更新されたエントリ(例えば、一致する実効アドレスについての最も新しいデータを含むエントリ)の判別を行うことができる。例えば、ストア・ターゲット・キュー540における転送可能なエントリの各々について、そのエントリの実効アドレスをロード実効アドレスと比較することができる。ストア・ターゲット・キュー540において、例えば34個のエントリが存在する場合には、34通りの比較について回路602を使用することができる。
次いで、一致する可能性があるエントリの各々について、どのエントリが最も若く、したがって最新の更新されたストア・データを含むかについて、判定を行うことができる。最も若いエントリの判定は、例えば、34通りの優先順位を判定する回路604を用いて行うことができる。ストア・ターゲット・キュー540にストアされたデータ(例えば、タイムスタンプ)を利用して、ストア・ターゲット・キュー540においてどの一致するエントリが最も若いかを判定する場合もある。次いで、選択回路542は、ストア・ターゲット・キュー540における最も若い一致するエントリを選択し、そのエントリを、上述されたようにストア・ターゲット・キュー540から転送されたデータと実行ユニット310から転送されたデータとの間で選択することができるFWD選択回路606に与えることができる。
選択回路542は、ロード命令及びストア命令の物理アドレス(又はその一部)が一致するかどうかを判定するのに用いるために、物理アドレスのビット又はページ番号を与えることができる。ページ番号が使用される場合には、そのページ番号が妥当であるかどうか(例えば、実効アドレスによって参照されるデータが実際にメモリ内のページに位置するかどうか)を示すビットが設けられる場合もある。ページ番号が妥当でない場合には、例えばストアされているデータが現在キャッシュされていないことがあるため(例えば、ストア・ミスが生じることがあり、その場合には転送は必要ではないことがある)、そのページ番号は、ロード命令とストア命令との比較のために利用されることはない。
図7は、本発明の1つの実施形態による、ストア・ターゲット・キュー540におけるロード命令アドレスについて、一致する最も若いエントリを判別するための選択ハードウェアを示すブロック図である。選択ハードウェアは、ストア・ターゲット・キュー540におけるエントリの実効アドレスをロード実効アドレス(ロードEA)と比較するための複数の比較回路602、602、...60234を含むことができる。また、上述されたように、選択ハードウェアは、優先順位回路604と選択回路542とを含むことができる。
用いられているプロセッサの能力によっては、選択ハードウェアが、ストア命令からロード命令へのデータの転送を行うことができるかどうかを示す制御信号を与える場合もある。例えば、複数の非整合のロード・ストア競合ヒットが検出される場合である(複数ヒット検出回路702、ANDゲート710、及びANDゲート712を用いて判定される)。また、非整合のロード−ストアの組み合わせが検出された場合には、ストア・レジスタ・ターゲットからロード・レジスタ・ソースへの転送が可能になる(ANDゲート710及びNOTゲート714を用いて判定されたRT−RS転送可能)。
図8は、本発明の1つの実施形態による、ストア命令から転送されたデータをロード命令についてのデータと統合するための統合ハードウェアを示すブロック図である。図示されるように、D−キャッシュ224からのデータは、バンク・データとワード・データとを適宜に整合させるバンク/ワード整合回路810を通過させることができる。整合されたデータは、次いで、フォーマット回路606を用いてフォーマットすることができる(フォーマットは、データのサインを拡張することを含めてもよい)。例えばストア・ターゲット・キュー読み取りポート802から受信されたデータに関して、受信されたデータをロード命令についてのデータと組み合わせる準備として、必要に応じてデータを循環させることができる。
ロード命令とストア命令とを組み合わせるために、マスク生成回路812によってマスクを生成し、マスクは、ANDマスク回路806、814を用いて、フォーマットされたロード・データ及びストア・データと組み合わせることができる。マスクは、例えば、ロード・データ及び/又はストア・データのうちの、ロード命令によって必要とされない部分をブロックすることができる。例えば、ロード・データの一部のみがストア・データの一部のみと組み合わされる場合には、生成されたマスクがロード・データ及びストア・データの使用されない部分をブロックすることができ、ロード・データ及びストア・データの残りの部分が組み合わされる。1つの実施形態においては、ロード・データ及びストア・データは、OR回路820と組み合わせることができる。一般に、統合回路618は、ロード・データをストア・データで完全に置換するか、ロード・データの高位のビットをストア・データで置換するか、ロード・データの低位のビットをストア・データで置換するか、及び/又は、ロード・データの中央のビットをストア・データで置換するように構成することができる。
物理アドレスのビットと実効アドレスのビットとの完全な比較は、例えばロード命令及びストア命令がまだ実行されている間は、プロセッサ110によって直ちに行われない場合もある。したがって、ロード命令及びストア命令が実行された後のある時点において、ロード命令とストア命令とが実際に互いに競合するかどうかを完全に判定するために、検証ステップを行うことができる。検証ステップは、ロード・データ及びストア・データについての完全な物理アドレスを求めるために、変換ルックアサイド・バッファ(TLB)にアクセスすることを含むことができる。検証ステップが、ロード命令とストア命令とが実際には同一のデータにアクセスしていないことを示した場合には、(例えば、ストア・ターゲット・キュー540、ターゲット遅延キュー330、又は命令によって影響を受ける他の領域から、データを一括消去することによって)ロード命令とストア命令の効果を反転し、その後、ロード命令及びストア命令を再発行してプロセッサ・コア114によって正確に実行できるように、実行された命令をプロセッサ・コア114から一括消去することができる。
ロード命令及びストア命令の実行をスケジューリングするためのロード−ストア競合情報の使用
ロード命令とストア命令との間で転送が不可能な場合がある。例えば、プロセッサ・コア114の設計が、転送が必要となる可能性がある全ての状況を網羅するリソースを転送パスに充てないことがあり、実行における考慮事項(例えば、コア114によって処理されているデータの一貫性を維持すること)によって転送が禁止される場合もある。他の場合には、転送は行われるが、上述されたように、競合するストア命令の数及び/又はロード・データとストア・データとの整合性によって、ストア命令からロード命令へのデータの効率的な転送が妨げられることもある。転送が使用されない場合には、競合するロード命令とストア命令の適切な実行のために、プロセッサ110は、実行を停止するか、又は、コア114において実行されている命令を一括消去することもできる。ロード−ストア競合が、命令の停止又は再実行をもたらす場合には、上述されたようにプロセッサの効率が影響を受ける。
本発明の1つの実施形態においては、ロード−ストア競合を検出し、ストア命令と競合するロード命令を示す1つ又は複数のビットをストアすることができる。競合する可能性があるロード命令及びストア命令を示す情報は、ロード−ストア競合情報と呼ぶことができる。ロード命令及びストア命令が実行されるようにスケジューリングされているときに、ロード−ストア競合情報が、(例えば過去の競合に基づいて)ロード命令とストア命令とが競合する可能性があることを示す場合には、競合が生じないようにロード命令の実行をスケジューリングすることができる。例えば上述された実施形態又は当業者には公知の他のいずれかの転送の実施形態を用いて、ロード命令からストア命令への転送を利用することができるようにロード命令を実行することができる。必要に応じて、ロード命令の実行は、競合が生じず、したがってストア命令からロード命令へのデータの転送が利用されないように、(以下でより詳細に説明されるように)ストア命令の実行に対して遅延させることができる。
図9は、本発明の1つの好ましい実施形態による、ロード命令及びストア命令の実行をスケジューリングするためのプロセス900を示すフロー図である。図示されるように、プロセス900は、実行される命令のグループが受信されるステップ902で開始することができる。ステップ904において、ロード−ストア競合情報(以下でより詳細に説明される)が、命令グループ内のロード命令とストア命令とが競合し得ることを示しているかどうかについて、判定が行われる。
ロード−ストア競合情報が、ロード命令とストア命令とが競合する結果となることを示していない(例えば、過去に競合が存在しなかった)場合には、ステップ906において、命令をデフォルト発行グループに置き、プロセッサによって実行させることができる。しかしながら、ロード−ストア競合情報が、ロード命令とストア命令とが競合し得ることを示す場合には、ステップ908において、ロード命令及びストア命令は、ロード命令及びストア命令が競合する結果とならないように実行するためにスケジューリングすることができる。次いで、ステップ910において、ロード命令及びストア命令を発行し、実行することができる。プロセス900は、ステップ912において終了することができる。
本発明の1つの実施形態においては、(例えば、ロード−ストア競合情報に基づく)ロード命令とストア命令との間の予測される競合は、ロード命令の実行をストア命令の実行に対して遅延させることによって、解決することができる。ロード命令の実行を遅延させることによって、(例えば、転送パスを介して、又は、ストア・ターゲット・キュー540から)ストア命令の結果をロード命令に転送することを成功させるか、又は、ストア命令の結果を用いてD−キャッシュ224を更新し、ロード命令が更新された要求データをD−キャッシュ224からロードするのを成功させることができるようになる。
本発明の1つの実施形態においては、ロード命令の実行は、ロード命令の実行を停止することによってストア命令の実行に対して遅延させることができる。例えば、ロード−ストア競合情報が、ロード命令がストア命令と競合し得ることを示すときには、ストア命令の実行が完了されるまでの間、ロード命令を停止することができる。必要に応じて、ロード命令とストア命令との間で1つ又は複数の命令を実行し、それにより、不適切なロード命令の実行を効果的に防止しつつ、プロセッサ使用率を向上させることができる場合もある。ロード命令とストア命令との間で実行される命令は、順序がばらばらに(例えば、プログラムに現れる順序と異なる順序で)実行される命令とすることもできる。
ロード命令及びストア命令がカスケード型遅延実行パイプライン・ユニットに発行される方法を用いて、ロード命令及びストア命令の適切な実行を可能にすることができる。例えば、ロード−ストア競合情報が、ロード命令とストア命令とが競合し得ることを示す場合には、ロード命令及びストア命令は、一方の命令の実行を他方に対して遅延させることによって競合を解決するように、共通発行グループの形でカスケード型遅延実行パイプラインに発行することができる。
図10Aは、本発明の1つの実施形態による、共通発行グループ1002の形でロード命令及びストア命令をスケジューリングすることを示す図である。図示されるように、ロード命令及びストア命令は、共通発行グループ1002に置かれ、プロセッサ・コア114の別個のパイプライン(例えば、P0及びP2)に同時に発行することができる。ストア命令は、ロード命令が実行されるパイプライン(P2)に対して実行が遅延されない(又は遅延が少ない)パイプライン(P0)に発行することができる。ロード命令を遅延実行パイプラインに置くことによって、上述されたように、ロード命令の実行を遅延させることができる。例えば、ロード命令の実行の遅延によって、ストア命令の結果を(転送パス1004を介して)ロード命令に転送できるようになり、それにより、不適切なロード命令の実行を回避することができる。ストア命令が実行されている間、ロード命令は遅延キュー320に保持されるため、ロード命令が発行されるパイプラインP2についての実行ユニット310をそのまま用いて、以前に発行された他の命令を実行することができ、それにより、プロセッサ110の全体的な効率は増大する。
ロード−ストア競合情報が、ロード命令がストア命令と競合することを示す場合に、不適切な命令の実行を防止するために、ロード命令及びストア命令を同じパイプラインに発行する場合もある。図10Bは、本発明の1つの実施形態による、同一のパイプライン(例えばP0)へのロード命令及びストア命令のスケジューリングを示す図である。図示されるように、ロード命令及びストア命令は、別個の発行グループ1006、1008の形で、同一のパイプライン(P0)に発行することができる。ロード命令及びストア命令を同一のパイプラインに発行することによって、ロード命令の実行をストア命令の実行に対して遅延させることができる。ロード命令の実行を遅延させることによって、ストア命令からのデータを、例えばストア命令からロード命令に(例えば転送パス1010を介して)転送することができる。ロード命令及びストア命令は、他のパイプライン(例えばP1、P2、又はP3)にスケジューリングすることができ、又は必要に応じて、遅延量の等しい異なるパイプラインにスケジューリングすることもできる(例えば、別のパイプラインP4の遅延がパイプラインP0の遅延と等しい場合には、ロード命令又はストア命令は、パイプラインP0又はP4のどちらかにおいて、順番に実行されるようにスケジューリングすることができる)。
上述されたようにロード命令及びストア命令の実行をスケジューリングするために、本来であればロード命令及びストア命令が置かれる発行グループ(例えば、デフォルト発行グループ)を修正する場合もある。例えば、発行グループは、一般に、各々のパイプラインに発行される単一の命令(例えば、P0、P1、P2、P3のそれぞれに発行される4つの命令)を含むことができる。しかしながら、上述されたようにロード命令及びストア命令を発行するために(例えば、共通発行グループの形で、又は、別個の発行グループの形で同一のパイプラインに)、3つ以下の命令が発行される発行グループを作成することもできる。
異なる実行ユニット310が異なる機能を提供する場合もある。例えば、実行ユニット310及び310がロード/ストア機能を提供し(したがって、ロード命令及びストア命令を実行するために用いられる)、実行ユニット310及び310が演算能力及び論理能力を提供する(したがって、演算命令及び論理命令を実行するために用いられる)こともできる。したがって、ロード−ストア競合情報が、ロード命令とストア命令とが競合し得ることを示すときには、ロード命令及びストア命令の実行を適切にスケジューリングするために、(上述された)スケジューリングの選択肢を機能の制約と併せて用いることができる。例えば、図10Aに示されるように、ストア命令はロード命令と共に共通発行グループの形で発行することができ、発行グループ内で、ストア命令をパイプラインP0に発行し、ロード命令をパイプラインP2に発行することによって、スケジューリングの要件と共に機能の制約を満たすことができる。必要に応じて、プロセッサ・コア114内のパイプラインP0、P1、P2、P3の各々が、ロード命令又はストア命令及び他の命令を実行するのに必要な機能を提供する場合もある。
本発明の1つの実施形態においては、単一のロード−ストア実行ユニット310をプロセッサ・コア114に設け、ストア能力を提供する他の実行ユニットをコア114に持たせないようにすることができる。プロセッサ・コア114における2つ、3つ、若しくはそれ以上の実行ユニット又は実行ユニットの各々が、ロード能力を提供することもある。単一のロード−ストア実行ユニット310が設けられる場合には、ロード能力を有する他の実行ユニットは、上述された実施形態により(例えば、実効アドレス比較を用いて)単一のロード−ストア実行ユニット310から転送されたストア情報を受信することができる。
1つの実施形態においては、単一のロード−ストア実行ユニット310と他の実行ユニットとの間でロード−ストア転送が行われないように、コア114に単一のロード−ストア実行ユニット310を設けることができる。単一のロード−ストア実行ユニット310が設けられる場合には、検出された全てのロード−ストア競合(例えば、実行中に検出されたロード−ストア競合、又は、プリデコード中に検出されたロード−ストア競合)を、単一のロード−ストア実行ユニット310に発行することができる。検出された全てのロード−ストア競合を単一のロード−ストア実行ユニット310にスケジューリングするために、必要なスケジューリングを容易にするように幾つかの発行グループを複数のグループに分割することができる。1つの実施形態においては、単一のロード−ストア実行ユニット310は、(例えば、2つのダブルワードが一度にストアされる、即ち単一のクワッドワードとなるように)ダブルワイド・ストアの選択肢を提供することができる。ダブルワイド・ロード−ストア実行ユニット310を用いて、例えば、レジスタ・ファイル240について保存/復元機能を行うことができる。
ロード−ストア競合情報の実施形態
上述されたように、(例えば、ロード命令及びストア命令の実行中に)ロード−ストア競合が検出された場合には、競合を示すロード−ストア競合情報をストアすることができる。本発明の1つの実施形態においては、ロード−ストア競合情報は、競合を示す単一のビット(LSC)を含むことができる。ビットが設定された場合には競合が予測され、ビットが設定されない場合には競合が予測されないことになる。
ロード命令及びストア命令が後に実行され、命令が競合を生じさせない場合には、LSCをクリアして0とし、それ以降は命令が競合を生じさせないことを示すようにすることができる。必要に応じて、LSCを1に設定したままとし、それにより、命令を実行することが別のロード−ストア競合を生じさせる可能性があることを示してもよい。
本発明の1つの実施形態においては、複数の履歴ビット(HIS)を用いて、ロード命令とストア命令とが競合を生じさせることになるかどうかを予測し、実行するために命令をどのようにスケジューリングすべきかを決定することができる。例えば、HISが2つのバイナリ・ビットの場合には、00をロード−ストア競合が予測されないことに対応させることができ、一方、01、10、及び11は、それぞれ、ロード・ストア競合の弱い予測、強い予測、及び非常に強い予測に対応させることができる。ロード命令及びストア命令がロード−ストア競合を生じさせる度に、HISの値を増加させて、ロード−ストア競合の予測レベルを高くすることができる。HISが11であり、その後にロード−ストア競合が検出されたときには、HISは11のままとすることができる(例えば、カウンタを00に戻すのではなく、11で飽和させることができる)。ロード命令がロード−ストア競合を生じさせない度に、HISの値を減少させることができる。複数の履歴ビットが使用される場合には、複数の履歴ビットを用いて、(上述されたように)どのターゲット・アドレスがストアされるべきかを判定することと、ロード命令をどのようにスケジューリングするかを決定することとの両方が可能である。
1つ又は複数のLSCビットが専用のキャッシュのエントリにストアされる場合もある。エントリは、ストア命令と競合するロード命令を示すことができる。エントリが、ロード命令がストア命令と競合することを示す場合には、プロセッサ110は、それに応じて、上述されたようにロード命令及び先行するストア命令(例えば、ロード命令の直前の最初のストア命令)の実行をスケジューリングすることができる。必要に応じて、専用のキャッシュのエントリが、後続のロード命令と競合するストア命令を示す場合もある。そのような場合には、プロセッサ110は、それに応じて、上述されたようにストア命令及び後続のロード命令(例えば、ストア命令の後の最初のロード命令)の実行をスケジューリングすることができる。
本発明の1つの実施形態によれば、LSCビットは、ロード命令及び/又はストア命令にストアすることができる。例えば、ロード−ストア競合が検出された場合には、LSCビットをロード命令及び/又はストア命令に再エンコードすることができる(再エンコード及びストアは、以下においてより詳細に説明される)。LSCビットがロード命令に再エンコードされる場合には、それに応じてロード命令及び先行するストア命令をスケジューリングすることができる。LSCビットがストア命令に再エンコードされる場合には、それに応じてストア命令及び後続のロード命令をスケジューリングすることができる。
プリデコードにおけるロード−ストア曖昧性解消及びスケジューリング
ロード−ストア競合情報が、どのロード命令がどのストア命令と競合するかを明確に特定することができない場合もある。例えば、各々のプロセッサのパイプラインにおけるステージの数によって、及び/又は、パイプラインの数によって、プロセッサ・コア114は、各々が互いに競合し得る複数のロード命令と複数のストア命令とを同時に実行することがある。単一のビットを(例えば、ロード命令又はストア命令に)ストアすることでは、どのロード命令がどのストア命令と具体的に競合するのかを特定できない場合がある。また、ロード命令及びストア命令に与えられるアドレス・データ(例えば、ポインタ情報)は、(例えば、ポインタがスケジューリング時点において解決されていないことがあるため)ロード命令とストア命令とが競合するかどうかを判定するのに役に立たない場合もある。したがって、プロセッサ114が、競合するロード命令及びストア命令の曖昧性解消に利用できる付加的な情報(例えば、より具体的な識別情報)をストアする場合もある。
曖昧性解消情報は、命令のスケジューリング及びプリデコードの際に生成される場合もがある。また、曖昧性解消情報は、命令の以前の実行の際に(例えば、以下で説明されるように、トレーニング・フェーズの際に)生成される場合もある。命令のスケジューリング及びプリデコードの際に(例えば、命令がL2キャッシュ112からフェッチされ、スケジューラ及びプリデコーダ220によって処理されるときに)、この情報を用いて、どのロード命令とストア命令が競合するのかを判定し、実行のために命令を適切にスケジューリングすることができる。必要に応じて、他の回路が、命令の実行をスケジューリングするために曖昧性解消情報を利用することもできる。
本発明の1つの実施形態においては、LSCビットのコピーをロード命令とストア命令の両方にストアすることができる(又は、キャッシュが使用される場合には、ロード命令とストア命令の両方についてエントリを与えることができる)。したがって、所定のLSCビットを持つストア命令に遭遇したときには、プロセッサ110は、後続のロード命令も設定されたLSCビットを持つかどうかを判定する。所定のLSCを持つロード命令とストア命令が両方とも検出された場合には、ロード命令とストア命令は、上述されたように、実行のためにスケジューリングすることができる。クリアされたLSCビットが、仲介するロード命令とストア命令(例えば、所定のLSCビットを持つロード命令とストア命令との間のロード命令又はストア命令)の間で競合が予想されないことを示すことができるため、所定のLSCビットを持たないいずれかの仲介するロード命令又はストア命令は、例えば、競合に関しては無視することができる。
所定のLSCビットを持つストア命令が検出された場合には、プロセッサ110は、所定数の後続の命令のみを調べて、そのうちの1つが所定のLSCビットを含むロード命令であるかどうかを判定することもある。例えば、所定のLSCビットについて所定数の命令を検査した後で、その後に実行されるロード命令のいずれも、ストア命令の実行とロード命令の実行との間の(例えば、いずれかの仲介する命令によってもたらされる)本来的な遅延のためにストア命令と競合しないことについて判定を行うことができる。
本発明の1つの実施形態においては、曖昧性解消の目的で用いることができる特別なロード−ストア競合情報を(例えば、ストア命令の1つのフィールドに)ストアすることができる。例えば、ストア実効アドレスの一部(STAX、例えば、ストアされているデータの位置の5つのビット)を(例えば、ストア命令におけるストア実効アドレスの一部を再エンコードし、ストア命令を含むI−ラインにストア実効アドレスの一部を付加し、及び/又は、その一部を専用のキャッシュにストアすることによって)保存することができる。同様の情報を、ロード命令に与えるか、又はエンコードすることもできる。
スケジューリング中に、ロード命令及び/又はストア命令におけるLSCビットが、ロード−ストア競合が存在し得ることを示した場合には、その時点でスケジューリングされているロード命令の各々について、ストア実効アドレスの保存された部分STAXをロード実効アドレスの一部と比較することができる(例えば、比較は、スケジューリングされている全てのロード命令とストア命令との間で行うことができ、又は必要に応じて、所定のLSCビットを持つロード命令及び/又はストア命令の間でのみ行うこともできる)。ストア命令のストア実効アドレスの一部STAXが、所与のロード命令のロード実効アドレスの一部と一致する場合には、ロード命令とストア命令との間で競合が存在することがあり、上述されたように、それに応じてロード命令及びストア命令をスケジューリングすることができる。
ロード命令及びストア命令についてのロード実効アドレス及び/又はストア実効アドレスは、頻繁に(例えば、命令が実行される度に)変化する場合もある。このような場合には、ストア実効アドレスの保存された部分及びロード実効アドレスの一部は、曖昧性解消の目的に関して正確に信頼できないことがある。こうした場合には、ストア実効アドレスとロード実効アドレスとが予測可能であるかどうかを示す付加的なビット(例えば、確認ビット)をストアすることができる。上述された履歴情報(HIS)の代わりに(例えば、その代替として)確認情報を使用できる場合もある。
例えば、ロード命令及びストア命令の最初の実行中に、ロード実効アドレスとストア実効アドレスが一致した場合には、実効アドレスの一部を上述されたようにストアすることができ、確認ビットを設定することができる。ロード命令及びストア命令のその後の実行中に、ロード実効アドレスがストア実効アドレスと一致しないという判定が行われた場合には、確認ビットをクリアして、その後の命令の実行中にはロード実効アドレスとストア実効アドレスが一致しないことを示すことができる。その後のスケジューリング中に、確認ビットがクリアされている場合には、デフォルトで(例えば、ロード命令とストア命令とが競合するかどうかに関わりなく)実行のためにロード命令及びストア命令をスケジューリングすることができる。後に、確認ビットがクリアされ、ロード実効アドレスがストア実効アドレスと一致した場合には、ロード実効アドレス及びストア実効アドレスの一部をストアして、確認ビットを再び設定することができる。
ロード実効アドレス及びストア実効アドレスが競合したかどうかの履歴を追跡する複数の確認ビットを使用する場合もある。例えば、2つの確認ビットが使用される場合には、ビットは、ロード実効アドレスがストア実効アドレスと一致することの、正確な予測が存在しない(「00」)か、ある程度正確な予測が存在する(「01」)か、正確な予測が存在する(「10」)か、又は非常に正確な予測が存在する(「11」)かについて、追跡することができる。ロード実効アドレスとストア実効アドレスとが一致する度に、(値「11」に到達するまで)確認値を増加させることができ、ロード実効アドレスとストア実効アドレスとが一致しない度に、(値「00」に到達するまで)確認値を減少させることができる。ロード命令及びストア命令が、確認レベルが閾値を上回る場合にのみ(例えば、正確な予測又は非常に正確な予測が行われる場合にのみ)、上述されたようにスケジューリングされる場合もある。閾値として、ロード−ストア競合の連続数、確認ビットの数、及び/又は、ロード−ストア競合の発生率(例えば、ロード命令とストア命令とはその期間の80%において競合した)を挙げることができる。
ロード命令とストア命令とが競合するかどうかを判定するために、ロード命令及び/又はストア命令のプリデコード中に、ロード・アドレスの一部及び/又はストア・アドレスの一部が取り出される場合がある。さらに、ストア・アドレスの一部及び/又はロード・アドレスの一部は、ロード命令及び/又はストア命令のプリデコード中に取り出されたアドレス情報から生成される場合もある。例えば、1つの実施形態においては、ロード・アドレス又はストア・アドレスの一部は、プリデコード中にレジスタ・ファイル240から取り出すことができる。レジスタ・ファイル240から取り出された一部は、ロード命令とストア命令とが競合するかどうかを判定するための比較に用いることができる。また、レジスタ・ファイル240から取り出された一部は、対応するロード命令又はストア命令についてのオフセットに追加される場合があり、追加によって生成されたアドレスは、競合が存在するかどうかの判定のために用いることができる。以下で説明される確認ビットがクリアされた場合にのみ、このような情報の取り出しが行われる場合もある。
ロード−ストア競合情報のストア
上述されたように、ロード−ストア競合情報及び/又はターゲット・アドレスは、(例えば、情報を命令に再エンコードするか、又はデータをI−ラインに付加することによって)ロード命令を含むI−ラインにストアされる場合がある。図11Aは、本発明の1つの実施形態による、I−ライン1102におけるロード命令についてのロード−ストア競合情報及び/又はターゲット・アドレスをストアするのに用いられる、例示的なI−ライン1102を示すブロック図である。
図示されるように、I−ラインは、複数の命令(命令1、命令2など)と、アドレス(例えば、実効アドレスEA)をストアするのに用いられるビットと、制御情報(CTL)をストアするのに用いられるビットとを含むことができる。本発明の1つの実施形態においては、図11Aに示される制御ビットCTLを用いて、ロード命令についてのロード−ストア競合情報(例えば、LSCビット、確認ビット、及び/又は、HISビット)をストアすることができ、EAビットを用いて、ロード及び/又はストア実効アドレスの一部をストアすることができる。
一例として、I−ラインの命令が実行されるときに、プロセッサ・コア114は、I−ライン内のロード命令がロード−ストア競合を引き起こしたかどうかを判定することができる。ロード−ストア競合が検出された場合には、I−ライン内のロード命令及び/又はストア命令の位置をCTLビットにストアすることができる。例えば、各々のI−ラインが32個の命令を含む場合には、CTLビットにストアされた(命令の位置を特定するのに十分なビットを含む)5ビットの2進数を用いて、ストアされたロード−ストア競合情報及び実効アドレス情報に対応するロード命令及び/又はストア命令を特定することができる。特定された1つ又は複数の命令に対応するLSCビット及び/又はHISビットも、CTLビットにストアすることができる。
1つの実施形態においては、ロード命令によって要求されるデータのターゲット・アドレスは、図11Aに示されるように、I−ラインに直接ストアする(付加する)ことができる。ストアされたターゲット・アドレスEAは、実効アドレス又は実効アドレスの一部(例えば、実効アドレスの高位の32ビット)とすることができる。ターゲット・アドレスEAは、ロード命令によって要求されるデータか、又は必要に応じて、ターゲットとされたデータのアドレスを含むD−ラインのいずれかを特定することができる。1つの実施形態によれば、I−ラインは、各々がI−ラインのロード命令に対応する複数のアドレスをストアすることができる。
EA及び/又はCLTビットが、I−ラインにその目的で割り当てられたビットにストアされる場合もある。必要に応じて、本発明の1つの実施形態においては、ここで説明される実効アドレス・ビットEA及び制御ビットCLTは、それ以外には使われないI−ラインのビットにストアすることができる。例えば、L2キャッシュ112における各々の情報ラインは、異なるキャッシュ・レベルの間で伝送されるデータのエラー訂正に用いることができる特別なデータ・ビット(例えば、伝送されるデータが破損していないことを保証し、発生したいずれかの破損を修復するのに用いられるエラー訂正コードECC)を有することができる。キャッシュの各々のレベル(例えば、L2キャッシュ112及びI−ライン・キャッシュ222)が、各々のI−ラインの同一コピーを含む場合もある。キャッシュの各々のレベルが所与のI−ラインのコピーを含む場合には、ECCは使用しなくてもよい。その代わりに、例えば、パリティ・ビットを用いて、I−ラインがキャッシュ間で適切に伝送されたかどうかを判定することができる。パリティ・ビットが、I−ラインがキャッシュ間で適切に伝送されなかったことを示した場合には、そのI−ラインは、エラーチェックを行う代わりに、(伝送キャッシュはラインを含むため)伝送キャッシュから再フェッチすることができる。
アドレス及び制御情報をそれ以外には使われないI−ラインのビットにストアする1つの例として、ストアされた2ワードごとにエラー訂正のために11個のビットを用いるエラー訂正プロトコルを考える。1つのI−ラインにおいて、(1ワード当たり1つの命令がストアされる場合に)11個のビットのうちの1つを用いて、2つの命令ごとのパリティ・ビットをストアすることができる。1命令当りの残りの5ビットは、各々の命令についての制御ビット及び/又はアドレス・ビットをストアするのに用いることができる。例えば、5ビットのうちの4つを用いて、命令についての(LSCビット及び/又はHISビットなどの)ロード−ストア競合情報をストアすることができる。I−ラインが32個の命令を含む場合には、残りの32ビット(命令ごとに1ビット)を用いて、ロード及び/又はストア実効アドレスの一部などの他のデータをストアすることができる。本発明の1つの実施形態においては、1つのI−ラインが複数のロード命令及びストア命令を含むことができ、競合を生じさせるロード命令及び/又はストア命令の各々について、ロード−ストア競合情報をストアすることができる。
命令がデコード及び/又は実行された後で、ロード−ストア競合情報がロード命令及び/又はストア命令にストアされる場合もある(再エンコードと呼ばれる)。図11Bは、本発明の1つの実施形態による、例示的な再エンコードされたストア命令1104を示すブロック図である。ストア命令1104は、命令のタイプを特定するのに用いられるオペレーション・コード(Op−Code)、1つ又は複数のレジスター・オペランド(Reg.1、Reg.2)、及び/又はデータを含むことができる。図示されるように、ストア命令1104は、LSC、HIS、STAX、及び/又は確認(CONF)ビットをストアするのに用いられるビットを含むこともできる。
ストア命令が実行されるときに、そのストア命令がロード−ストア競合を生じさせるかどうかについて判定を行うことができる。判定の結果として、上述されたようにLSC、HIS、STAX、及び/又はCONFビットを修正することができる。次いで、LSC及び/又はHISビットを命令にエンコードすることができ、それにより、命令が次にデコードされたときに、例えばプリデコーダ及びスケジューラ220によって、LSC及び/又はHISビットを検査することができる。次いで、プリデコーダ及びスケジューラは、必要に応じてロード命令及びストア命令の実行をスケジューリングすることができる。ロード命令又はストア命令が再エンコードされるときに、その命令を含むI−ラインが、変更済みとしてマークされる場合もある。I−ラインが変更済みとしてマークされた場合には、再エンコードされた命令を含むI−ラインは、I−キャッシュ222に書き戻すことができる。上述されたように、修正された命令を含むI−ラインが、キャッシュ・メモリの各々のレベルに保持される場合もある。また、命令の他のビットを再エンコードのために用いることもできる。
本発明の1つの実施形態において、ロード−ストア競合情報がI−ラインにストアされる場合には、システム100において用いられるキャッシュ及び/又はメモリの各々のレベルは、I−ラインに含まれる情報のコピーを含むことができる。本発明の別の実施形態においては、キャッシュ及び/又はメモリの特定のレベルのみが、命令及び/又はI−ラインに含まれる情報を含むことができる。当業者には公知のキャッシュ・コヒーレンシの原則を用いて、キャッシュ及び/又はメモリの各々のレベルにおけるI−ラインのコピーを更新することができる。
命令キャッシュを利用する従来のシステムにおいては、命令は、典型的には、プロセッサ110によって修正されないことに留意されたい(例えば、命令は読み取り専用である)。したがって、従来のシステムにおいては、I−ラインは典型的には、L2キャッシュ112に書き戻されずに、ある時間が経過するとI−キャッシュ222からエージアウトされる。しかしながら、ここで説明されるように、幾つかの実施形態においては、修正されたI−ライン及び/又は命令はL2キャッシュ112に書き戻され、それにより、ロード−ストア競合情報をより高いキャッシュ及び/又はメモリ・レベルに保持できるようになる。
例として、I−ラインの命令がプロセッサ・コアによって処理される(ターゲット・アドレス及び/又はロード−ストア競合情報が更新される可能性がある)ときには、I−ラインはI−キャッシュ222に(例えば、書き戻し回路238を用いて)書き込まれ、I−キャッシュ222にストアされた古いバージョンのI−ラインが上書きされる可能性がある。1つの実施形態においては、I−ラインは、そのI−ラインにストアされた情報に変更が行われた場合にのみ、I−キャッシュ222に置くことができる。
本発明の1つの実施形態によれば、修正されたI−ラインがI−キャッシュ222に書き戻されるときに、I−ラインを変更済みとしてマークすることができる。I−ラインがI−キャッシュ222に書き戻され、変更済みとしてマークされている場合には、そのI−ラインは、異なる期間の間I−キャッシュに残すことができる。例えば、I−ラインがプロセッサ・コア114によって頻繁に用いられている場合には、I−ラインは、何度かフェッチされI−キャッシュ222に戻され、その度に更新される可能性がある。しかしながら、I−ラインが頻繁に用いられない場合(エージングと呼ばれる)には、I−ラインは、I−キャッシュ222からパージされることがある。I−ラインがI−キャッシュ222からパージされるときに、I−ラインをL2キャッシュ112に書き戻すことができる。
1つの実施形態においては、I−ラインは、修正中としてマークされた場合にのみ、L2キャッシュに書き戻すことができる。別の実施形態においては、I−ラインは、常にL2キャッシュ112に書き戻すことができる。1つの実施形態においては、I−ラインは必要に応じて、一度に数個のキャッシュ・レベルに(例えばL2キャッシュ112とI−キャッシュ222とに)書き戻すか、又は、I−キャッシュ222以外のレベルに(例えば直接L2キャッシュ112に)書き戻すことができる。
修正された命令及び/又はI−ライン・フラグをプロセッサ・コア114からI−キャッシュ222に書き戻すために、書き戻しパスが設けられる場合もある。命令は、典型的には読み取り専用であるため(例えば、命令は、典型的には、元のプログラムが実行された後は修正されないため)、命令情報をI−キャッシュ222又はプロセッサ・コア114からL2キャッシュ112に書き戻すための付加的な回路が設けられることもある。1つの実施形態においては、I−キャッシュ222からL2キャッシュ112への付加的な書き戻しパス(例えば、バス)を設けることができる。
必要に応じて、D−キャッシュ224に書き戻されたデータが自動的にL2キャッシュ112にも書き戻される(それにより両方のキャッシュがデータの同一のコピーを含むことができる)ようにD−キャッシュ224からL2キャッシュ112へのストア・スルーが使用される場合には、ストア・スルーを行うために、D−キャッシュ224からL2キャッシュ112への別個のパスが設けられる場合もある。本発明の1つの実施形態においては、ストア・スルー・パスは、命令及び/又はI−ライン・フラグをI−キャッシュ222からL2キャッシュ112に書き戻すために使用することもでき、それにより、D−キャッシュ224とI−キャッシュ222とがストア・スルー・パスの帯域幅を共用することが可能になる。
例えば、図12に示されるように、ストア・スルー・パス1202に選択回路1204を挿入することができる。ロード−ストア競合情報が、プロセッサ・コア114から書き戻しパス1206を経由してI−キャッシュ222に書き戻された後で、ロード−ストア競合情報は、その情報を含むI−ラインがI−キャッシュ222からエージアウトされるか、そうでなければ廃棄されるまで、I−キャッシュ222に残すことができる。I−ラインがI−キャッシュ222から廃棄されるときに、ロード−ストア競合情報(例えば、I−ラインの末尾に付加されたフラグ及び/又は命令に再エンコードされたフラグ)は、選択回路1204によって選択され、ストア・スルー・パス1202を経由して書き戻すことができ、それにより、ロード−ストア競合情報をL2キャッシュ112に保持することが成功する。必要に応じて、ロード−ストア競合情報を含むI−ラインがI−キャッシュ222から廃棄されるときにその情報を書き込む代わりに、ロード−ストア競合情報が例えば書き戻しパス1206を経由してコア114から受信されたときにその情報を自動的に書き戻すこともできる。いずれの場合であっても、I−キャッシュ222からL2キャッシュ112への書き戻しは、デッド・サイクルの際に、例えばストア・スルー・パス1202がそれ以外には使用されていないときに、行うことができる。
1つの実施形態においては、各々の命令のビットは、説明されたように命令が実行された後で再エンコードすることができる。ロード−ストア競合情報は、命令がより高いレベルのソース・コードからコンパイルされたときに命令にエンコードされる場合もある。例えば、1つの実施形態においては、コンパイラは、ロード−ストア競合を生じさせることがあるロード命令及びストア命令を認識し、それに応じてビットを命令に設定するように設計することができる。
必要に応じて、プログラムのソース・コードが作成されたら、ソース・コードを命令にコンパイルし、次いでテスト実行中にその命令を実行することもできる。
テスト実行及びテスト実行の結果を監視して、どの命令がロード−ストア競合を生じさせるかを判定することができる。次いで、ソース・コードは、ロード−ストア競合情報がテスト実行を考慮して適切な値に設定されるように、再コンパイルすることができる。テスト実行がプロセッサ110上で行われる場合もある。プロセッサ110において制御ビット又は制御ピンを用いて、プロセッサ110をテスト実行のための特別なテスト・モードに置く場合もある。必要に応じて、テスト実行を行い、その結果を監視するように設計された特別なプロセッサを使用することもできる。
シャドー・キャッシュ
上述されたように、ロード−ストア競合情報は、特別なキャッシュにストアすることができる。ロード命令又はストア命令のアドレス(又は、必要に応じて、1つ又は複数の命令を含むI−ラインのアドレス)は、特別なキャッシュへのインデックスとして用いることができる。特別なキャッシュは、シャドー・キャッシュと呼ばれることもある。
1つの実施形態においては、ロード命令又はストア命令を含むI−ラインが(例えば、プリデコーダ及びスケジューラ220によって)受信されたときに、シャドー・キャッシュは、フェッチされたI−ラインに対応するエントリ(又は複数のエントリ)(例えば、フェッチされたI−ラインと同一の実効アドレスを持つエントリ)を検索することができる(例えば、シャドー・キャッシュは、内容アドレス可能(content addressable)とすることができる)。対応するエントリが発見された場合は、ロード−ストア競合履歴情報及び/又はエントリに関連する1つ又は複数のターゲット・アドレスは、プリデコーダ及びスケジューラ220又は他の回路によって、必要に応じて競合し得るいずれかのロード命令又はストア命令をスケジューリングするのに用いることができる。
本発明の1つの実施形態においては、シャドー・キャッシュは、上述されたように、制御ビット(例えば、ロード−ストア競合情報)とロード/ストア実効アドレスの一部の両方を、ストアすることができる。必要に応じて、制御ビットをI−ライン及び/又は個々の命令にストアし、他の情報をシャドー・キャッシュにストアすることもできる。
どのエントリをシャドー・キャッシュにストアするかを判定するのに上述の技術を用いることに加えて、1つの実施形態においては、シャドー・キャッシュを管理するために、従来のキャッシュ管理技術を単独で、又は上述の技術と共に、用いることができる。例えば、シャドー・キャッシュのエントリは、シャドー・キャッシュのエントリがアクセスされた頻度を示すエージ・ビットを有することができる。所与のエントリが頻繁にアクセスされる場合には、エージ値は小さい(例えば、若い)ままである。しかしながら、エントリがあまりアクセスされない場合には、エージ値は大きくなり、そのエントリは、シャドー・キャッシュから廃棄される場合もある。
更なる例示的な実施形態
本発明の1つの実施形態においては、実効アドレスの一部及び他のロード−ストア競合情報は、命令の所与のセットが実行されると共にロード−ストア競合情報又は他のストアされた値が変化するように、継続的に追跡し、実行時に更新することができる。このように、ロード−ストア競合情報は、例えばプログラムが実行されるときに、動的に修正することができる。
本発明の別の実施形態においては、ロード−ストア競合情報は、命令セットの最初の実行フェーズ中に(例えば、プログラムが実行される最初の「トレーニング」期間中に)ストアすることができる。最初の実行フェーズは、「初期化」フェーズ又はトレーニング・フェーズと呼ぶこともできる。トレーニング・フェーズ中に、ロード−ストア競合情報を追跡し、上述された基準に従って(例えば、命令を含むI−ライン又は専用のキャッシュに)ストアすることができる。トレーニング・フェーズが完了したときには、ストアされた情報は、上述されたように命令の実行をスケジューリングするのに用い続けることができる。
1つの実施形態においては、(例えば、ロード命令を含むI−ライン又は専用のキャッシュ若しくはレジスタにストアされた)1つ又は複数のビットを用いて、命令がトレーニング・フェーズにおいて実行されているかどうか、又は、プロセッサ110がトレーニング・フェーズ・モードにあるかどうかを示すことができる。例えば、プロセッサ110におけるモード・ビットは、トレーニング・フェーズ中にクリアすることができる。ビットはクリアされるものの、上述されたようにロード−ストア競合情報を追跡し、更新することができる。トレーニング・フェーズが完了すると、ビットを設定することができる。ビットが設定されたときには、ロード−ストア競合情報はそれ以上更新されず、トレーニング・フェーズを完了することができる。
1つの実施形態においては、トレーニング・フェーズは、特定の期間にわたって(例えば、ある数のクロック周期が経過するまで、又は、所与の命令がある回数実行されるまで)続けることができる。1つの実施形態においては、特定の期間が経過し、トレーニング・フェーズが終了したときに、ストアされた最新のロード−ストア競合情報をそのままストアしておくことができる。また、1つの実施形態においては、トレーニング・フェーズは、所与のI−ラインが閾値の回数だけ実行されるまで続けることができる。例えば、I−ラインが所与のレベルのキャッシュから(例えば、メイン・メモリ102、L3キャッシュ、又はL2キャッシュ112から)フェッチされたときに、I−ラインのカウンタ(例えば、2ビット又は3ビットのカウンタ)をゼロにリセットすることができる。カウンタがI−ライン実行の回数の閾値を下回っている間は、そのI−ラインの命令についてトレーニング・フェーズを続けることができる。I−ラインの各々の実行後に、カウンタの値を増加させることもできる。I−ラインの実行の回数が閾値に達した後に、そのI−ラインの命令についてのトレーニング・フェーズを停止することができる。また、実行されているI−ラインの命令によって異なる閾値が用いられる場合もある(例えば、より変動の大きい結果を有する命令の場合には、より多くのトレーニングを用いることができる)。
本発明の別の実施形態においては、トレーニング・フェーズは、1つ又は複数の終了基準が満たされるまで続けることができる。例えば、ロード−ストア競合履歴がストアされる場合には、最初の実行フェーズは、ロード−ストア競合が予測可能になるまで(又は、強く予測可能になるまで)続けることができる。結果が予測可能になったときに、最初のトレーニング・フェーズが完了し、その後のスケジューリング及び実行についてロード−ストア競合情報を用いることができることを示すロック・ビットを、I−ラインに設定することができる。
本発明の別の実施形態においては、断続的なトレーニング・フェーズにおいて、ターゲット・アドレス及びキャッシュ・ミス情報を修正することができる。例えば、各々のトレーニング・フェーズについて、頻度及び持続時間の値をストアすることができる。頻度に対応するある数のクロック周期が経過するたびにトレーニング・フェーズを始め、それを特定の持続時間値にわたって続けることができる。別の実施形態においては、頻度に対応するある数のクロック周期が経過するたびに、トレーニング・フェーズを始め、特定の閾値条件が満たされるまで(例えば、上述されたように、特定のレベルのロード−ストア競合予測可能性が達成されるまで)トレーニング・フェーズを続けることができる。
LSCビットが設定されており、それがロード−ストア競合を予測する場合に、その予測が信頼できないことがあり、例えば、ロード命令及びストア命令の実行がロード−ストア競合を生じさせないことがある。このような状況において、命令の実行の繰り返しがロード−ストア競合を生じさせない場合には、LSCビットを後でクリアすることができる。例えば、カウンタは、ロード命令がロード−ストア競合を生じさせなかった以前の回数を記録することができる。命令がロード−ストア競合を生じさせるたびに、カウンタを0にリセットすることができる。命令がロード−ストア競合を生じさせないたびに、カウンタの値を増加させることができる。カウンタが所与の閾値(例えば、連続4回のノンミス)に達したときに、予測ビットをクリアすることができる。必要に応じて、命令がミスを生じさせるたびにカウンタをリセットするのではなく、カウンタの値を減少させてもよい。LSC予測ビットをクリアするための機構を設けることによって、プロセッサは、上述されたように、ロード命令及びストア命令の不必要なスケジューリングを回避することができる。さらに、予測ビットがクリアされる場合には、命令がロード−ストア競合を生じさせるかどうかが予測不可能であることを示すように、別のビット又は複数のビットを設定することができる。
本発明の1つの実施形態においては、互いに依存するロード命令又はストア命令のいずれかがキャッシュ・ミスを生じさせる場合には、ロード−ストア競合が発生しないことがある。例えば、キャッシュ・ミスは、ロード命令及びストア命令によってアクセスされているデータがD−キャッシュ224にないことを示すことがある。データがフェッチされ、D−キャッシュ224に置かれたときには、そのデータがロード命令に与えられる前に、ストア命令からのデータを用いて、フェッチされたデータを更新することができる。このように、ロード命令は、ロード−ストア競合を起こすことなく正しく更新されたデータを受信することができる。したがって、ロード命令又はストア命令のいずれかがキャッシュ・ミスを生じさせる場合には、ロード−ストア競合情報を記録しなくてもよい。
本発明の実施形態は、カスケード型遅延実行パイプライン・ユニットを使用するプロセッサに関して、及び、複数のコア114を有するプロセッサに関して、上述されたが、本発明の実施形態は、カスケード型遅延実行パイプライン・ユニット又は複数のコアを使用しない従来のプロセッサを含むあらゆるプロセッサに用いることができる。代替的で適切な構成が、当業者に直ちに明らかとなる。
本発明の1つの好ましい実施形態によるシステムを示すブロック図である。 本発明の1つの好ましい実施形態によるコンピュータ・プロセッサを示すブロック図である。 本発明の1つの好ましい実施形態によるプロセッサのコアの1つを示すブロック図である。 本発明の1つの好ましい実施形態による、ロード−ストア競合を解決するための1つのプロセスを示すフロー図である。 本発明の1つの好ましい実施形態による、ストア命令からロード命令にデータを転送するための転送パスを持つ例示的な実行ユニットを示す。 本発明の1つの好ましい実施形態による、プロセッサにおけるロード−ストア競合を解決するために使用することができるハードウェアを示すブロック図である。 本発明の1つの好ましい実施形態による、ストア・ターゲット・キューにおけるロード命令アドレスについて、一致する最も若いエントリを判定するための選択ハードウェアを示すブロック図である。 本発明の1つの好ましい実施形態による、ストア命令から転送されたデータをロード命令についてのデータと統合するための統合ハードウェアを示すブロック図である。 本発明の1つの好ましい実施形態による、ロード命令及びストア命令の実行をスケジューリングするためのプロセスを示すフロー図である。 本発明の1つの好ましい実施形態による、ロード命令及びストア命令のスケジューリングを示す図である。 (A)本発明の1つの好ましい実施形態による、ロード−ストア競合情報をストアするのに用いられる例示的なI−ラインを示すブロック図である。(B)本発明の1つの好ましい実施形態による例示的なストア命令を示すブロック図である。 本発明の1つの好ましい実施形態による、ロード−ストア競合情報をプロセッサ・コアからキャッシュ・メモリに書き戻すための回路を示すブロック図である。

Claims (3)

  1. プロセッサにおいて命令を実行する方法であって、
    ロード命令及びストア命令を受信するステップと、
    前記ロード命令についてのロード・データのロード実効アドレスと前記ストア命令につ
    いてのストア・データのストア実効アドレスとを計算するステップと、
    前記ロード実効アドレス及び前記ストア実効アドレスにおいてページ内の場所を特定す
    る部分を比較するステップと、
    前記ページ内の場所を特定する部分が一致する場合に、前記ストア命令についての前記
    ストア・データを、前記ストア命令が実行されている第1のパイプラインから、前記ロー
    ド命令が実行されている第2のパイプラインに転送するステップであって、前記ロード命
    令は、前記ストア・データを前記第1のパイプラインから受信し、要求されたデータをデ
    ータ・キャッシュから受信する、ステップと、
    前記ロード実効アドレスを用いて取得されたロード物理アドレスのページ番号と、前記
    ストア実効アドレスを用いて取得されたストア物理アドレスのページ番号を比較するステ
    ップと、
    前記ページ番号が一致する場合に、前記転送されたストア・データを前記データ・キャ
    ッシュからの前記要求されたデータと統合して前記ロード・データとするステップと、
    を含む方法。
  2. キャッシュと、
    第1のパイプラインと、
    第2のパイプラインと、
    前記キャッシュからロード命令及びストア命令を受信し、
    前記ロード命令についてのロード・データのロード実効アドレスと前記ストア命令についてのストア・データのストア実効アドレスとを計算し、
    前記ロード実効アドレス及び前記ストア実効アドレスにおいてページ内の場所を特定する部分を比較し、
    前記ページ内の場所を特定する部分が一致する場合に、前記ストア命令についての前記ストア・データを、前記ストア命令が実行されている前記第1のパイプラインから、前記ロード命令が実行されている前記第2のパイプラインに転送し、
    前記ロード実効アドレスを用いて取得されたロード物理アドレスのページ番号と、前記ストア実効アドレスを用いて取得されたストア物理アドレスのページ番号を比較し、
    前記ページ番号が一致する場合に、前記転送されたストア・データを前記キャッシュからのデータと統合して前記ロード・データとする、
    ように構成可能な回路と、
    を備えるプロセッサ。
  3. コンピュータ・プログラムであって、該プログラムがコンピュータに、請求項に記載の方法の各ステップを実行させる、コンピュータ・プログラム。
JP2009513663A 2006-06-07 2007-06-04 高速で安価なストア−ロード競合スケジューリング及び転送機構 Expired - Fee Related JP5357017B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/422,630 US20070288725A1 (en) 2006-06-07 2006-06-07 A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism
US11/422,630 2006-06-07
PCT/EP2007/055459 WO2007141234A1 (en) 2006-06-07 2007-06-04 A fast and inexpensive store-load conflict scheduling and forwarding mechanism

Publications (2)

Publication Number Publication Date
JP2009540411A JP2009540411A (ja) 2009-11-19
JP5357017B2 true JP5357017B2 (ja) 2013-12-04

Family

ID=38268977

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009513663A Expired - Fee Related JP5357017B2 (ja) 2006-06-07 2007-06-04 高速で安価なストア−ロード競合スケジューリング及び転送機構

Country Status (5)

Country Link
US (1) US20070288725A1 (ja)
EP (1) EP2035919A1 (ja)
JP (1) JP5357017B2 (ja)
CN (1) CN101449237B (ja)
WO (1) WO2007141234A1 (ja)

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7461238B2 (en) * 2006-06-07 2008-12-02 International Business Machines Corporation Simple load and store disambiguation and scheduling at predecode
US7600097B1 (en) * 2006-09-05 2009-10-06 Sun Microsystems, Inc. Detecting raw hazards in an object-addressed memory hierarchy by comparing an object identifier and offset for a load instruction to object identifiers and offsets in a store queue
US20080082755A1 (en) * 2006-09-29 2008-04-03 Kornegay Marcus L Administering An Access Conflict In A Computer Memory Cache
US20080201531A1 (en) * 2006-09-29 2008-08-21 Kornegay Marcus L Structure for administering an access conflict in a computer memory cache
US20080148020A1 (en) * 2006-12-13 2008-06-19 Luick David A Low Cost Persistent Instruction Predecoded Issue and Dispatcher
US8001361B2 (en) * 2006-12-13 2011-08-16 International Business Machines Corporation Structure for a single shared instruction predecoder for supporting multiple processors
US7945763B2 (en) * 2006-12-13 2011-05-17 International Business Machines Corporation Single shared instruction predecoder for supporting multiple processors
US7984272B2 (en) 2007-06-27 2011-07-19 International Business Machines Corporation Design structure for single hot forward interconnect scheme for delayed execution pipelines
US7730288B2 (en) * 2007-06-27 2010-06-01 International Business Machines Corporation Method and apparatus for multiple load instruction execution
US7865769B2 (en) * 2007-06-27 2011-01-04 International Business Machines Corporation In situ register state error recovery and restart mechanism
WO2009000624A1 (en) * 2007-06-27 2008-12-31 International Business Machines Corporation Forwarding data in a processor
US7769987B2 (en) 2007-06-27 2010-08-03 International Business Machines Corporation Single hot forward interconnect scheme for delayed execution pipelines
US20090210672A1 (en) * 2008-02-19 2009-08-20 Luick David A System and Method for Resolving Issue Conflicts of Load Instructions
US7877579B2 (en) * 2008-02-19 2011-01-25 International Business Machines Corporation System and method for prioritizing compare instructions
US7865700B2 (en) * 2008-02-19 2011-01-04 International Business Machines Corporation System and method for prioritizing store instructions
US7984270B2 (en) * 2008-02-19 2011-07-19 International Business Machines Corporation System and method for prioritizing arithmetic instructions
US20090210666A1 (en) * 2008-02-19 2009-08-20 Luick David A System and Method for Resolving Issue Conflicts of Load Instructions
US7870368B2 (en) * 2008-02-19 2011-01-11 International Business Machines Corporation System and method for prioritizing branch instructions
US7996654B2 (en) * 2008-02-19 2011-08-09 International Business Machines Corporation System and method for optimization within a group priority issue schema for a cascaded pipeline
US7882335B2 (en) * 2008-02-19 2011-02-01 International Business Machines Corporation System and method for the scheduling of load instructions within a group priority issue schema for a cascaded pipeline
US20090210669A1 (en) * 2008-02-19 2009-08-20 Luick David A System and Method for Prioritizing Floating-Point Instructions
US8095779B2 (en) * 2008-02-19 2012-01-10 International Business Machines Corporation System and method for optimization within a group priority issue schema for a cascaded pipeline
US8108654B2 (en) * 2008-02-19 2012-01-31 International Business Machines Corporation System and method for a group priority issue schema for a cascaded pipeline
US20090210677A1 (en) * 2008-02-19 2009-08-20 Luick David A System and Method for Optimization Within a Group Priority Issue Schema for a Cascaded Pipeline
US7975130B2 (en) * 2008-02-20 2011-07-05 International Business Machines Corporation Method and system for early instruction text based operand store compare reject avoidance
US9135005B2 (en) * 2010-01-28 2015-09-15 International Business Machines Corporation History and alignment based cracking for store multiple instructions for optimizing operand store compare penalties
US8938605B2 (en) * 2010-03-05 2015-01-20 International Business Machines Corporation Instruction cracking based on machine state
US8645669B2 (en) 2010-05-05 2014-02-04 International Business Machines Corporation Cracking destructively overlapping operands in variable length instructions
CN102567556A (zh) * 2010-12-27 2012-07-11 北京国睿中数科技股份有限公司 一种面向调试的处理器验证方法及验证设备
JP2012198803A (ja) * 2011-03-22 2012-10-18 Fujitsu Ltd 演算処理装置及び演算処理方法
WO2013095508A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Speculative cache modification
US10261909B2 (en) 2011-12-22 2019-04-16 Intel Corporation Speculative cache modification
CN104823168B (zh) 2012-06-15 2018-11-09 英特尔公司 用于实现从由加载存储重新排序和优化导致的推测性转发遗漏预测/错误中恢复的方法和***
US9626189B2 (en) 2012-06-15 2017-04-18 International Business Machines Corporation Reducing operand store compare penalties
WO2013188460A2 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. A virtual load store queue having a dynamic dispatch window with a distributed structure
EP2862069A4 (en) 2012-06-15 2016-12-28 Soft Machines Inc DEFINING INSTRUCTIONS TO REORDER AND OPTIMIZE LOADING AND STORAGE
EP2862061A4 (en) 2012-06-15 2016-12-21 Soft Machines Inc MEMORY PRECISION FOR VIRTUAL LOAD WITH DYNAMIC SHIPPING WINDOW WITH UNIFORM STRUCTURE
EP2862068B1 (en) * 2012-06-15 2022-07-06 Intel Corporation Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
KR101818967B1 (ko) * 2012-06-15 2018-01-16 인텔 코포레이션 명확화 없는 비순차 load store 큐
US11036505B2 (en) * 2012-12-20 2021-06-15 Advanced Micro Devices, Inc. Store-to-load forwarding
US9251073B2 (en) * 2012-12-31 2016-02-02 Intel Corporation Update mask for handling interaction between fills and updates
US9535695B2 (en) 2013-01-25 2017-01-03 Apple Inc. Completing load and store instructions in a weakly-ordered memory model
US9311239B2 (en) 2013-03-14 2016-04-12 Intel Corporation Power efficient level one data cache access with pre-validated tags
US9361113B2 (en) 2013-04-24 2016-06-07 Globalfoundries Inc. Simultaneous finish of stores and dependent loads
US9619382B2 (en) 2013-08-19 2017-04-11 Intel Corporation Systems and methods for read request bypassing a last level cache that interfaces with an external fabric
US9665468B2 (en) 2013-08-19 2017-05-30 Intel Corporation Systems and methods for invasive debug of a processor without processor execution of instructions
US9632947B2 (en) * 2013-08-19 2017-04-25 Intel Corporation Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early
US9361227B2 (en) * 2013-08-30 2016-06-07 Soft Machines, Inc. Systems and methods for faster read after write forwarding using a virtual address
US11093401B2 (en) * 2014-03-11 2021-08-17 Ampere Computing Llc Hazard prediction for a group of memory access instructions using a buffer associated with branch prediction
US9940264B2 (en) 2014-10-10 2018-04-10 International Business Machines Corporation Load and store ordering for a strongly ordered simultaneous multithreading core
US10606590B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Effective address based load store unit in out of order processors
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10579387B2 (en) * 2017-10-06 2020-03-03 International Business Machines Corporation Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor
US10394558B2 (en) * 2017-10-06 2019-08-27 International Business Machines Corporation Executing load-store operations without address translation hardware per load-store unit port
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10417002B2 (en) 2017-10-06 2019-09-17 International Business Machines Corporation Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US10572256B2 (en) 2017-10-06 2020-02-25 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10649900B2 (en) 2017-11-06 2020-05-12 Samsung Electronics Co., Ltd. Method to avoid cache access conflict between load and fill
JP7115203B2 (ja) * 2018-10-10 2022-08-09 富士通株式会社 演算処理装置および演算処理装置の制御方法
CN111045818B (zh) * 2019-11-21 2022-12-16 中国航空工业集团公司西安航空计算技术研究所 一种多端口Cache的请求预处理电路
US11113056B2 (en) * 2019-11-27 2021-09-07 Advanced Micro Devices, Inc. Techniques for performing store-to-load forwarding

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5829186A (ja) * 1981-08-14 1983-02-21 Nec Corp 情報処理装置
JPS6347857A (ja) * 1986-08-15 1988-02-29 Nec Corp メモリアクセス制御装置
US5185871A (en) * 1989-12-26 1993-02-09 International Business Machines Corporation Coordination of out-of-sequence fetching between multiple processors using re-execution of instructions
US5655096A (en) * 1990-10-12 1997-08-05 Branigin; Michael H. Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
JPH04355847A (ja) * 1991-06-04 1992-12-09 Nec Corp ストアバッファ制御装置
JPH04358241A (ja) * 1991-06-04 1992-12-11 Nec Corp ストアバッファ制御装置
JPH06222990A (ja) * 1992-10-16 1994-08-12 Fujitsu Ltd データ処理装置
US5625789A (en) * 1994-10-24 1997-04-29 International Business Machines Corporation Apparatus for source operand dependendency analyses register renaming and rapid pipeline recovery in a microprocessor that issues and executes multiple instructions out-of-order in a single cycle
US5751946A (en) * 1996-01-18 1998-05-12 International Business Machines Corporation Method and system for detecting bypass error conditions in a load/store unit of a superscalar processor
US5809275A (en) * 1996-03-01 1998-09-15 Hewlett-Packard Company Store-to-load hazard resolution system and method for a processor that executes instructions out of order
US5903749A (en) * 1996-07-02 1999-05-11 Institute For The Development Of Emerging Architecture, L.L.C. Method and apparatus for implementing check instructions that allow for the reuse of memory conflict information if no memory conflict occurs
US6021485A (en) * 1997-04-10 2000-02-01 International Business Machines Corporation Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
KR19990003937A (ko) * 1997-06-26 1999-01-15 김영환 프리페치 장치
JPH1185513A (ja) * 1997-09-03 1999-03-30 Hitachi Ltd プロセッサ
US6463514B1 (en) * 1998-02-18 2002-10-08 International Business Machines Corporation Method to arbitrate for a cache block
US6308260B1 (en) * 1998-09-17 2001-10-23 International Business Machines Corporation Mechanism for self-initiated instruction issuing and method therefor
US6141747A (en) * 1998-09-22 2000-10-31 Advanced Micro Devices, Inc. System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US6349382B1 (en) * 1999-03-05 2002-02-19 International Business Machines Corporation System for store forwarding assigning load and store instructions to groups and reorder queues to keep track of program order
US6728867B1 (en) * 1999-05-21 2004-04-27 Intel Corporation Method for comparing returned first load data at memory address regardless of conflicting with first load and any instruction executed between first load and check-point
US6481251B1 (en) * 1999-10-25 2002-11-19 Advanced Micro Devices, Inc. Store queue number assignment and tracking
US6598156B1 (en) * 1999-12-23 2003-07-22 Intel Corporation Mechanism for handling failing load check instructions
JP3593490B2 (ja) * 2000-03-28 2004-11-24 株式会社東芝 データ処理装置
US6678807B2 (en) * 2000-12-21 2004-01-13 Intel Corporation System and method for multiple store buffer forwarding in a system with a restrictive memory model
JP4489308B2 (ja) * 2001-01-05 2010-06-23 富士通株式会社 パケットスイッチ
JP2002333978A (ja) * 2001-05-08 2002-11-22 Nec Corp Vliw型プロセッサ
US7103880B1 (en) * 2003-04-30 2006-09-05 Hewlett-Packard Development Company, L.P. Floating-point data speculation across a procedure call using an advanced load address table
US7441107B2 (en) * 2003-12-31 2008-10-21 Intel Corporation Utilizing an advanced load address table for memory disambiguation in an out of order processor
US7594078B2 (en) * 2006-02-09 2009-09-22 International Business Machines Corporation D-cache miss prediction and scheduling
US7447879B2 (en) * 2006-02-09 2008-11-04 International Business Machines Corporation Scheduling instructions in a cascaded delayed execution pipeline to minimize pipeline stalls caused by a cache miss
US7461238B2 (en) * 2006-06-07 2008-12-02 International Business Machines Corporation Simple load and store disambiguation and scheduling at predecode

Also Published As

Publication number Publication date
CN101449237B (zh) 2013-04-24
JP2009540411A (ja) 2009-11-19
EP2035919A1 (en) 2009-03-18
US20070288725A1 (en) 2007-12-13
CN101449237A (zh) 2009-06-03
WO2007141234A1 (en) 2007-12-13

Similar Documents

Publication Publication Date Title
JP5357017B2 (ja) 高速で安価なストア−ロード競合スケジューリング及び転送機構
US7730283B2 (en) Simple load and store disambiguation and scheduling at predecode
US7447879B2 (en) Scheduling instructions in a cascaded delayed execution pipeline to minimize pipeline stalls caused by a cache miss
US7594078B2 (en) D-cache miss prediction and scheduling
US8812822B2 (en) Scheduling instructions in a cascaded delayed execution pipeline to minimize pipeline stalls caused by a cache miss
JP5137948B2 (ja) ローカル及びグローバル分岐予測情報の格納
US20070186050A1 (en) Self prefetching L2 cache mechanism for data lines
US20090006803A1 (en) L2 Cache/Nest Address Translation
US20070288733A1 (en) Early Conditional Branch Resolution
US7680985B2 (en) Method and apparatus for accessing a split cache directory
US10067875B2 (en) Processor with instruction cache that performs zero clock retires
US20070186049A1 (en) Self prefetching L2 cache mechanism for instruction lines
US7937530B2 (en) Method and apparatus for accessing a cache with an effective address
US8301871B2 (en) Predicated issue for conditional branch instructions
US20070288732A1 (en) Hybrid Branch Prediction Scheme
US20070288731A1 (en) Dual Path Issue for Conditional Branch Instructions
US20080162908A1 (en) structure for early conditional branch resolution
US20070288734A1 (en) Double-Width Instruction Queue for Instruction Execution
US20080162907A1 (en) Structure for self prefetching l2 cache mechanism for instruction lines
US20080162819A1 (en) Design structure for self prefetching l2 cache mechanism for data lines
US20080162905A1 (en) Design structure for double-width instruction queue for instruction execution

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100319

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120918

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130403

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130507

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130723

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130806

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130829

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees