JP5611972B2 - デジタルプロセッサにおいてジャンプ動作を実施するための方法および装置 - Google Patents

デジタルプロセッサにおいてジャンプ動作を実施するための方法および装置 Download PDF

Info

Publication number
JP5611972B2
JP5611972B2 JP2011539686A JP2011539686A JP5611972B2 JP 5611972 B2 JP5611972 B2 JP 5611972B2 JP 2011539686 A JP2011539686 A JP 2011539686A JP 2011539686 A JP2011539686 A JP 2011539686A JP 5611972 B2 JP5611972 B2 JP 5611972B2
Authority
JP
Japan
Prior art keywords
target address
jump instruction
jdi
memory
jump
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.)
Active
Application number
JP2011539686A
Other languages
English (en)
Other versions
JP2012511212A (ja
Inventor
クリストファー エム. メイヤー,
クリストファー エム. メイヤー,
アディル バハドーア,
アディル バハドーア,
マイケル ロング,
マイケル ロング,
Original Assignee
アナログ デバイシス, インコーポレイテッド
アナログ デバイシス, インコーポレイテッド
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 アナログ デバイシス, インコーポレイテッド, アナログ デバイシス, インコーポレイテッド filed Critical アナログ デバイシス, インコーポレイテッド
Publication of JP2012511212A publication Critical patent/JP2012511212A/ja
Application granted granted Critical
Publication of JP5611972B2 publication Critical patent/JP5611972B2/ja
Active 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

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)
  • Executing Machine-Instructions (AREA)

Description

(関連出願の引用)
本願は、同時係属の米国特許出願第12/328,484号(2008年12月4日出願)に基づく優先権および利益を主張する。該出願の全体が参照により本明細書に引用される。
(発明の分野)
本発明は、デジタルプロセッサでのジャンプ動作の実行に関し、より具体的には、新規のジャンプ二重間接命令およびジャンプ二重間接命令を実装するための装置に関する。
ジャンプ命令は、一般に、デジタルプロセッサの命令セットアーキテクチャの中に含まれる。逐次プログラム実行中に、プロセッサは、逐次メモリアドレスから命令をフェッチする。ジャンプ命令は、第1の命令シーケンスから第2の命令シーケンスにプログラム実行を切り替えるように使用され、直接的または間接的に、目標アドレスを指定する。目標アドレスは、第2の命令シーケンスの第1の命令を含む。プロセッサがメモリからジャンプ命令をフェッチした時に、目標アドレスにジャンプして、第2の命令シーケンスの実行を開始する。
プログラムは、それぞれが異なる目標アドレスを伴う、複数のジャンプ命令を含み得る。ジャンプ命令は、例えば、異なるサブルーチンを実行するように使用され得る。ジャンプ命令は、条件付き、または無条件であり得る。条件ジャンプ命令は、一般に、分岐命令として既知である。
現在のプロセッサは、典型的に、パイプラインアーキテクチャを使用する。このようなプロセッサは、高速動作を達成するように、複数のパイプラインステージを含む。各パイプラインステージは、命令フェッチ、命令解読、データアドレス発生、計算等の、命令実行に関与する機能のうちの1つを実施する。プログラム命令は、連続するクロックサイクル上のパイプラインステージを通して進み、複数の命令が、同時に、種々のステージの完了時にあり得る。理想的には、パイプラインプロセッサは、クロックサイクルあたり1つの命令の実行を完了することができる。性能は、多数のパイプラインステージを提供することによって高めることができる。プロセッサの中のパイプラインステージの数は、一般に、「パイプライン深さ」と称される。
パイプラインアーキテクチャによって提供される高められた性能にも関わらず、特定のプログラム条件は、性能を低下させ得る。そのようなプログラム条件の実施例は、ジャンプ命令である。ジャンプ命令は、例えばデジタル信号プロセッサアプリケーションおよびマイクロコントローラアプリケーションを含む、大部分のコンピュータプログラムで一般的である。ジャンプ命令がパイプラインプロセッサを通して進み、かつ分岐予測が利用されない時、逐次命令は、パイプラインの中のジャンプ命令に従う。パイプラインの終わりにジャンプ命令がコミットする時には、現在パイプラインの中にある全ての命令を中止し、そしてジャンプ命令の目標アドレスから開始する命令を再実行することによって、パイプラインをクリアしなければならない。性能ペナルティは、パイプライン深さによって増大する。深いパイプラインアーキテクチャおよび頻繁なジャンプ命令を有するプログラムの場合、性能ペナルティが深刻になる可能性がある。
分岐予測技術は、当技術分野において既知である。典型的な分岐予測器では、分岐キャッシュメモリは、分岐のアドレスおよびジャンプ命令のアドレス、ならびに対応する予測情報を含む。ジャンプ命令がプログラムシーケンサによってフェッチされた時、分岐予測器は、そのメモリアドレスに基づいてジャンプ命令を検出する。分岐キャッシュメモリに含まれる予測情報は、プロセッサが、パイプラインをフラッシュせずに、目標アドレスにジャンプすることを可能にする。
従来の技術の分岐予測器は、性能に関して限定的な影響しか持たなかった。故に、デジタルプロセッサでジャンプ動作を実施するための、改良された方法および装置の必要性がある。
本発明の第1の局面によれば、パイプラインデジタルプロセッサでジャンプ動作を実施するための方法が提供される。方法は、プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、プロセッサによって実行されている第1のジャンプ命令を検出することであって、第1のジャンプ命令は、メモリテーブルの中の第1の目標アドレスに対するポインタを参照することと、プロセッサが、第1の目標アドレスにジャンプし、メモリテーブルの中の第2の目標アドレスであって、第2のジャンプ命令に対応する第2の目標アドレスを指すようにポインタを修正することによって、第1のジャンプ命令を実行することとを含む。
第1のジャンプ命令の実行はさらに、メモリテーブルから少なくとも1つの将来の目標アドレスをプリフェッチして、少なくとも1つの将来の目標アドレスをローカルメモリに書き込むことを含み得る。第2のジャンプ命令の検出に応答して、ローカルメモリの中で第2の目標アドレスがアクセスされ得る。
本発明の第2の局面によれば、分岐予測器を有するパイプラインデジタルプロセッサでジャンプ動作を実施するための方法が提供される。方法は、プロセッサによって実行されるジャンプ命令の目標アドレスを、メモリテーブルに書き込むことと、プロセッサの命令セットアーキテクチャでジャンプ命令を提供することであって、ジャンプ命令は、メモリテーブルの中の目標アドレスに対するポインタを参照する、ことと、第1のジャンプ命令を検出する分岐予測器に応答して、第1の目標アドレスにジャンプすることと、メモリテーブルの中の第2の目標アドレスを指すようにポインタを修正することであって、第2の目標アドレスは、第2のジャンプ命令に対応する、こととを含む。
第3の本発明の局面によれば、パイプラインデジタルプロセッサでジャンプ動作を実施するための装置が提供される。装置は、実行されるジャンプ命令の目標アドレスを記憶するメモリテーブルと、ローカルメモリと、メモリテーブルの中の目標アドレスに対するポインタを参照する、ジャンプ命令の実行を制御するためのジャンプ命令制御ユニットであって、第1の目標アドレスにジャンプする第1のジャンプ命令に応答し、メモリテーブルの中の第2の目標アドレスを指すようにポインタを修正し、メモリテーブルから少なくとも1つの将来の目標アドレスをプリフェッチし、および少なくとも1つの将来の目標アドレスをローカルメモリ書き込むためのジャンプ命令制御ユニットとを備える。
本発明の第4の局面によれば、パイプラインデジタルプロセッサでジャンプ動作を実施するための方法を提供する。方法は、プロセッサによって実行されるジャンプ命令の目標アドレスを、メモリテーブルに書き込むことと、プロセッサの分岐予測器で第1のジャンプ命令を学習することであって、第1のジャンプ命令は、メモリテーブルの中の第1の目標アドレスに対するポインタを参照する、ことと、プロセッサのフェッチブロックで第1のジャンプ命令をフェッチすることと、分岐予測器で第1のジャンプ命令を検出することと、ローカルメモリから第1のジャンプ命令に対応する第1の目標アドレスを読み取り、第1の目標アドレスをプロセッサのフェッチブロックに提供することと、メモリテーブルの中の第2の目標アドレスを指すようにポインタを修正することであって、第2の目標アドレスは、第2のジャンプ命令に対応する、ことと、メモリテーブルから将来の目標アドレスをプリフェッチすることと、第1のジャンプ命令がコミットする時に、プリフェッチされた将来の目標アドレスをローカルメモリに書き込むことと、第1のジャンプ命令がコミットする時に、ローカルメモリから第1の目標アドレスを回収することとを含む。
本明細書は、例えば、以下の項目も提供する。
(項目1)
パイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサによって実行されている第1のジャンプ命令を検出することであって、該第1のジャンプ命令は、該メモリテーブルの中の第1の目標アドレスに対するポインタを参照する、ことと、
該プロセッサが、
該第1の目標アドレスにジャンプすることと、
該メモリテーブルの中の第2の目標アドレスを指すように該ポインタを修正することであって、該第2の目標アドレスは第2のジャンプ命令に対応する、ことと
を行うことによって、該第1のジャンプ命令を実行することと
を含む、方法。
(項目2)
前記第1のジャンプ命令を実行することは、
前記メモリテーブルから少なくとも1つの将来の目標アドレスをプリフェッチすることと、
該少なくとも1つの将来の目標アドレスをローカルメモリに書き込むことと
をさらに含む、項目1に記載の方法。
(項目3)
前記第2のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第2の目標アドレスにアクセスすることをさらに含む、項目2に記載の方法。
(項目4)
前記ポインタを修正することは、該ポインタをポストインクリメントすることを含む、項目1に記載の方法。
(項目5)
前記第1のジャンプ命令を実行することは、前記メモリテーブルの中の前記第1の目標アドレスにアクセスすることをさらに含む、項目1に記載の方法。
(項目6)
一連の命令の実行前に、前記メモリテーブルに書き込まれる前記目標アドレスを事前計算することをさらに含む、項目1に記載の方法。
(項目7)
前記第2のジャンプ命令がコミットする時に、前記ローカルメモリから前記第2の目標アドレスを回収することをさらに含む、項目3に記載の方法。
(項目8)
前記少なくとも1つの将来の目標アドレスは、前記第1のジャンプ命令がコミットする時に、前記ローカルメモリに書き込まれる、項目3に記載の方法。
(項目9)
前記少なくとも1つの将来の目標アドレスをプリフェッチすることは、前記ローカルメモリが満杯ではない時に、2つの将来の目標アドレスをプリフェッチすることを含む、項目3に記載の方法。
(項目10)
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、該パイプラインをクリアすることをさらに含む、項目3に記載の方法。
(項目11)
前記第1のジャンプ命令を検出することは、前記プロセッサの中の分岐予測器によって実施される、項目1に記載の方法。
(項目12)
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、該一連のジャンプ命令の終了時とに書き込むことを含む、項目1に記載の方法。
(項目13)
分岐予測器を有するパイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサの命令セットアーキテクチャにおいてジャンプ命令を提供することであって、該ジャンプ命令は、該メモリテーブルの中の目標アドレスに対するポインタを参照する、ことと、
該分岐予測器が第1のジャンプ命令を検出することに応答して、第1の目標アドレスにジャンプすることと、
該メモリテーブルの中の第2の目標アドレスを指すように該ポインタを修正することであって、該第2の目標アドレスは、第2のジャンプ命令に対応する、ことと
を含む、方法。
(項目14)
前記メモリテーブルから少なくとも1つの将来の目標アドレスをプリフェッチすることと、該少なくとも1つの将来の目標アドレスをローカルメモリに書き込むこととをさらに含む、項目13に記載の方法。
(項目15)
前記分岐予測器が前記第2のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第2の目標アドレスにアクセスすることをさらに含む、項目14に記載の方法。
(項目16)
前記第2のジャンプ命令がコミットする時に、前記ローカルメモリから前記第2の目標アドレスを回収することをさらに含む、項目15に記載の方法。
(項目17)
前記少なくとも1つの将来の目標アドレスは、前記第1のジャンプ命令がコミットする時に、前記ローカルメモリに書き込まれる、項目15に記載の方法。
(項目18)
前記少なくとも1つの将来の目標アドレスをプリフェッチすることは、前記ローカルメモリが満杯ではない時に、2つの将来の目標アドレスをプリフェッチすることを含む、項目15に記載の方法。
(項目19)
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、該パイプラインをクリアすることをさらに含む、項目15に記載の方法。
(項目20)
前記ポインタを修正することは、該ポインタをポストインクリメントすることを含む、項目13に記載の方法。
(項目21)
前記第1の目標アドレスにジャンプすることは、該第1の目標アドレスを前記プロセッサの命令フェッチステージに提供することを含む、項目13に記載の方法。
(項目22)
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、前記一連のジャンプ命令の終了時とに書き込むことを含む、項目13に記載の方法。
(項目23)
パイプラインデジタルプロセッサでジャンプ動作を実施するための装置であって、
実行されるジャンプ命令の目標アドレスを記憶するメモリテーブルと、
ローカルメモリと、
該メモリテーブルの中の目標アドレスに対するポインタを参照するジャンプ命令の実行を制御するためのジャンプ命令制御ユニットと
を備え、
該ジャンプ命令制御ユニットは、第1の目標アドレスにジャンプする第1のジャンプ命令に応答して、
該メモリテーブルの中の第2の目標アドレスを指すようにポインタを修正することと、
該メモリテーブルから少なくとも1つの将来の目標アドレスをプリフェッチすることと、
該少なくとも1つの将来の目標アドレスを該ローカルメモリに書き込むことと
を行う、装置。
(項目24)
前記ジャンプ命令制御ユニットは、前記第2のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第2の目標アドレスにアクセスするように構成されている、項目23に記載の装置。
(項目25)
前記ジャンプ命令制御ユニットは、前記第2のジャンプ命令がコミットする時に、前記ローカルメモリから前記第2の目標アドレスを回収するようにさらに構成されている、項目24に記載の装置。
(項目26)
前記ジャンプ命令制御ユニットは、前記第1のジャンプ命令がコミットする時に、前記少なくとも1つの将来の目標アドレスを前記ローカルメモリに書き込むように構成されている、項目24に記載の装置。
(項目27)
前記ローカルメモリが満杯ではない時に、2つの目標アドレスをプリフェッチするように構成されている、項目24に記載の装置。
(項目28)
前記デジタルプロセッサは、パイプラインを含み、前記ジャンプ命令制御ユニットは、誤予測条件を検出することに応答して、該パイプラインをクリアするように構成されている、項目24に記載の装置。
(項目29)
パイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
該プロセッサの分岐予測器で第1のジャンプ命令を学習することであって、該第1のジャンプ命令は、該メモリテーブルの中の第1の目標アドレスに対するポインタを参照する、ことと、
該プロセッサのフェッチブロックで該第1のジャンプ命令をフェッチすることと、
該分岐予測器で該第1のジャンプ命令を検出することと、
ローカルメモリから該第1のジャンプ命令に対応する該第1の目標アドレスを読み取り、該第1の目標アドレスを該プロセッサの該フェッチブロックに提供することと、
該メモリテーブルの中の第2の目標アドレスを指すように該ポインタを修正することであって、該第2の目標アドレスは、第2のジャンプ命令に対応する、ことと、
該メモリテーブルから将来の目標アドレスをプリフェッチすることと、
該第1のジャンプ命令がコミットする時に、該プリフェッチされた将来の目標アドレスを該ローカルメモリに書き込むことと、
該第1のジャンプ命令がコミットする時に、該ローカルメモリから該第1の目標アドレスを回収することと
を含む、方法。
(項目30)
前記第2のジャンプ命令を検出することと、前記ローカルメモリの中の前記第2の目標アドレスを読み取ることとをさらに含む、項目29に記載の方法。
(項目31)
前記第2のジャンプ命令がコミットする時に、前記ローカルメモリから前記第2の目標アドレスを回収することをさらに含む、項目30に記載の方法。
(項目32)
前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、前記パイプラインをクリアすることをさらに含む、項目30に記載の方法。
(項目33)
前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、該一連のジャンプ命令の終了時とに書き込むことを含む、項目29に記載の方法。
本発明のさらなる理解のために、参照することにより本明細書に組み込まれる、添付の図面を参照する。
図1は、本発明の実施形態による、ジャンプ動作を実施するための装置の簡略ブロック図である。 図2は、本発明の実施形態による、ジャンプ動作を実施するためのジャンプ制御装置の簡略ブロック図である。 図3は、分岐予測器の読取ポインタの計算およびメモリテーブルを読み取るためのパラメータを例示する、ジャンプ制御装置のブロック図である。 図4Aは、ローカルメモリの中の推論的な空条件の検出を例示する、ジャンプ制御装置のブロック図である。 図4Bは、ローカルメモリの中の推論的な空条件の検出を例示する、ジャンプ制御装置のブロック図である。 図5Aは、ローカルメモリの制御を例示する、ジャンプ制御装置のブロック図である。 図5Bは、ローカルメモリの制御を例示する、ジャンプ制御装置のブロック図である。 図6Aは、誤予測条件の処理を例示する、ジャンプ制御装置のブロック図である。 図6Bは、誤予測条件の処理を例示する、ジャンプ制御装置のブロック図である。 図7Aは、本発明の実施形態による、ジャンプ制御装置の動作を例示する、概略図である。 図7Bは、本発明の実施形態による、ジャンプ制御装置の動作を例示する、概略図である。
本発明の実施形態による、ジャンプ命令を処理するためのデジタルプロセッサを図1に示す。デジタルプロセッサは、計算コア10と、メモリ12とを含む。計算コア10およびメモリ12は、従来技術で既知であるように、パイプラインアーキテクチャを有し得る。計算コア10は、ステージA−Lを有する、パイプライン20を含み得る。命令実行に関与する機能は、命令フェッチブロック50と、分岐予測器51と、命令デコーダ53と、データアドレス発生器(DAG)54と、計算ブロックと、コミットブロック61とを含む、パイプライン20の機能ブロックによって実施される。異なるプロセッサ設計は、より多い、またはより少ないステージを有する場合があり、また、各機能が、パイプラインの1つ以上のステージを必要とする場合があることを理解されるであろう。また、ステージは、2つ以上の機能を実施し得る。
デジタルプロセッサは、様々な動作を実施するための命令を含む、命令セットを実行するように構成されている。本発明の実施形態によれば、命令セットは、本明細書で「ジャンプ二重間接」または「JDI」命令と称される、新規のジャンプ命令を含む。特定のアルゴリズムを起動する深いパイプラインプロセッサでは、JDI命令は、ジャンプ動作を実行する間、パイプラインバブルを回避することができる。
JDI命令の実行と関連するデジタルプロセッサの構成要素を図1に示す。計算コア10は、JDI制御ユニット30と、ローカルJDIメモリ32とを含む。加えて、メモリ12は、メモリテーブル34を含む。以下に説明するように、JDI制御ユニット30、ローカルJDIメモリ32、およびメモリテーブル34は、JDI命令を実行するように、パイプライン20の構成要素と相互作用する。
ジャンプ二重間接命令(JDI)は、実行されるルーチンの目標アドレスがジャンプ命令の実行前に既知である時に、ジャンプ動作を加速することができる。命令構文は、以下の通りであることができる。
JUMP([Px++]);
ここで、Pxは、メモリテーブル34の中のエントリに対するポインタを含む、一組のポインタレジスタのうちの1つである。メモリテーブル34の中のエントリは、ジャンプ命令の目標アドレスを含む。加えて、ポインタは、ジャンプ命令がコミットする時に修正されるポストである。次の目標アドレスを得る際には、「ジャンプ二重間接」という名称で示唆されるように、2つの間接のレベルがある。
JDI命令は、次の2つの条件が満たされる時に加速することができる。(1)目標アドレスを前もって計算して、メモリテーブル34に配置することができ、かつ(2)JDI命令を、パイプライン20の分岐予測器によって学習することができる。目標アドレスは、JDI命令の実行前に事前計算されて、メモリテーブル34に記憶される。以下に説明するように、複数のJDI命令による使用のために、複数の目標アドレスをメモリテーブル34に書き込むことができる。メモリテーブルは、「エンドテーブル」マーカーによって終了し得る。
JDI命令の目標アドレスは、事前計算されて、JDI命令が実行される順番でメモリテーブル34に書き込まれる。メモリテーブル34の中の各目標アドレスは、実行されるサブルーチンの第1の命令のアドレスを含み得る。ポインタレジスタPxは、メモリテーブル34の開始場所を指すように初期化される。メモリテーブル34に対応するJDI命令のうちのいくつかまたは全てがループで実行される場合、ポインタレジスタPxは、各ループ反復に関するループの開始を指すように初期化される。プロセッサは、単一のメモリテーブル34を使用することができ、または、2組以上のサブルーチンを実行することが所望される場合は、2つ以上のメモリテーブルを使用することができる。ポインタレジスタPxは、メモリテーブルの中の開始場所を指すように初期化される。
JDI命令は、各命令が初めて実行される時に、分岐予測器によって学習される。分岐予測器は、初めてアプリケーションプログラムで実行されるジャンプ命令を識別し、それらの命令のアドレスを記憶することによって、ジャンプ命令を「学習」する。プログラムの後続の反復に関してジャンプ命令のアドレスがアクセスされた時に、ジャンプ命令は、解読前に即時に予測され、命令の実行を開始することができる。分岐予測器によって学習されると、JDI命令は、パイプライン20の中で早期に検出され、予測が行われる。
JDI予測は、メモリテーブル34の中の目標アドレスを前もって読み取るという原理に基づいて動作する。JDI命令を実行する時には、アドレス[Px]に位置する現在のJDI命令の目標アドレスを含む、最高で3つの目標アドレスを読み取ってもよい。加えて、アドレス[Px+offset]に位置する、将来のJDI命令の目標アドレスが読み取られる。以下に説明するように、1つまたは2つの将来の目標アドレスが読み取られてもよい。将来の目標アドレスの小さいテーブル(図1のローカルJDIメモリ32)は、JDI命令が、パイプラインのフェッチステージで検出された時に、推論的に予測を行うように利用される。JDI命令が実行されるたびに、エントリをローカルJDIメモリ32に追加するように、付加的なプリフェッチが行われる。
JDI制御ユニット30を、図2にさらに詳細に示す。図2の実施形態では、JDI制御ユニット30は、JDI制御論理100と、JDI検出ブロック102と、MEM0パイプ110と、MEM1パイプ112と、予測JDIパイプ120と、予測外JDIパイプ122とを含む。JDI制御ユニット30は、JDI命令を実行するように、少なくともフェッチブロック50と、分岐予測器51と、デコーダ53と、DAG54、ならびにメモリテーブル34と、ローカルJDIメモリ32とを含む、パイプライン20の要素とともに動作する。JDI制御論理100は、フェッチサイズおよびオフセット値をDAG54に提供する。DAG54は、JDI命令によって指定されるポインタレジスタPxに対応する、ポインタレジスタ140を含む。DAG54はまた、メモリテーブル34からプリフェッチされるべき目標アドレスを指す、プリフェッチレジスタ142を含む。ポインタレジスタ140は、テーブル34の中の現在の目標アドレスを指し、プリフェッチレジスタ142は、メモリテーブル34の中の将来の目標アドレスを指す。
MEM0パイプ110、MEM1パイプ112、予測JDIパイプ120、および予測外JDIパイプ122は、1つもしくは複数のJDI命令の実行に関する情報を搬送する。現在の目標アドレスは、メモリテーブル34からMEM0パイプ110にロードされる。1つもしくは複数の将来の目標アドレスは、メモリテーブル34からMEM1パイプ112にロードされる。MEM0パイプ110およびMEM1パイプ112は、パイプライン20のステージHからステージLまで延在し得る。メモリテーブル34から読み取られる目標アドレスは、パイプライン20のステージHで、MEM0パイプ110およびMEM1パイプ112にロードされ得る。予測JDI命令の指標は、予測JDIパイプ120にロードされ、予測外JDI命令の指標は、予測外JDIパイプ122にロードされる。JDIパイプ120および122は、パイプライン20のステージEからステージLまで延在し得る。パイプ110、112、120、および122にロードされる値は、連続したクロックサイクルでそれぞれのパイプを通して進み、以下に説明するように利用される。
JDI制御論理100は、ローカルJDIメモリ32を制御する。特に、JDI制御論理100は、プリフェッチされた目標アドレスのローカルJDIメモリ32の中への書き込み、ローカルJDIメモリ32からの目標アドレスの読み取り、および各JDI命令がコミットした後にローカルJDIメモリ32からの目標アドレスの回収を制御する。
ローカルJDIメモリ32は、先入れ先出し(FIFO)構成を有し得る。いくつかの実施形態では、ローカルJDIメモリ32は、4の深さとも称される、4つの場所を有する。図2−7の実施形態では、ローカルJDIメモリ32は、FIFO構成を有し、「ローカルJDI FIFO」と表記される。このJDIメモリ32の構成は、単に一例として与えられるものであり、本発明の範囲を限定するものではないことを理解されるであろう。
ジャンプ二重間接命令は、複数のサブルーチンの目標アドレスが事前に既知である時に、ジャンプを加速する。目標アドレスは、メモリテーブル34に記憶され、ポインタレジスタ140の中の現在のポインタは、デコーダ53の中のJDI命令の現在の目標アドレスを指す。プリフェッチレジスタ142の第2のポインタは、まだパイプライン20に進入していない将来のJDI命令のための、メモリテーブル34の中の目標アドレスを指す、先読みポインタである。第2のポインタは、プリフェッチされる目標アドレスのメモリテーブル34の場所を決定するために、オフセット値およびフェッチサイズを使用する。
デコーダ53のJDI命令は、DAG54に、プリフェッチされたアドレスをJDIメモリ32に送信させる。したがって、JDIメモリ32は、パイプライン20の中で早期に分岐予測器51によって予測される、将来のJDI命令のアドレスを保持する。予測されたJDI命令がコミットブロック61においてコミットする時に、それは、JDIメモリ32から対応する目標アドレスを回収し、JDI命令が解読ステージ53を通過した時に、メモリテーブル34からプリフェッチされた目標アドレスをJDIメモリ32に書き込む。
下記の表1は、JDI命令、ポインタレジスタ140に含まれる対応するポインタ、およびメモリテーブル34に含まれる目標アドレスの実施例を示す。第1のJDI命令JDI0は、メモリテーブル34の中の場所327に対するポインタを含む、レジスタP0を参照する。場所327は、目標アドレス0198を含む。命令JDI0が、パイプライン20を通して進み、コミットするものと仮定する。JDIメモリ32は、命令JDI0がパイプラインを通して進んだ時に空であった。したがって、命令JDI0は、2つの目標アドレス0208および0278が、メモリテーブル34からプリフェッチされるようにした。命令JDI0がコミットする時に、2つのプリフェッチされた目標アドレスをJDIメモリ32に書き込む。
Figure 0005611972
複数のポインタは、JDIメモリ32の動作と関連する。レジスタ130の中のアーキテクチャの書込ポインタff_wrptr(図3)は、書き込むことができるJDIメモリの中の次の場所を指す。レジスタ132のアーキテクチャの読取ポインタff_rdptrは、読み取ることができるJDIメモリの中の次の場所を指す。レジスタ134の中の分岐予測器の読取ポインタbp_rdptrは、分岐予測器51によって検出される次のJDI命令の目標アドレスを読み取るように、プリインクリメントする。上記の実施例では、命令JDI0がコミットした後の、JDIメモリ32の読取ポインタff_rdptrおよび書込ポインタff_wrptrの状態は、以下の通りである。ff_rdptrは、目標アドレス0208を含む、場所0を指し、ff_wrptrは、JDIメモリ32の次の空場所である、場所2を指す。
分岐予測器の読取ポインタbp_rdptrは、パイプライン20に進入する次のJDI命令の目標アドレスを含むJDIメモリ32のエントリを指す。分岐予測器の読取ポインタは、次式で与えられる。
bp_rdptr=ff_rdptr+sum(ujdi)+sum(jdi)+sum(pjdi) (1)
式中、sum(ujdi)は、予測外JDIパイプ122を通して進む予測外JDI命令の合計であり、sum(jdi)は、予測JDIパイプ120を通して進む予測JDI命令の合計であり、sum(pjdi)は、パイプライン20の上流ステージの予測JDI命令の合計である。
したがって、分岐予測器の読取ポインタは、現在パイプラインを通して進むあらゆるJDI命令を考慮する。
将来のFIFOのサイズパラメータfuture_fifo_sizeは、予測JDIパイプ120および予測外JDIパイプ122の中の全てのJDI命令がコミットして、それらのプリフェッチされた目標アドレスをJDIメモリ32に書き込んだ時の、JDIメモリ32の状態を表す。JDI命令がコミットする時に、それらはまた、JDIメモリ32からアドレスを回収する。将来のFIFOサイズは、新しいJDI命令が解読される時に、メモリテーブル34から正しい目標アドレスをプリフェッチするように、DAG54を制御するために利用される。将来のFIFOサイズは、次式で与えられる。
future_fifo_size=fifo_entries+sum(pfetch_addr)−sum(jdi) (2)
式中、fifo_entriesは、JDIメモリ32の中の現在の目標アドレスの数であり、sum(pfetch_addr)は、メモリテーブル34からプリフェッチされ、MEM1パイプ112を通して進むアドレスの合計であり、sum(jdi)は、予測JDIパイプ120を通して進む予測JDIと、予測外JDIパイプ122を通して進む予測外JDIとの合計である。
分岐予測器の読取ポインタbp_rdptrを決定する、JDI制御論理100の要素を図3に示す。加算ユニット200は、パイプ120および122を通過中のJDI命令の総数sumt(jdi)を提供するように、予測JDIパイプ120の中の予測JDI命令の数と、予測外JDIパイプ122の中の予測外JDI命令の数とを組み合わせる。加算ユニット202は、分岐予測器の読取ポインタbp_rdptrを提供するように、パイプライン20のステージ初期において、通過中のJDI命令の数sumt(jdi)と、読取ポインタff_rdptrと、予測JDI命令の数sum(pjdi)とを組み合わせる。上記に示されるように、分岐予測器の読取ポインタは、パイプラインに進入するように、次のJDI命令のJDIメモリ32の中の目標アドレスを指す。
図3にさらに示されるように、JDI制御論理100は、将来のFIFOサイズfuture_fifo_sizeを提供するように、上述の式(2)による値を組み合わせる、加算ユニット210、212、および214を含む。将来のFIFOサイズは、DAGオフセットおよびフェッチサイズ論理220に提供される。DAGオフセットおよびフェッチサイズ論理220は、下記の表2に従って、フェッチサイズおよびオフセット値をプリフェッチレジスタ142(図2)に提供する。
Figure 0005611972
表2では、「future_fifo_size」欄は、現在パイプ120および122を通過中である全てのJDI命令がコミットして、あらゆるプリフェッチされた目標アドレスをJDIメモリ32に書き込んだ時の、JDIメモリ32の状態を表す。「ステージEのJDI」欄は、現在のJDI命令がステージDにある時に、JDI命令がパイプラインのステージEにあるといった、可能性は低いが、可能である状態を説明する。「オフセット」欄は、メモリテーブル34の中の現在の目標アドレスから、プリフェッチされる第1の目標アドレスへのオフセットを表す。「Fetch_size」欄は、プリフェッチされる目標アドレスの数を表す。「fifoサイズ増加」欄は、現在のJDI命令がコミットする時の、JDIメモリ32の中の目標アドレス数の正味の変化を表す。
解読JDI命令は、JDI命令がコミットする時にJDIメモリ32が満杯にならないことが分かっている場合に、メモリテーブル34から2つの目標アドレスをプリフェッチする。そうでない場合は、1つの目標アドレスがプリフェッチされる。2つの目標アドレスをプリフェッチすることで、JDIメモリ32を満たすことを可能にし、それによって、JDIメモリの深さに等しい、多数の目標アドレスを予測に利用できる。JDI命令がコミットする時に、JDIメモリ32が満杯になるかどうかは、パイプラインの中の各JDI命令がコミットする時にJDIメモリに関与する変化を加算することによって、決定することができる。例えば、JDIメモリが空であり、第1のJDIメモリJDI0が解読された場合、命令JDI0がコミットする時にJDIメモリが2つの目標アドレスを保持することが分かる。
第1のJDI命令は、2つの目標アドレスをJDIメモリに書き込むが、JDIメモリが空であった場合、どちらも回収しない。第2の命令JDI1が少し後に解読される場合、次いで命令JDI1がコミットすると、JDIメモリが3つの目標アドレスを保持することが分かる。これは、命令JDI1は、2つのアドレスをプリフェッチするが、JDIメモリから1つのエントリ(命令JDI0によってプリフェッチされたエントリ)を回収するからである。将来のエントリの数がJDIメモリの深さに等しい場合は、1つの目標アドレスがプリフェッチされる。JDI命令は、満杯のJDIメモリからそれ自体の目標アドレスを回収し、即時に、1つのプリフェッチされたアドレスをその場所に書き込み、JDIメモリを満杯の状態に保つ。
以下、将来の目標アドレスのプリフェッチングの実施例を説明する。JDIメモリ32は、4つの場所を有し、メモリテーブル34は、それぞれ、命令JDI0−JDI3に対応する、目標アドレスadr0−adr3を含むものと仮定する。JDIメモリ32が空である時、ポインタレジスタ140は、アドレスadr0を指し、プリフェッチレジスタ142は、アドレスadr1を指す。命令JDI0は、アドレスadr0を指し、アドレスadr1およびadr2がプリフェッチされるようにする。したがって、JDIメモリ32は、命令JDI0がコミットする時に、アドレスadr1およびadr2を含む。アドレスadr0は、JDIメモリ32に配置されず、したがって、命令JDI0がコミットする時に、JDIメモリ32から回収されない。
命令JDI1が、パイプラインの中にある時に、それは目標アドレスadr1を指し、JDIメモリ32では2つのエントリが検出される。したがって、命令JDI1は、メモリテーブル34からアドレスadr3およびadr4をプリフェッチする。命令JDI1は、コミットする時にアドレスadr1を回収し、したがって、アドレスadr2、adr3、およびadr4をJDIメモリ32に残す。同様に、命令JDI2は、メモリテーブル34からアドレスadr5およびadr6をプリフェッチし、コミットする時にアドレスadr2を回収する。したがって、命令JDI2がコミットする時に、JDIメモリ32は、アドレスadr3、adr4、adr5、およびadr6によって満杯になる。
以降、残りの各JDI命令は、メモリテーブル34から1つのアドレスをプリフェッチし、コミットする時にJDIメモリ32から1つのアドレスを回収する。JDIメモリ32は、満杯の状態のままであり、最高で4つの将来のJDI命令のアドレスを、分岐予測ポインタによる予測に利用できる。
複数のJDI命令が間断なくパイプラインに進入する場合、分岐予測器の読取ポインタbp_rdptrは、JDIメモリ書込ポインタff_wrptrを超えて、プリフェッチされたアドレスがまだ書き込まれていないJDIメモリ32の中の場所を指す場合がある。これは、エラー状態であり、より多くのプリフェッチされた目標アドレスがJDIメモリ32に書き込まれるまで、プロセッサが待機することを必要とする。この事例に対処するために、図4に示されるように、推論的な空信号が発生される。比較器ブロック250は、分岐予測器の読取ポインタbp_rdptrを、JDIメモリの書込ポインタff_wrptrと比較する。2つのポインタが等しい場合、推論的な空信号がアサートされる。推論的な空信号は、フェッチブロック50を待ち状態にさせる。それ以降、いかなる予測JDI命令も、パイプラインに送信されない。推論的な空信号は、さらなる目標アドレスがJDIメモリに書き込まれる時にアサート解除され、そして動作を再開する。
推論的な空信号はまた、JDIメモリ32の中の未書込場所を指すことを回避するように、補正因子を分岐予測器の読取ポインタbp_rdptrの式(1)に提供する。再び図4を参照すると、推論的な空信号は、マルチプレクサ252の制御入力に供給される。マルチプレクサ252は、推論的な空信号がアサート解除された時に、通常の分岐予測器の読取ポインタbp_rdptrをJDIメモリ32に供給し、推論的な空信号がアサートされた時に、1つだけデクリメントされた分岐予測器の読取ポインタを供給する。加算ユニット254は、分岐予測器の読取ポインタをデクリメントする。
推論的な空信号がアサートされた時に、現在のJDIメモリ書込ポインタff_wrptrが、推論的な空ポインタspec_empty_ptrとして、レジスタ260に記憶される。推論的な空ポインタは、JDIメモリ32の中の対応する場所を回収しようと試みる、JDI命令の後の識別を可能にする。識別されたJDI命令は、そのアドレスがJDIメモリに書き込まれていないので、待ち状態であり、そのアドレスが分岐予測器の読取ポインタbp_rdptrによって分配されなかった命令である。
書込ポインタff_wrptrは、書き込むことができるJDIメモリの中の次の場所を指す。分岐予測器がJDI命令を高速で予測する場合、分岐予測器の読取ポインタbp_rdptrは、書込ポインタff_wrptrに追いついて、推論的な空状態を引き起こす。推論的な空状態である間にJDI命令が予測される場合、そのJDI命令は、推論的な空のJDI命令としてタグが付けられる。推論的な空のJDI命令の目標アドレスは、JDI命令が分岐予測器によって予測された場合には、JDIメモリからの予測に利用できない。
プロセッサは、以下の状態まで推論的な空状態のままである。(1)パイプラインの中の通常のJDI命令がコミットし、より多くのエントリをJDIメモリに書き込み、その時間中にいかなる予測も行われなかった。すなわち、その時間中に推論的な空のJDI命令が予測されなかった。または(2)推論的な空のJDI命令が、パイプラインの終わりに到達する。推論的な空のJDI命令が、コミットステージにおける誤予測信号を生じさせ、パイプラインをクリアする。推論的な空のJDI命令は、ポインタレジスタ140によって提供される目標アドレスへのジャンプを強制する。誤予測信号はまた、フェッチステージ50が命令のフェッチを再開することができるように、推論的な空状態をクリアする。
JDI予測の速度が高い場合、第4のJDI命令は、推論的な空のJDIである傾向がある。JDI0命令は、目標アドレス1および2をJDIメモリ32に書き込む。命令JDI1およびJDI2がその後すぐに予測された場合、命令JDI3は、目標アドレス3がまだJDIメモリに書き込まれていないので、推論的な空状態を有効にする。分岐予測器が命令JDI3を予測する前に、命令JDI1がコミットステージに到達し、目標アドレス3をJDIメモリに書き込む場合、誤予測を伴わずに、推論的な空状態は無効になる。目標アドレス3がJDIメモリに書き込まれる前に、命令JDI3が予測された場合、推論的な空状態は、命令JDI3がコミットステージで誤予測信号を生じさせた時に、無効になる。誤予測信号は、命令JDI3が予測された時に、それに対する目標アドレスが提供されなかったことを示す。
付加的なJDI制御機能を図5および6に例示する。予測JDIパイプ120を通して進むJDI命令の目標アドレスは、メモリテーブル34からMEM0パイプ110にロードされる(図6)。MEM0パイプ110からの目標アドレスは、JDIメモリ32から回収されるべきであるプリフェッチされた目標アドレスと比較される。比較は、図6に示される比較器300によって行われる。比較器300は、パイプライン20のステージJに位置する。MEM0パイプ110からの目標アドレスが、JDIメモリ32からプリフェッチされた目標アドレスに整合しない場合、JDI誤予測信号を発生させる。
MEM0パイプ110の目標アドレスがJDIメモリ32からの目標アドレスに整合すると仮定すると、コミットステージ61の中のJDI命令は、JDIメモリ32から対応するエントリを回収し、プリフェッチされたアドレスをJDIメモリ32に書き込み、JDIメモリ32の読取ポインタおよび書込ポインタを更新する。
図5を参照すると、JDI制御論理100は、プリフェッチされた目標アドレスが、メモリテーブル34の終わりに到達したかどうかを決定するように、end_table検出器308および310を含む。目標アドレスは、end_table検出器308および310からレジスタ312および314に供給される。end_table検出論理308および310は、MEM1パイプ112を通して進むプリフェッチされた目標アドレスを監視する。end_tableマーカーがMEM1パイプ112の出力で検出された場合、end_tableマーカーは、JDIメモリ32への書き込みが遮断される。図5の実施例では、2つの目標アドレスがプリフェッチされた。第1のプリフェッチされた目標アドレス0198は、有効であり、JDIメモリ32に書き込まれた。第2のプリフェッチされた目標アドレスは、end_tableマーカーであった。end_tableマーカーの検出に応答して、まだパイプ112を通して進んでいるプリフェッチされた目標アドレスを取り消すように、取消プリフェッチ信号がMEM1パイプ112に送信される。これらの目標アドレスは、規定のメモリテーブル34の範囲外にある。取消プリフェッチ信号は、MEM1パイプ112からの変数sum(pfetch_addr)が補正されるように利用される。その結果、将来のFIFOサイズパラメータは、プリフェッチレジスタ142のプリフェッチポインタに、メモリテーブル34の中のend_tableの場所を指させるように再調整される。これは、パイプラインに進入してエンドテーブルマーカーをプリフェッチすることを新しいJDI命令に強制する。
図5に示されるように、ポインタ制御論理320は、予測JDIパイプ120からJDIコミット信号を受信し、end_table検出器308および310から有効なプリフェッチアドレス信号を受信する。ポインタ制御論理320は、有効なプリフェッチアドレスの数を計算し、制御信号をマルチプレクサ330に提供する。制御信号は、0、1、または2で、有効なプリフェッチアドレスの数を示す。マルチプレクサ330は、その入力で、JDIメモリ32の書込ポインタff_wrptrと、加算ユニット332によって+1だけインクリメントした書込ポインタと、加算ユニット334によって+2だけインクリメントした書込ポインタとを受信する。マルチプレクサ330の出力は、更新した書込ポインタをJDIメモリ32に提供する。
JDI命令がコミットする時に発生される回収エントリ信号は、対応する目標エントリをJDIメモリ32から回収させ、JDIメモリ32の読取ポインタff_rdptrを更新するように使用される。回収エントリ信号は、制御信号として、マルチプレクサ340に提供される。マルチプレクサ340は、その入力で、読取ポインタff_rdptrと、加算ユニット342によって+1だけインクリメントした読取ポインタとを受信する。マルチプレクサ340の出力は、更新した読取ポインタである。
本明細書で「JDI誤予測」状態と称される複数の状態は、パイプラインをクリアさせ、したがって、JDI誤予測ペナルティを被る。以下の状態は、JDI誤予測を発生する。(1)コミットし、かつ、ローカルJDIメモリがそのJDI命令の目標アドレスを含まない(FIFOが空)と決定される第1のJDI命令、(2)前述した推論的な空状態、すなわち、分岐予測器の読取ポインタbp_rdptrが、JDIメモリ32の書込ポインタff_wrptrを超えた時に予測された、JDI命令、(3)コミットしている予測外JDI命令、および(4)JDIメモリ32にあるそのアドレスが、メモリテーブル34からの目標アドレスに整合しない予測JDI命令。
図6を参照すると、JDI誤予測論理400は、上述の誤予測状態を表す信号を受信し、計算コア10のフェッチブロック50およびプログラムシーケンサにJDI誤予測信号を供給する。JDI誤予測信号はまた、以下に説明するように、フェッチブロックに対する、およびプログラムシーケンサに対するJDI目標アドレスの出力を制御する。JDI誤予測信号は、パイプラインをクリアさせる。JDI誤予測論理400は、比較器300から予測JDI不整合信号を受信し、予測外JDIパイプ122から予測外JDIコミット信号を受信する。加えて、JDI誤予測論理400は、FIFO空論理410からFIFO空信号を受信し、推論的な空論理412から推論的な空信号を受信する。誤予測状態を示す任意の信号がアサートされた場合、JDI誤予測信号がアサートされ、パイプラインをクリアさせる。
FIFOの空の誤予測状態を決定するために、加算ユニット420は、書込ポインタff_wrptrから読取ポインタff_rdptrを減算して、JDIメモリ32の中のエントリの数を決定する。JDI命令がコミットする時にエントリの数がゼロであると、FIFO空論理410によって決定された場合、FIFOの空の誤予測信号がJDI誤予測論理400に提供される。
コミットポインタff_cmpptrは、JDI命令がコミットするJDIメモリ32から、どのアドレスを回収するべきかを決定する。加算ユニット430は、予測JDIパイプ120の最後の3つのステージの中のJDI命令の合計を決定する。加算ユニット432は、コミットポインタff_cmpptrを提供するように、加算ユニット430の結果を読取ポインタff_rdptrと組み合わせる。コミットポインタは、JDIメモリ32、および推論的な空論理412に提供される。JDI命令がコミットする時にコミットポインタff_cmpptrが推論的な空ポインタと等しいと、推論的な空論理412によって決定された場合、推論的な空の誤予測信号が、JDI誤予測論理400に提供される。
図6に示されるように、コミットステージの中のマルチプレクサ450は、第1の入力452で、ローカルJDIメモリ32から予測目標アドレスを受信する。分岐予測器の読取ポインタbp_rdptrによって、ローカルJDIメモリ32の中で予測目標アドレスがアクセスされる。図6の実施例では、分岐予測器51の中のJDI命令pjdi3の予測目標アドレスは、マルチプレクサ450の第1の入力452に供給される。マルチプレクサ450は、第2の入力454で、MEM0パイプ110から、コミットステージの中の現在のJDI命令の目標アドレスを受信する。マルチプレクサ450は、JDI誤予測論理400からのJDI誤予測信号によって制御される。特に、JDI誤予測信号がアサートされない時に、マルチプレクサ450は、JDI目標アドレスとして、予測目標アドレスをフェッチブロックおよびプログラムシーケンサに供給する。JDI誤予測信号がアサートされた時に、マルチプレクサ450は、JDI目標アドレスとして、コミットステージの中の現在のJDI命令の目標アドレスを供給する。
JDI命令の処理を、図7の概略図に例示する。図7では、理解し易いように、プロセッサのパイプラインアーキテクチャを無視する。JDI命令は、ブロック500の中の一連の命令から検出される。検出したJDI命令の目標アドレスは、MEM0パイプ110にロードされる。動作502で、将来の目標アドレスがメモリテーブル34からプリフェッチされ、プリフェッチされた目標アドレスは、MEM1パイプ112にロードされる。JDI命令は、処理中に、ブロック510の予測されたもの、ブロック512の予測外のもの、ブロック514の処理される第1のJDI命令、またはブロック516の推論的な空のJDI命令として識別される。動作530で、MEM1パイプ112からのend_tableマーカーが検出される。end_tableマーカーが検出されなかった場合、動作532で、ローカルJDIメモリ32の書込ポインタが更新される。end_tableマーカーが検出された場合、動作534で、JDIメモリ32の書込ポインタは、その現在の状態に保持される。プリフェッチされた目標アドレスは、検出したJDI命令がコミットする時にローカルJDIメモリ32に書き込まれる。
動作540での分岐予測器の読取ポインタの更新は、論理機能542によって制御される。特に、分岐予測器の読取ポインタは、JDI命令が予測されたものであり、第1のJDI命令ではなく、かつ推論的な空のJDI命令ではないと、論理機能542によって決定された場合に更新される。
誤予測状態は、論理機能544によって決定される。特に、JDI誤予測状態は、JDIが予測外であるか、第1のJDI命令であるか、推論的な空のJDI命令であるか、またはJDIメモリ32からのプリフェッチアドレスがMEM0パイプ110からの現在のアドレスに整合していないかが示される。これらの状態のうちのいずれかでは、JDI誤予測信号が、フェッチブロックおよびプログラムシーケンサに発行される。JDI誤予測信号はまた、マルチプレクサ450に対する制御信号として供給される。
動作550で、コミットステージでの現在のJDI命令の目標アドレスは、JDIメモリ32からのプリフェッチアドレスと比較される。比較は、論理機能552に従って、第1のJDI命令を除いて、あらゆるJDI命令について行われる。動作550の比較が失敗した(現在のJDI命令の目標アドレスが、プリフェッチされた目標アドレスに整合していない)場合、動作554で、JDIメモリ32のための読取および書込ポインタがクリアされる。比較結果はまた、論理機能544および論理機能560に供給される。あらゆるJDI命令について動作550の比較が失敗しなかった(現在のJDI命令の目標アドレスが、プリフェッチされた目標アドレスに整合している)場合、動作562で、JDIメモリ32の読取ポインタが更新され、プリフェッチされた目標アドレスを効果的に回収する。
前述のように、マルチプレクサ450は、JDI誤予測信号がアサートされなかった場合、JDI目標アドレスとして、JDIメモリ32から、プリフェッチされた目標アドレスを出力し、JDI誤予測信号がアサートされた場合、MEM0パイプ110から現在のアドレスを出力する。JDI目標アドレスは、さらなる処理のために、フェッチブロックおよびプログラムシーケンサに供給される。
性能を高めるための技術を、上記の表1を参照して説明する。目標アドレス0198、0208、および0278で開始するサブルーチンは、ループ中に複数回実行されるものと仮定する。性能は、追加の目標アドレスをメモリテーブル34に書き込むことによって高めることができる。特に、複数回実行される一連のJDIメモリの中の第1のJDIメモリの目標アドレスは、一連のJDI命令の開始時に、および再度、終了時に、メモリテーブル34に書き込まれる。表1に示されるように、目標アドレス0198は、メモリテーブル34の開始時に、および再度、複数回実行されるJDI命令の終了時に書き込まれる。この技術は、ループの1回目の実行以外は、一連の中の最後のJDI命令を実行するたびのJDI誤予測のペナルティを回避する。
したがって、本発明の少なくとも1つの実施形態の複数の局面を説明したが、当業者には、種々の変更、修正、および改良が容易に生じるものと理解されたい。このような変更、修正、および改良は、本開示の一部であるとされ、また本発明の精神と範囲内にあるものとされる。したがって、上述の説明および図面は単に例示を目的としたものである。

Claims (31)

  1. パイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
    該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
    該プロセッサによって実行されている第1のジャンプ命令を検出することであって、該第1のジャンプ命令は、該メモリテーブルの中の第1の目標アドレスに対するポインタを参照する、ことと、
    該プロセッサが、
    該第1の目標アドレスにジャンプすることと、
    該メモリテーブルの中の第2の目標アドレスを指すように該ポインタを修正することであって、該第2の目標アドレスは第2のジャンプ命令に対応する、ことと
    を行うことによって、該第1のジャンプ命令を実行することと
    を含み、
    該第1のジャンプ命令を実行することは、
    該メモリテーブルから少なくとも1つの将来の目標アドレスをプリフェッチすることと、
    該少なくとも1つの将来の目標アドレスをローカルメモリに書き込むことと
    をさらに含む、方法。
  2. 前記第2のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第2の目標アドレスにアクセスすることをさらに含む、請求項に記載の方法。
  3. 前記ポインタを修正することは、該ポインタをポストインクリメントすることを含む、請求項1に記載の方法。
  4. 前記第1のジャンプ命令を実行することは、前記メモリテーブルの中の前記第1の目標アドレスにアクセスすることをさらに含む、請求項1に記載の方法。
  5. 一連の命令の実行前に、前記メモリテーブルに書き込まれる前記目標アドレスを事前計算することをさらに含む、請求項1に記載の方法。
  6. 前記第2のジャンプ命令がコミットする時に、前記ローカルメモリから前記第2の目標アドレスを回収することをさらに含む、請求項に記載の方法。
  7. 前記少なくとも1つの将来の目標アドレスは、前記第1のジャンプ命令がコミットする時に、前記ローカルメモリに書き込まれる、請求項に記載の方法。
  8. 前記少なくとも1つの将来の目標アドレスをプリフェッチすることは、前記ローカルメモリが満杯ではない時に、2つの将来の目標アドレスをプリフェッチすることを含む、請求項に記載の方法。
  9. 前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、該パイプラインをクリアすることをさらに含む、請求項に記載の方法。
  10. 前記第1のジャンプ命令を検出することは、前記プロセッサの中の分岐予測器によって実施される、請求項1に記載の方法。
  11. 前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、該一連のジャンプ命令の終了時とに書き込むことを含む、請求項1に記載の方法。
  12. 分岐予測器を有するパイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
    該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
    該プロセッサの命令セットアーキテクチャにおいてジャンプ命令を提供することであって、該ジャンプ命令は、該メモリテーブルの中の目標アドレスに対するポインタを参照する、ことと、
    該分岐予測器が第1のジャンプ命令を検出することに応答して、第1の目標アドレスにジャンプすることと、
    該メモリテーブルの中の第2の目標アドレスを指すように該ポインタを修正することであって、該第2の目標アドレスは、第2のジャンプ命令に対応する、ことと
    該メモリテーブルから少なくとも1つの将来の目標アドレスをプリフェッチすることと、該少なくとも1つの将来の目標アドレスをローカルメモリに書き込むことと
    を含む、方法。
  13. 前記分岐予測器が前記第2のジャンプ命令を検出することに応答して、前記ローカルメモリの中の前記第2の目標アドレスにアクセスすることをさらに含む、請求項12に記載の方法。
  14. 前記第2のジャンプ命令がコミットする時に、前記ローカルメモリから前記第2の目標アドレスを回収することをさらに含む、請求項13に記載の方法。
  15. 前記少なくとも1つの将来の目標アドレスは、前記第1のジャンプ命令がコミットする時に、前記ローカルメモリに書き込まれる、請求項13に記載の方法。
  16. 前記少なくとも1つの将来の目標アドレスをプリフェッチすることは、前記ローカルメモリが満杯ではない時に、2つの将来の目標アドレスをプリフェッチすることを含む、請求項13に記載の方法。
  17. 前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、該パイプラインをクリアすることをさらに含む、請求項13に記載の方法。
  18. 前記ポインタを修正することは、該ポインタをポストインクリメントすることを含む、請求項12に記載の方法。
  19. 前記第1の目標アドレスにジャンプすることは、該第1の目標アドレスを前記プロセッサの命令フェッチステージに提供することを含む、請求項12に記載の方法。
  20. 前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、前記一連のジャンプ命令の終了時とに書き込むことを含む、請求項12に記載の方法。
  21. パイプラインデジタルプロセッサでジャンプ動作を実施するための装置であって、
    実行されるジャンプ命令の目標アドレスを記憶するメモリテーブルと、
    ローカルメモリと、
    該メモリテーブルの中の目標アドレスに対するポインタを参照するジャンプ命令の実行を制御するためのジャンプ命令制御ユニットと
    を備え、
    該ジャンプ命令制御ユニットは、第1の目標アドレスにジャンプする第1のジャンプ命令に応答して、
    該メモリテーブルの中の第2の目標アドレスを指すようにポインタを修正することと、
    該メモリテーブルから少なくとも1つの将来の目標アドレスをプリフェッチすることと、
    該少なくとも1つの将来の目標アドレスを該ローカルメモリ書き込むことと
    を行う、装置。
  22. 前記第2の目標アドレスは第2のジャンプ命令に対応し、前記ジャンプ命令制御ユニットは、第2のジャンプ命令を検出することに応答して、前記ローカルメモリの中の第2の目標アドレスにアクセスするように構成されている、請求項21に記載の装置。
  23. 前記ジャンプ命令制御ユニットは、前記第2のジャンプ命令がコミットする時に、前記ローカルメモリから前記第2の目標アドレスを回収するようにさらに構成されている、請求項22に記載の装置。
  24. 前記ジャンプ命令制御ユニットは、前記第1のジャンプ命令がコミットする時に、前記少なくとも1つの将来の目標アドレスを前記ローカルメモリに書き込むように構成されている、請求項22に記載の装置。
  25. 前記ジャンプ命令制御ユニットは、前記ローカルメモリが満杯ではない時に、2つの将来の目標アドレスをプリフェッチするように構成されている、請求項22に記載の装置。
  26. 前記デジタルプロセッサは、パイプラインを含み、前記ジャンプ命令制御ユニットは、誤予測条件を検出することに応答して、該パイプラインをクリアするように構成されている、請求項22に記載の装置。
  27. パイプラインデジタルプロセッサでジャンプ動作を実施するための方法であって、
    該プロセッサによって実行されるジャンプ命令の目標アドレスをメモリテーブルに書き込むことと、
    該プロセッサの分岐予測器で第1のジャンプ命令を学習することであって、該第1のジャンプ命令は、該メモリテーブルの中の第1の目標アドレスに対するポインタを参照する、ことと、
    該プロセッサのフェッチブロックで該第1のジャンプ命令をフェッチすることと、
    該分岐予測器で該第1のジャンプ命令を検出することと、
    ローカルメモリから該第1のジャンプ命令に対応する該第1の目標アドレスを読み取り、該第1の目標アドレスを該プロセッサの該フェッチブロックに提供することと、
    該メモリテーブルの中の第2の目標アドレスを指すように該ポインタを修正することであって、該第2の目標アドレスは、第2のジャンプ命令に対応する、ことと、
    該メモリテーブルから将来の目標アドレスをプリフェッチすることと、
    該第1のジャンプ命令がコミットする時に、該プリフェッチされた将来の目標アドレスを該ローカルメモリに書き込むことと、
    該第1のジャンプ命令がコミットする時に、該ローカルメモリから該第1の目標アドレスを回収することと
    を含む、方法。
  28. 前記第2のジャンプ命令を検出することと、前記ローカルメモリの中の前記第2の目標アドレスを読み取ることとをさらに含む、請求項27に記載の方法。
  29. 前記第2のジャンプ命令がコミットする時に、前記ローカルメモリから前記第2の目標アドレスを回収することをさらに含む、請求項28に記載の方法。
  30. 前記デジタルプロセッサは、パイプラインを含み、前記方法は、誤予測条件を検出することに応答して、前記パイプラインをクリアすることをさらに含む、請求項28に記載の方法。
  31. 前記目標アドレスをメモリテーブルに書き込むことは、ジャンプ命令の前記目標アドレスを、複数回実行される一連のジャンプ命令の開始時と、再度、該一連のジャンプ命令の終了時とに書き込むことを含む、請求項27に記載の方法。
JP2011539686A 2008-12-04 2009-12-03 デジタルプロセッサにおいてジャンプ動作を実施するための方法および装置 Active JP5611972B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/328,484 2008-12-04
US12/328,484 US7941653B2 (en) 2008-12-04 2008-12-04 Jump instruction having a reference to a pointer for accessing a branch address table
PCT/US2009/066547 WO2010065716A1 (en) 2008-12-04 2009-12-03 Methods and apparatus for performing jump operations in a digital processor

Publications (2)

Publication Number Publication Date
JP2012511212A JP2012511212A (ja) 2012-05-17
JP5611972B2 true JP5611972B2 (ja) 2014-10-22

Family

ID=41667396

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011539686A Active JP5611972B2 (ja) 2008-12-04 2009-12-03 デジタルプロセッサにおいてジャンプ動作を実施するための方法および装置

Country Status (5)

Country Link
US (1) US7941653B2 (ja)
EP (1) EP2368180B1 (ja)
JP (1) JP5611972B2 (ja)
CN (1) CN102349051B (ja)
WO (1) WO2010065716A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8407442B2 (en) * 2010-06-24 2013-03-26 International Business Machines Corporation Preemptive in-pipeline store compare resolution
WO2015013895A1 (zh) * 2013-07-30 2015-02-05 华为技术有限公司 指令的跳转处理方法和装置
CN104424037B (zh) * 2013-08-29 2018-12-14 中兴通讯股份有限公司 一种动态补丁函数的方法及装置
CN109308280B (zh) * 2017-07-26 2021-05-18 华为技术有限公司 数据处理方法和相关设备
US10445241B2 (en) * 2018-03-06 2019-10-15 Arm Limited Prefetching using offset data to access a pointer within a current data element for use in prefetching a subsequent data element
CN111325331B (zh) * 2018-12-14 2022-12-09 上海寒武纪信息科技有限公司 运算方法、装置及相关产品
CN109783143B (zh) * 2019-01-25 2021-03-09 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
US11288071B2 (en) 2020-05-04 2022-03-29 Morgan Stanley Services Group Inc. System and method for prefetching instructions and data

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5101341A (en) * 1988-08-25 1992-03-31 Edgcore Technology, Inc. Pipelined system for reducing instruction access time by accumulating predecoded instruction bits a FIFO
US5434985A (en) * 1992-08-11 1995-07-18 International Business Machines Corporation Simultaneous prediction of multiple branches for superscalar processing
SE509499C2 (sv) * 1996-05-03 1999-02-01 Ericsson Telefon Ab L M Metod och anordning för hantering av villkorliga hopp vid instruktionsbehandling i en pipeline-arkitektur
US6167506A (en) * 1997-11-17 2000-12-26 Advanced Micro Devices, Inc. Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location
JP2000132390A (ja) * 1998-10-23 2000-05-12 Toshiba Corp プロセッサ及び分岐予測器
US6308322B1 (en) * 1999-04-06 2001-10-23 Hewlett-Packard Company Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints
US6651162B1 (en) * 1999-11-04 2003-11-18 International Business Machines Corporation Recursively accessing a branch target address cache using a target address previously accessed from the branch target address cache
US6721877B1 (en) 2000-05-25 2004-04-13 Advanced Micro Devices, Inc. Branch predictor that selects between predictions based on stored prediction selector and branch predictor index generation
US7266676B2 (en) * 2003-03-21 2007-09-04 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets utilizing tag and data arrays

Also Published As

Publication number Publication date
WO2010065716A1 (en) 2010-06-10
EP2368180B1 (en) 2015-01-21
EP2368180A1 (en) 2011-09-28
CN102349051B (zh) 2015-04-29
CN102349051A (zh) 2012-02-08
JP2012511212A (ja) 2012-05-17
US7941653B2 (en) 2011-05-10
US20100146248A1 (en) 2010-06-10

Similar Documents

Publication Publication Date Title
JP5611972B2 (ja) デジタルプロセッサにおいてジャンプ動作を実施するための方法および装置
JP5198879B2 (ja) ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
US6389531B1 (en) Indexing branch target instruction memory using target address generated by branch control instruction to reduce branch latency
US7814469B2 (en) Speculative multi-threading for instruction prefetch and/or trace pre-build
JP5137948B2 (ja) ローカル及びグローバル分岐予測情報の格納
KR101099203B1 (ko) 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치
EP2087420B1 (en) Methods and apparatus for recognizing a subroutine call
US20060168432A1 (en) Branch prediction accuracy in a processor that supports speculative execution
US7266676B2 (en) Method and apparatus for branch prediction based on branch targets utilizing tag and data arrays
JP2011100466A5 (ja)
JP2008532142A5 (ja)
JPH0334024A (ja) 分岐予測の方法とそのための装置
JP2006520964A5 (ja)
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
JPH0588891A (ja) キヤツシユメモリ制御装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121029

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140203

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140428

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: 20140804

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140903

R150 Certificate of patent or registration of utility model

Ref document number: 5611972

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D04

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250