JP2017527916A - リテラルロード予測テーブルを使用してリテラルロード値を予測すること、ならびに関係する回路、方法、およびコンピュータ可読媒体 - Google Patents

リテラルロード予測テーブルを使用してリテラルロード値を予測すること、ならびに関係する回路、方法、およびコンピュータ可読媒体 Download PDF

Info

Publication number
JP2017527916A
JP2017527916A JP2017512912A JP2017512912A JP2017527916A JP 2017527916 A JP2017527916 A JP 2017527916A JP 2017512912 A JP2017512912 A JP 2017512912A JP 2017512912 A JP2017512912 A JP 2017512912A JP 2017527916 A JP2017527916 A JP 2017527916A
Authority
JP
Japan
Prior art keywords
literal load
instruction
entry
literal
load value
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.)
Pending
Application number
JP2017512912A
Other languages
English (en)
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 JP2017527916A publication Critical patent/JP2017527916A/ja
Pending legal-status Critical Current

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/383Operand prefetching
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

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

Abstract

リテラルロード予測テーブルを使用してリテラルロード値を予測すること、ならびに関係する回路、方法、およびコンピュータ可読媒体が開示される。一態様では、命令処理回路が、1つまたは複数のエントリを含んだリテラルロード予測テーブルを提供し、各エントリがアドレスと、リテラルロード値とを含む。命令ストリームにリテラルロード命令を検出すると、命令処理回路は、リテラルロード予測テーブルが、リテラルロード命令のアドレスを有するエントリを含んでいるかどうかを決定する。含んでいる場合、命令処理回路は、エントリに記憶されている予測リテラルロード値を、少なくとも1つの依存命令に提供する。命令処理回路はその後、予測リテラルロード値が、リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定する。不一致が存在する場合、命令処理回路は、予測ミスリカバリを起動する。少なくとも1つの依存命令は、実際のリテラルロード値を使用して再実行される。

Description

優先権出願
本出願は、その内容の全体が本明細書に組み込まれる、2014年9月12日に出願された「PREDICTING LITERAL LOAD VALUES USING A LITERAL LOAD PREDICTION TABLE, AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA」と題する米国特許出願第14/484,659号の優先権を主張する。
本開示の技術は、一般に、コンピュータプロセッサによって提供されるリテラルロード命令に関する。
現代のコンピュータプロセッサによって実行されるコンピュータプログラムは、リテラル値を頻繁に用いる場合がある。本明細書で使用する「リテラル値」は、コンピュータプログラムのソースコードにおいてそれ自体として表される値(たとえば、25という数字、または「Hello World」という文字列)である。リテラル値は、コンピュータプログラムが、コンピュータプログラムの実行中に変わらない、またはまれにしか変わらない値を表現し、利用するための便利な手段を与えることができる。コンピュータプログラムの実行中にアクセスされる複数のリテラル値は、「コンスタントプール」として知られるデータのブロックとしてメモリにまとめて記憶される場合がある。
コンピュータプログラムによってロード命令が用いられて、指定されたアドレスにあるリテラル値(すなわち、「リテラルロード値」)にアクセスし、処理パイプラインのロード命令に続く1つまたは複数の後続の命令で使用するために、リテラルロード値をレジスタに置く場合がある。そのようなロード命令を、本明細書では「リテラルロード命令」と呼び、入力としてリテラルロード値を利用する後続の命令を、「依存命令」と呼ぶ。いくつかのコンピュータアーキテクチャでは、リテラルロード命令が、コンスタントプールにおけるリテラルロード値の位置を、リテラルロード命令自体のアドレスと相対的なアドレスとして指定する場合がある。たとえば、以下の命令は、ARMアーキテクチャによって使用される場合があるリテラルロード命令および後続の依存命令を示す。
LDR R0,[PC,#0x40];プログラムカウンタ(PC)+0x40+8に記憶されているリテラルロード値を取り出して、レジスタR0に入れる
ADD R1,R0,R0;レジスタR0内の値をそれ自体に加え、結果をレジスタR1に記憶することによってリテラルロード値を使用する。
しかしながら、多くの従来のプロセッサに固有のデータキャッシュ待ち時間により、リテラルロード値をレジスタにロードするとき、ロード命令が、「load:useペナルティ」を受けるおそれがある。load:useペナルティは、データキャッシュ待ち時間に起因する、ロード命令のディスパッチングと後続の依存命令のディスパッチングとの間で経過し得る最小数のプロセッササイクルを指す。たとえば、上記の例示的なコードでは、LDR命令によって受けたload:useペナルティが経過するまで、ADD命令をディスパッチすることができない。ロード命令がデータを返すまで、依存命令をディスパッチすることができないので、load:useペナルティは、処理パイプライン内に十分に利用されないプロセッササイクルの「バブル」が出現するという結果になるそれがある。
詳細な説明で開示する態様は、リテラルロード予測テーブルを使用してリテラルロード値を予測することを含む。関連する回路、方法、およびコンピュータ可読媒体も開示される。この点について、一態様では、命令処理回路が、リテラルロード値の予測を生成するために、およびリテラルロード値予測ミスを検出するために使用されるリテラルロード予測テーブルを提供する。リテラルロード予測テーブルは、1つまたは複数のエントリを含み、各エントリが、アドレスと、予測リテラルロード値とを含む。命令ストリームにリテラルロード命令を検出すると、命令処理回路は、リテラルロード予測テーブルが、リテラルロード命令に対応するアドレスを有するエントリを含んでいるかどうかを決定する。含んでいる場合、命令処理回路は、エントリに記憶されている予測リテラルロード値を、少なくとも1つの依存命令に提供する。リテラルロード命令が実際に実行されるとき、命令処理回路は、あらかじめ少なくとも1つの依存命令に提供された予測リテラルロード値が、リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定する。予測リテラルロード値および実際のリテラルロード値が一致しない場合、命令処理回路は、予測ミスリカバリを起動する。いくつかの態様では、予測ミスリカバリは、実際のリテラルロード値でエントリを更新すること、リテラルロード予測テーブルからエントリをフラッシュすること、および/またはエントリにdo-not-predictインジケータを設定することを含むことができる。少なくとも1つの依存命令は、次いで、実際のリテラルロード値を使用して再実行されてよい。このようにして、命令処理回路は、load:useペナルティを受けることなく依存命令がリテラルロード値にアクセスできるようにし、したがって改善されたプロセッサ利用をもたらすことができる。
別の態様では、命令処理回路が提供される。命令処理回路は、命令ストリームにおいて、リテラルロード命令の第1の出現を検出するように構成される。命令処理回路は、リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定するようにさらに構成される。命令処理回路はまた、リテラルロード命令のアドレスがエントリに存在すると決定することに応答して、リテラルロード命令についての少なくとも1つの依存命令を実行するために、エントリに記憶されている予測リテラルロード値を提供するように構成される。さらに命令処理回路は、リテラルロード命令のアドレスがエントリに存在すると決定することにさらに応答して、リテラルロード命令の実行時に、予測リテラルロード値が、リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定するように構成される。命令処理回路は、予測リテラルロード値が実際のリテラルロード値に一致しないと決定することに応答して、予測ミスリカバリを起動し、実際のリテラルロード値を使用して少なくとも1つの依存命令を再実行するようにさらに構成される。
別の態様では、命令処理回路が提供される。命令処理回路は、命令ストリームにおいて、リテラルロード命令の第1の出現を検出するための手段を備える。命令処理回路は、リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定するための手段をさらに備える。命令処理回路はまた、リテラルロード命令のアドレスがエントリに存在すると決定することに応答して、リテラルロード命令についての少なくとも1つの依存命令を実行するために、エントリに記憶されている予測リテラルロード値を提供するための手段を備える。さらに命令処理回路は、リテラルロード命令のアドレスがエントリに存在すると決定することにさらに応答して、リテラルロード命令の実行時に、予測リテラルロード値が、リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定するための手段を備える。命令処理回路は、予測リテラルロード値が実際のリテラルロード値に一致しないと決定することに応答して、予測ミスリカバリを起動するための手段をさらに備える。命令処理回路はまた、予測リテラルロード値が実際のリテラルロード値に一致しないと決定することにさらに応答して、実際のリテラルロード値を使用して少なくとも1つの依存命令を再実行するための手段を備える。
別の態様では、リテラルロードの値を予測するための方法が提供される。本方法は、命令ストリームにおいて、リテラルロード命令の第1の出現を検出するステップを含む。本方法は、リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定するステップをさらに含む。本方法はまた、リテラルロード命令のアドレスがエントリに存在すると決定することに応答して、リテラルロード命令についての少なくとも1つの依存命令を実行するために、エントリに記憶されている予測リテラルロード値を提供するステップを含む。さらに本方法は、リテラルロード命令のアドレスがエントリに存在すると決定することにさらに応答して、リテラルロード命令の実行時に、予測リテラルロード値が、リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定するステップを含む。本方法は、予測リテラルロード値が実際のリテラルロード値に一致しないと決定することに応答して、予測ミスリカバリを起動し、実際のリテラルロード値を使用して少なくとも1つの依存命令を再実行するステップをさらに含む。
別の態様では、プロセッサに、命令ストリームにおいて、リテラルロード命令の第1の出現を検出させるためのコンピュータ実行可能命令を記憶した非一時的コンピュータ可読媒体が提供される。その上に記憶されたコンピュータ実行可能命令はさらにプロセッサに、リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定させる。その上に記憶されたコンピュータ実行可能命令はまたプロセッサに、リテラルロード命令のアドレスがエントリに存在すると決定することに応答して、リテラルロード命令についての少なくとも1つの依存命令を実行するために、エントリに記憶された予測リテラルロード値を提供させる。さらにその上に記憶されたコンピュータ実行可能命令はプロセッサに、リテラルロード命令のアドレスがエントリに存在すると決定することにさらに応答して、リテラルロード命令の実行時に、予測リテラルロード値が、リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定させる。その上に記憶されたコンピュータ実行可能命令はさらにプロセッサに、予測リテラルロード値が実際のリテラルロード値に一致しないと決定することに応答して、予測ミスリカバリを起動させ、実際のリテラルロード値を使用して少なくとも1つの依存命令を再実行させる。
リテラルロード予測テーブルを使用して、リテラルロード値を予測し、リテラルロード値予測ミスを検出するための命令処理回路を含んだ例示的なコンピュータプロセッサのブロック図である。 図1のリテラルロード予測テーブルにエントリを確立し、依存命令にエントリの予測リテラルロード値を提供し、図1の命令処理回路によってリテラルロード値予測ミスに対処するための例示的な通信フローを示す図である。 図1のリテラルロード予測テーブルにエントリを確立し、依存命令にエントリの予測リテラルロード値を提供し、図1の命令処理回路によってリテラルロード値予測ミスに対処するための例示的な通信フローを示す図である。 図1のリテラルロード予測テーブルにエントリを確立し、依存命令にエントリの予測リテラルロード値を提供し、図1の命令処理回路によってリテラルロード値予測ミスに対処するための例示的な通信フローを示す図である。 図1の命令処理回路のリテラルロード予測テーブルを使用して、リテラルロード値を予測し、予測ミスを検出するための例示的な動作を示すフローチャートである。 図1の命令処理回路のいくつかの態様で予測ミスリカバリを起動するための例示的な動作を示す図である。 図1の命令処理回路のいくつかの態様でリテラルロード予測テーブルのdo-not-predictインジケータを使用するための動作を示すフローチャートである。 図1の命令処理回路を含むことができる例示的なプロセッサベースシステムのブロック図である。
次に図面を参照すると、本開示のいくつかの例示的な態様が記載されている。「例示的」という語は、本明細書において「一例、事例、または例示としての役割を果たすこと」を意味するために使用される。「例示的」として本明細書において説明されるいずれの態様も、必ずしも他の態様よりも好ましいか、または有利であると解釈されるべきでない。
詳細な説明において開示する態様は、リテラルロード予測テーブルを使用してリテラルロード値を予測することを含む。関連する回路、方法、およびコンピュータ可読媒体も開示される。この点について、一態様では、命令処理回路が、リテラルロード値の予測を生成するために、およびリテラルロード値予測ミスを検出するために使用されるリテラルロード予測テーブルを提供する。リテラルロード予測テーブルは、1つまたは複数のエントリを含み、各エントリがアドレスと、予測リテラルロード値とを含む。命令ストリームにリテラルロード命令を検出すると、命令処理回路は、リテラルロード予測テーブルが、リテラルロード命令に対応するアドレスを有するエントリを含んでいるかどうかを決定する。含んでいる場合、命令処理回路は、エントリに記憶されている予測リテラルロード値を、少なくとも1つの依存命令に提供する。リテラルロード命令が実際に実行されるとき、命令処理回路は、あらかじめ少なくとも1つの依存命令に提供された予測リテラルロード値が、リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定する。予測リテラルロード値および実際のリテラルロード値が一致しない場合、命令処理回路は、予測ミスリカバリを起動する。いくつかの態様では、予測ミスリカバリは、実際のリテラルロード値でエントリを更新すること、リテラルロード予測テーブルからエントリをフラッシュすること、および/またはエントリにdo-not-predictインジケータを設定することを含むことができる。少なくとも1つの依存命令は、次いで、実際のリテラルロード値を使用して再実行されてよい。このようにして、命令処理回路は、load:useペナルティを受けることなく依存命令がリテラルロード値にアクセスできるようにし、したがって改善されたプロセッサ利用をもたらすことができる。
この点について、図1は、例示的なコンピュータプロセッサ100のブロック図である。コンピュータプロセッサ100は、本明細書で開示するようにリテラルロード値を予測し、リテラルロード値予測ミスを検出するためのリテラルロード予測テーブル104を提供する命令処理回路102を含む。コンピュータプロセッサ100は、数ある要素の中でも、既知のデジタル論理素子、半導体回路、処理コアおよび/またはメモリ構造のいずれか1つ、またはその組合せを含む場合がある。本明細書で説明する態様は、要素の任意の特定の構成には限定されず、開示される技法は、半導体ダイまたはパッケージ上の様々な構造およびレイアウトに容易に拡張することができる。
コンピュータプロセッサ100は、入力/出力回路106と、命令キャッシュ108と、データキャッシュ110とを含む。コンピュータプロセッサ100はさらに、フロントエンド回路114、実行ユニット116および完了ユニット118を含む実行パイプライン112を備える。コンピュータプロセッサ100はさらに、レジスタ120を含み、レジスタは、1つまたは複数の汎用レジスタ(GPR)122と、プログラムカウンタ124と、リンクレジスタ126とを備える。ARM(登録商標)ARM7(商標)アーキテクチャを用いる態様など、いくつかの態様では、リンクレジスタ126は、図1に示すように、GPR122のうちの1つである。代替的には、IBM(登録商標)PowerPC(登録商標)アーキテクチャを用いる態様など、いくつかの態様は、リンクレジスタ126がGPR122とは別であることを定める場合がある(図示せず)。
例示的な動作では、実行パイプライン112のフロントエンド回路114は、命令キャッシュ108から命令(図示せず)をフェッチし、いくつかの態様では、命令キャッシュは、非限定的な例として、オンチップのレベル1(L1)キャッシュである場合がある。フェッチされた命令はフロントエンド回路114によって復号され、実行ユニット116に発行される。実行ユニット116は、発行された命令を実行し、完了ユニット118は、実行された命令をリタイヤさせる。いくつかの態様では、完了ユニット118は、レジスタ120のうちの1つまたは複数に実行結果を記憶するライトバック機構(図示せず)を備えることができる。実行ユニット116および/または完了ユニット118は各々、1つまたは複数の順次パイプラインステージを備える場合があることは理解されたい。図1の例では、フロントエンド回路114は、1つまたは複数のフェッチ/デコードパイプラインステージ128を備え、それらのステージによって、複数の命令を同時にフェッチし、復号できるようになる。フェッチされた命令を実行ユニット116へのディスパッチを保留にして保持するための命令キュー130が、フェッチ/デコードパイプラインステージ128のうちの1つまたは複数に通信可能に接続される。
図1のコンピュータプロセッサ100はさらに、実行パイプライン112の1つまたは複数の要素に通信可能に結合されるコンスタントキャッシュ132を設ける。コンスタントキャッシュ132は、レジスタ120のうちの1つにあらかじめ記憶された値を、この値を使用する命令に入力オペランドとして提供することができるようにするクイックアクセス機構を提供する。したがって、コンスタントキャッシュ132は、レジスタ120よりも速く、記憶された値へのアクセスを提供することによって、コンピュータプロセッサ100のパフォーマンスを向上させることができる。
実行パイプライン112で命令を処理している間、命令処理回路102は、レジスタ120のうちの1つにリテラルロード値をロードするために、リテラルロード命令(図示せず)をフェッチし、実行することができる。したがってリテラルロード命令を処理することが、データキャッシュ110からリテラルロード値を取り出すことを含むことができる。しかしながら、そうする際に、リテラルロード命令は、データキャッシュ110にアクセスする際の固有の待ち時間に起因するload:useペナルティを受ける場合がある。たとえば、いくつかのコンピュータアーキテクチャにおいて、データキャッシュ110にアクセスすると、完了するには2から3プロセッササイクルを必要とする場合がある。したがって、命令処理回路102は、リテラルロード命令によって受けたload:useペナルティが経過するまで、後続の依存命令(図示せず)をディスパッチすることができない場合がある。これは結果的に、実行パイプライン112内でコンピュータプロセッサ100を十分に利用できないことになり得る。
この点について、図1の命令処理回路102は、リテラルロード命令に対してリテラルロード値を予測することによってload:useペナルティを最小にし、予測リテラルロード値を依存命令に提供し、およびリテラルロード値予測ミスを検出するために、リテラルロード予測テーブル104を提供する。命令処理回路102は、実行パイプライン112内で処理されている命令ストリーム(図示せず)においてリテラルロード命令(図示せず)を検出するように構成される。いくつかの態様では、命令処理回路102は、コンピュータプロセッサ100によって用いられるロード命令の慣用形式(idiomatic form)に基づいてリテラルロード命令を検出するように構成される場合がある。非限定的な例として、ARMアーキテクチャを利用するコンピュータプロセッサでは、リテラルロード命令が、プログラムカウンタオフセットを定数で指定した、プログラムカウンタ相対アドレッシングモード(program-counter-relative addressing mode)を使用すると決定することによって、リテラルロード命令が検出される場合がある。
リテラルロード命令が、命令処理回路102のフロントエンド回路114によってフェッチされるとき、命令処理回路102は、リテラルロード予測テーブル104を調べる。リテラルロード予測テーブル104は、1つまたは複数のエントリ(図示せず)を含んでいる。各エントリは、あらかじめ検出されたリテラルロード命令のアドレスと、そのアドレスに対応するリテラルロード命令によってあらかじめロードされた予測リテラルロード値とを含むことができる。
命令処理回路102は、フェッチされているリテラルロード命令のアドレスが、リテラルロード予測テーブル104のエントリに存在するかどうかを決定する。リテラルロード命令のアドレスが見つけられる(すなわち、「ヒット」)場合、命令処理回路102は、エントリからのリテラルロード値を少なくとも1つの依存命令に予測リテラルロード値として提供する。いくつかの態様では、予測リテラルロード値は、コンスタントキャッシュ132を介して少なくとも1つの依存命令に提供される場合がある。このようにして、少なくとも1つの依存命令は、対応するload:useペナルティを受けることなく、リテラルロード命令に対する予測リテラルロード値を取得することができる。
「ヒット」に続いて、リテラルロード命令は、最終的に命令処理回路102の実行ユニット116によって実行されてよい。リテラルロード命令が実行されるとき、命令処理回路102は、少なくとも1つの依存命令に提供された予測リテラルロード値を、実行時にリテラルロード命令によってロードされた実際のリテラルロード値と比較する。予測リテラルロード値が、実際のリテラルロード値に一致しない場合、リテラルロード値予測ミスが出現する。それに応答して、命令処理回路102は、予測ミスリカバリを起動する。いくつかの態様は、予測ミスリカバリのための動作が、リテラルロード予測テーブル104でエントリを更新するステップ、リテラルロード予測テーブル104からエントリをフラッシュするステップ、および/またはリテラルロード予測テーブル104のエントリにdo-not-predictフラグ(図示せず)を設定するステップを含むことを定める場合がある。少なくとも1つの依存命令は、次いで、実際のリテラルロード値を使用して再実行されてよい。
本明細書で開示するいくつかの態様によれば、命令処理回路102がリテラルロード命令を検出するが、そのリテラルロード命令のアドレスがリテラルロード予測テーブル104のエントリに見つからない場合、「ミス」が出現する。この場合、命令処理回路102は、リテラルロード命令の実行時にリテラルロード命令に対応するエントリを、リテラルロード予測テーブル104に生成することができる。生成されたエントリは、リテラルロード命令のアドレスを含み、リテラルロード命令によってロードされた実際のリテラルロード値を、エントリの予測リテラルロード値として記憶する。したがって、リテラルロード命令が、命令処理回路102によって再び検出される場合は、リテラルロード予測テーブル104での「ヒット」が出現する可能性があり、予測リテラルロード値は、依存命令に提供されてよい。
上述のように、いくつかの態様では、命令処理回路102は、予測ミスリカバリの一部として、リテラルロード予測テーブル104のエントリにdo-not-predictインジケータ(図示せず)を設定することができる。do-not-predictインジケータは、リテラルロード命令であると思われるが、コンピュータプログラムの実行中の異なるポイントで異なる値をロードするとわかっているまたは決定されるロード命令を識別するために、命令処理回路102によって使用されてよい。したがって、見掛け上のリテラルロード命令を検出し、リテラルロード命令のアドレスが、リテラルロード予測テーブル104のエントリに存在すると決定した後、命令処理回路102は、エントリのdo-not-predictインジケータをチェックすることができる。do-not-predictインジケータが設定されている場合、命令処理回路102は、予測リテラルロード値を依存命令に提供することなく、リテラルロード命令を実行することを進めることができる。これは、依存命令が常に、リテラルロード命令によってロードされた実際のリテラルロード値を受け取ることを保証することができ、予測ミスの繰り返し、およびコンピュータプロセッサ100の関連するパフォーマンス低下の可能性を回避することができる。
図1の命令処理回路102、データキャッシュ110、およびコンスタントキャッシュ132の間の例示的な通信フローをよりよく示すために、図2A〜図2Cを提供する。図2Aは、リテラルロード予測テーブル104にエントリを確立するための例示的な通信フローを示し、図2Bは、エントリの予測リテラルロード値を依存命令に提供するための例示的な通信フローを示す。図2Cは、リテラルロード値予測ミスに対処するための例示的な通信フローを示す。
図2A〜図2Cでは、命令処理回路102は、2つの命令、すなわちリテラルロード命令202と、依存命令204とを含む命令ストリーム200を処理している。リテラルロード命令202は、アドレス206と関連付けられ、この例のアドレスは、16進値0x400である。いくつかの態様では、アドレス206は、たとえば、図1のプログラムカウンタ124から取り出すことができることを理解されたい。図2A〜図2Cの命令ストリーム200は1つの依存命令204しか含んでいないが、いくつかの態様では、依存命令204は複数の依存命令を含む場合があることをさらに理解されたい。
この例のリテラルロード命令202は、LDR命令であり、コンピュータプロセッサ100に、プログラムカウンタ124(PC)の現在の値プラス16進値0x40によって指定されるアドレスからリテラルロード値をロードするよう命じる。リテラルロード値は次いで、レジスタR0に記憶され、レジスタR0は、非限定的な例として、図1のレジスタ120のうちの1つであってよい。依存命令204は、命令ストリーム200においてリテラルロード命令202に続き、この例では依存命令204はADD命令である。依存命令204は、レジスタR0に記憶されているリテラルロード値を入力として受け取り、これをレジスタR1(たとえば、図1のレジスタ120のうちの別の1つ)の値と合計する。結果は次いで、レジスタR1に記憶される。
図2A〜図2Cに示すリテラルロード予測テーブル104は、複数のエントリ208(0)〜208(X)を含む。リテラルロード値の予測を容易にするために、リテラルロード予測テーブル104の各エントリ208(0)〜208(X)は、プログラムカウンタ(PC)フィールド210、値フィールド212、およびオプションのdo-not-predictフィールド214を含む。各エントリ208(0)〜208(X)のプログラムカウンタフィールド210は、命令処理回路102によって検出されるリテラルロード命令202のアドレス206を記憶するために使用されてよい。値フィールド212は、プログラムカウンタフィールド210に、アドレス206と関連付けられるリテラルロード命令202によってロードされるリテラルロード値に基づいた予測リテラルロード値を記憶することができる。いくつかの態様では、各エントリ208(0)〜208(X)は、do-not-predictフィールド214も含むことができる。
図2A〜図2Cに見られるように、データキャッシュ110は、エントリ216(0)〜216(Z)で構成され、各エントリが、アドレスフィールド218と、値フィールド220とを備える。エントリ216(0)〜216(Z)の各々が、ロード命令の以前の実行中に取り出された値に対応する。この点について、アドレスフィールド218は、あらかじめ取り出された値のアドレスを記憶し、値フィールド220は、値のコピーを記憶する。
図2A〜図2Cに示すコンスタントキャッシュ132は、エントリ222(0)〜222(Y)を備える。エントリ222(0)〜222(Y)の各々は、レジスタフィールド224と、値フィールド226とを含む。各エントリ222(0)〜222(Y)のレジスタフィールド224は、エントリ222(0)〜222(Y)と関連付けられる、図1のレジスタ120のうちの1つを示し、値フィールド226は、対応するレジスタ120に最も最近に記憶された値を示す。上記で説明したように、コンスタントキャッシュ132は、レジスタ120から直接値をロードするよりも、キャッシュされた値へのより迅速なアクセスを行うクイックアクセス機構を提供することができる。
次に図2Aを参照すると、リテラルロード予測テーブル104にエントリ208(X)を確立するためのいくつかの態様における通信フローが示されている。命令処理回路102が初めて命令ストリーム200を処理するとき、リテラルロード命令202の第1のインスタンスが検出される。矢印228で示すように、命令処理回路102は、リテラルロード命令202のアドレス206(すなわち、16進値0x400)をエントリ208(0)〜208(X)のいずれかで見つけることができるかどうかを決定するために、リテラルロード予測テーブル104をチェックする。命令処理回路102は、エントリ208(0)〜208(X)でアドレス206を見つけず、したがって「ミス」に応答して、リテラルロード命令202の従来の処理を続ける。
リテラルロード命令202の実行時に、データキャッシュ110のエントリ216(0)は、リテラルロード命令202によってロードされた実際のリテラルロード値230(ここでは、16進値0x1234)で埋められる。矢印232で示すように、命令処理回路102は、データキャッシュ110のエントリ216(0)にアクセスし、実際のリテラルロード値230を取得する。命令処理回路102は次に、矢印234で示すように、実際のリテラルロード値230に基づいて、リテラルロード予測テーブル104にエントリ208(X)を生成する。リテラルロード命令202のアドレス206は、エントリ208(X)のプログラムカウンタフィールド210に記憶されることになり、実際のリテラルロード値230は、エントリ208(X)の値フィールド212に予測リテラルロード値として記憶されたことになる。リテラルロード命令202によってレジスタR0にロードされた実際のリテラルロード値230は次いで、矢印236で示すように、従来の機構を使用して依存命令204に転送される。
図2Bは、予測リテラルロード値238を依存命令204に提供するためにリテラルロード予測テーブル104のエントリ208(X)を使用することを示す。図2Bに見られるように、リテラルロード命令202のアドレス206は、エントリ208(X)のプログラムカウンタフィールド210に記憶されており、図2Aの実際のリテラルロード値230は、エントリ208(X)の値フィールド212に予測リテラルロード値238として記憶されている。図2Bの例では、do-not-predictインジケータ239もまた、エントリ208(X)に記憶され、do-not-predictインジケータ239は未設定(unset)としている(したがって、エントリ208(X)はリテラルロード値を予測するために使用することができることを示す)。命令処理回路102が次に、再び命令ストリーム200を処理し、リテラルロード命令202の第2のインスタンスを検出する。矢印240で示すように、命令処理回路102は、アドレス206がエントリ208(0)〜208(X)のいずれかで見つけられるかどうかを決定するために、リテラルロード予測テーブル104をチェックし、今回はエントリ208(X)を探し当てる。
それに応答して、命令処理回路102は、矢印242で示すように、エントリ208(X)によって提供される予測リテラルロード値238を、レジスタR0に対応するコンスタントキャッシュ132内のエントリ222(0)に割り当てる。予測リテラルロード値238は次いで、矢印244で示すように、コンスタントキャッシュ132を介して依存命令204に提供される。このようにして、依存命令204は、load:useペナルティを受けずに、予測リテラルロード値238を受け取ることができる。
予測ミスが出現しなかったことを確認するために、命令処理回路102は、矢印246で示すように、リテラルロード命令202の実行時に、データキャッシュ110のエントリ216(0)にアクセスし、実際のリテラルロード値230を取得する。命令処理回路102は次いで、リテラルロード予測テーブル104によって提供された予測リテラルロード値238が、リテラルロード命令202によってロードされた実際のリテラルロード値230に一致するかどうかを決定することができる。図2Bの例では、実際のリテラルロード値230および予測リテラルロード値238が一致し、したがって予測は成功であった。
命令処理回路102のいくつかの態様の予測ミスの対処を説明するために、図2Cを提供する。図2Cでは、データキャッシュ110内のエントリ216(0)が更新されて、0x5678という新しい実際のリテラルロード値230を反映していると仮定される。命令処理回路102が再び命令ストリーム200を処理するとき、リテラルロード命令202が検出される。命令処理回路102は、矢印248で示すように、アドレス206がエントリ208(0)〜208(X)のいずれかで見つけられるかどうかを決定するために、リテラルロード予測テーブル104をチェックし、エントリ208(X)を探し当てる。図2Bにおいてと同様に、命令処理回路102は、矢印250で示すように、エントリ208(X)によって提供される予測リテラルロード値238を、レジスタR0に対応するコンスタントキャッシュ132内のエントリ222(0)に割り当てる。予測リテラルロード値238は次いで、矢印252で示すように、コンスタントキャッシュ132を介して依存命令204に提供される。
リテラルロード命令202の実行時に、命令処理回路102は、矢印254で示すように、データキャッシュ110のエントリ216(0)にアクセスし、実際のリテラルロード値230を取得する。命令処理回路102は次いで、リテラルロード予測テーブル104によって提供された予測リテラルロード値238が、リテラルロード命令202によってロードされた実際のリテラルロード値230に一致しないと決定する。したがって予測ミスが検出されている。
予測ミスに応答して、命令処理回路102は、予測ミスリカバリを起動する。図2Cの例では、予測ミスリカバリを起動するための動作は、(矢印256で示すように)リテラルロード命令202の実行の結果生じた実際のリテラルロード値230を記憶するように、リテラルロード予測テーブル104のエントリ208(X)中の予測リテラルロード値238を更新することを含む。このようにして、実際のリテラルロード値230は、命令処理回路102によって検出されるリテラルロード命令202の今後のインスタンスに提供され得る。いくつかの態様では、異なる動作および/または追加の動作が、予測ミスリカバリの一部として実行される場合があることに留意されたい。これらについては、図4に関して以下でさらに詳細に説明する。
図3は、図1のリテラルロード予測テーブル104を使用して、リテラルロード値を予測し、予測ミスを検出するための例示的な動作を示すフローチャートである。明快にするために、図3について説明する際に図1および図2A〜図2Cの要素が参照される。図3中の動作は、図1の命令処理回路102が、命令ストリーム200において、リテラルロード命令202の第1の出現を検出することから始まる(ブロック300)。リテラルロード命令202を検出することは、たとえば、命令ストリーム200においてロード命令の慣用形式を認識することによって実現される場合がある。
命令処理回路102は次に、リテラルロード命令202のアドレス206が、リテラルロード予測テーブル104のエントリ208(X)に存在するかどうかを決定する(ブロック302)。存在する場合、命令処理回路102は、リテラルロード命令202についての少なくとも1つの依存命令204の実行のために、エントリ208(X)に記憶されている予測リテラルロード値238を提供する(ブロック304)。依存命令204はしたがって、load:useペナルティを受けることなく、予測リテラルロード値238を受け取ることができる。
予測ミスのリテラルロード値をチェックするために、命令処理回路102は次いで、予測リテラルロード値238が、リテラルロード命令202の実行時にリテラルロード命令202によってロードされた実際のリテラルロード値230に一致するかどうかを決定する(ブロック306)。予測リテラルロード値238および実際のリテラルロード値230が一致する場合、命令処理回路102は、命令ストリーム200を処理し続ける(ブロック308)。しかしながら、予測リテラルロード値238と実際のリテラルロード値230との不一致が検出される場合、命令処理回路102は、予測ミスリカバリを起動する(ブロック310)。少なくとも1つの依存命令204は次いで、実際のリテラルロード値230を使用して再実行されてよく(ブロック312)、ブロック308において処理が再開する。
決定ブロック302で、命令処理回路102が、リテラルロード命令202のアドレス206はリテラルロード予測テーブル104のエントリ208(X)に存在しないと決定する場合、命令処理回路102は、リテラルロード命令202の実行時にリテラルロード予測テーブル104にエントリ208(X)を生成する(ブロック314)。エントリ208(X)は、リテラルロード命令202のアドレス206と、予測リテラルロード値238として記憶された実際のリテラルロード値230とを含む。次いで、ブロック308において処理が再開する。
図1の命令処理回路102のいくつかの態様で予測ミスリカバリを起動するための例示的な動作を説明するために、図4を提供する。図4を説明する際に、明快にするために図1および図2A〜図2Cの要素が参照される。図3に見られるように、命令処理回路102は、予測ミスのリテラルロード値を検出することに応答して予測ミスリカバリを起動することができる(図3からのブロック310)。いくつかの態様では、予測ミスリカバリを起動することは、実際のリテラルロード値230を予測リテラルロード値238として記憶して、エントリ208(X)を更新することを含むことができる(ブロック400)。これは、命令処理回路102が、リテラルロード命令202の後続のインスタンスを検出することに応答して、訂正された予測リテラルロード値238を提供できるようにすることができる。
いくつかの態様は、予測ミスリカバリを起動することが、リテラルロード予測テーブル104からエントリ208(X)をフラッシュすることを含むと定めることができる(ブロック402)。非限定的な例として、エントリ208(X)をフラッシュすることは、リテラルロード予測テーブル104からエントリ208(X)を削除することもしくは割振り解除すること、またはさもなければエントリ208(X)は書込みに利用可能であることを示すことを含むことができる。エントリ208(X)をフラッシュすると、したがって、より頻繁に遭遇するリテラルロード命令202のために、リテラルロード予測テーブル104に空き領域を作成することができる。
命令処理回路102のいくつかの態様によれば、予測ミスリカバリを起動することは、エントリ208(X)にdo-not-predictインジケータ239を設定することを含むことができる(ブロック404)。そのような態様では、do-not-predictインジケータ239は、リテラルロード命令202の後続のインスタンスに対してリテラルロード値予測が実行されるべきではないことを示すように設定される。これは、たとえば、特定のロード命令202が繰り返して検出される場合があるが、コンピュータプログラムの実行中の異なるポイントで異なる値をロードするとわかっている環境において役立つ場合がある。do-not-predictインジケータ239を用いることによって、命令処理回路102は、正しい可能性が低いリテラルロード値予測を行う際に処理サイクルを不必要に消費することを避けることができる。
この点について、図5は、図1のリテラルロード予測テーブル104のdo-not-predictインジケータ239を使用するための動作を示す。明快にするために、図5について説明する際に図1および図2A〜図2Cの要素が参照される。図5では、図1の命令処理回路102が、命令ストリーム200において、リテラルロード命令202の第2の出現を検出することから始まる(ブロック500)。それに応答して、命令処理回路102は、リテラルロード命令202のアドレス206が、リテラルロード予測テーブル104のエントリ208(X)に存在するかどうかを決定する(ブロック502)。アドレス206が見つからなかった場合、図3のブロック314において処理が再開する。
命令処理回路102がブロック502において、アドレス206がエントリ208(X)に見つけられると決定する場合、命令処理回路102は次に、エントリ208(X)におけるdo-not-predictインジケータ239が設定されているかどうかを決定する(ブロック504)。設定されていない場合、図3のブロック304において処理が再開する。しかしながら、do-not-predictインジケータ239が設定されている場合、命令処理回路102は、少なくとも1つの依存命令204の実行のために、エントリ208(X)に記憶されている予測リテラルロード値238を提供することなく、リテラルロード命令202を実行する(ブロック506)。次いで、図3のブロック308において処理が再開する。
本明細書で開示する態様によるリテラルロード予測テーブルを使用してリテラルロード値を予測することは、任意のプロセッサベースデバイスに設けられるか、または組み込まれてもよい。例としては、限定はしないが、セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、定置データユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤがある。
この点について、図6は、図1および図2A〜図2Cに示す命令処理回路102を採用することができる、プロセッサベースシステム600の一例を示す。この例では、プロセッサベースシステム600は、1つまたは複数の中央処理装置(CPU)602を含み、各CPUが1つまたは複数のプロセッサ604を含む。1つまたは複数のプロセッサ604は、図1および図2A〜図2Cの命令処理回路(IPC)102を含むことができる。CPU602はマスタデバイスとすることができる。CPU602は、一時的に記憶されたデータへの高速アクセスのためにプロセッサ604に結合されたキャッシュメモリ606を有する場合がある。CPU602は、システムバス608に結合され、プロセッサベースシステム600内に含まれるマスタデバイスとスレーブデバイスとを相互結合することができる。よく知られているように、CPU602は、システムバス608を介してアドレス情報、制御情報、およびデータ情報を交換することによって、これらの他のデバイスと通信する。たとえば、CPU602は、スレーブデバイスの一例として、メモリコントローラ610にバストランザクション要求を通信することができる。
他のマスタおよびスレーブデバイスをシステムバス608に接続することができる。図6に示されるように、これらのデバイスは、例として、メモリシステム612、1つまたは複数の入力デバイス614、1つまたは複数の出力デバイス616、1つまたは複数のネットワークインターフェースデバイス618、および1つまたは複数のディスプレイコントローラ620を含むことができる。入力デバイス614は、限定はしないが、入力キー、スイッチ、音声プロセッサなどを含む、任意のタイプの入力デバイスを含むことができる。出力デバイス616は、限定はしないが、音声、ビデオ、他の視覚インジケータなどを含む、任意のタイプの出力デバイスを含むことができる。ネットワークインターフェースデバイス618は、ネットワーク622との間のデータ交換を可能にするように構成される任意のデバイスとすることができる。ネットワーク622は、限定はしないが、有線ネットワークまたはワイヤレスネットワーク、プライベートネットワークまたは公衆ネットワーク、ローカルエリアネットワーク(LAN)、ワイドローカルエリアネットワーク(WLAN)、およびインターネットを含む、任意のタイプのネットワークとすることができる。ネットワークインターフェースデバイス618は、任意のタイプの所望の通信プロトコルをサポートするように構成することが可能である。メモリシステム612は、1つまたは複数のメモリユニット624(0〜N)を含むことができる。
CPU602はまた、1つまたは複数のディスプレイ626に送信される情報を制御するために、システムバス608を介してディスプレイコントローラ620にアクセスするように構成することができる。ディスプレイコントローラ620は、1つまたは複数のビデオプロセッサ628を介して、表示されるべき情報をディスプレイ626に送り、ビデオプロセッサ628は、表示されるべき情報を、ディスプレイ626に適したフォーマットとなるように処理する。ディスプレイ626は、それらに限定されないが、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、等々を始めとする任意のタイプのディスプレイを含むことができる。
本明細書において開示される態様に関して説明される種々の例示的な論理ブロック、モジュール、回路、およびアルゴリズムは、電子ハードウェア、またはメモリもしくは別のコンピュータ可読媒体に記憶され、プロセッサもしくは他の処理デバイスによって実行される命令、またはその両方の組合せとして実現できることは、当業者はさらに理解されよう。本明細書において説明されるマスタデバイスおよびスレーブデバイスは、例として、任意の回路、ハードウェア構成要素、集積回路(IC)、またはICチップにおいて利用することができる。本明細書において開示されるメモリは、任意のタイプおよびサイズのメモリであってよく、また、任意のタイプの所望の情報を記憶するように構成されてよい。この互換性を明確に説明するために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明した。そのような機能がどのように実現されるかは、特定の適用例、設計上の選択、および/またはシステム全体に課された設計制約によって決まる。当業者は、説明された機能を特定の適用例ごとに様々な方法で実現することができるが、そのような実装形態の決定は、本開示の範囲からの逸脱を引き起こすものと解釈されるべきではない。
本明細書において開示される態様に関して説明される種々の例示的な論理ブロック、モジュール、および回路は、プロセッサ、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタロジック、個別ハードウェア構成要素、または本明細書において説明される機能を実行するように設計されるそれらの任意の組合せを用いて実現または実行することができる。プロセッサは、マイクロプロセッサとすることができるが、代替形態では、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンとすることができる。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実現される場合もある。
本明細書で開示する態様は、ハードウェアにおいて、また、ハードウェアに記憶された命令において具現化される場合があり、命令は、たとえば、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野において知られている任意の他の形態のコンピュータ可読媒体内に存在する場合がある。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるようにプロセッサに結合される。代替として、記憶媒体は、プロセッサと一体化されてもよい。プロセッサおよび記憶媒体は、ASIC内に存在する場合がある。ASICは、リモート局内に存在する場合がある。代替形態では、プロセッサおよび記憶媒体は、個別構成要素として、リモート局、基地局、またはサーバ内に存在する場合がある。
また、本明細書の例示的な態様のいずれかに記載された動作ステップは、例および議論を提供するために記載される点にも留意されたい。説明される動作は、図示するシーケンス以外の多数の異なるシーケンスにおいて実行される場合がある。さらに、単一の動作ステップにおいて説明される動作は、実際にはいくつかの異なるステップにおいて実行される場合がある。さらに、例示的な態様において論じられる1つまたは複数の動作ステップが組み合わせられる場合がある。当業者には容易に明らかになるように、流れ図に示される動作ステップは、多数の異なる変更を受ける場合があることは理解されたい。当業者は、情報および信号が様々な異なる技術および技法のいずれかを使用して表される場合があることも理解されよう。たとえば、上記の説明全体を通して参照される場合があるデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光場もしくは光学粒子、またはそれらの任意の組合せによって表される場合がある。
本開示の上述の説明は、当業者が本開示を実施するまたは使用することを可能にするように提供される。本開示に対する種々の変更が、当業者には容易に明らかになり、本明細書において規定される一般原理は、本開示の趣旨または範囲を逸脱することなく、他の変形形態に適用することができる。したがって、本開示は、本明細書で説明する例および設計に限定されるものではなく、本明細書で開示する原理および新規の特徴と一致する最も広い範囲を与えられるべきである。
100 コンピュータプロセッサ
102 命令処理回路
104 リテラルロード予測テーブル
106 入力/出力回路
108 命令キャッシュ
110 データキャッシュ
112 実行パイプライン
114 フロントエンド回路
116 実行ユニット
118 完了ユニット
120 レジスタ
122 汎用レジスタ(GPR)
124 プログラムカウンタ
126 リンクレジスタ
128 フェッチ/デコードパイプラインステージ
130 命令キュー
132 コンスタントキャッシュ
200 命令ストリーム
202 リテラルロード命令
204 依存命令
206 アドレス
208 エントリ
210 プログラムカウンタフィールド
212 値フィールド
214 do-not-predictフィールド
216 エントリ
218 アドレスフィールド
220 値フィールド
222 エントリ
224 レジスタフィールド
226 値フィールド
230 実際のリテラルロード値
238 予測リテラルロード値
239 do-not-predictインジケータ
600 プロセッサベースシステム
602 中央処理装置(CPU)
604 プロセッサ
606 キャッシュメモリ
608 システムバス
610 メモリコントローラ
612 メモリシステム
614 入力デバイス
616 出力デバイス
618 ネットワークインターフェースデバイス
620 ディスプレイコントローラ
622 ネットワーク
624 メモリユニット
626 ディスプレイ
628 ビデオプロセッサ

Claims (21)

  1. 命令ストリームにおいて、リテラルロード命令の第1の出現を検出し、
    前記リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定し、
    前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定することに応答して、
    前記リテラルロード命令についての少なくとも1つの依存命令の実行のために、前記エントリに記憶されている予測リテラルロード値を提供し、
    前記リテラルロード命令の実行時に、前記予測リテラルロード値が、前記リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定し、
    前記予測リテラルロード値が、前記実際のリテラルロード値に一致しないと決定することに応答して、
    予測ミスリカバリを起動し、
    前記実際のリテラルロード値を使用して前記少なくとも1つの依存命令を再実行する
    ように構成される、命令処理回路。
  2. 前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在しないと決定することに応答して、前記リテラルロード命令の実行時に、前記リテラルロード予測テーブルに、前記リテラルロード命令の前記アドレスと、前記予測リテラルロード値として記憶された前記実際のリテラルロード値とを含んだ前記エントリを生成する
    ようにさらに構成される、請求項1に記載の命令処理回路。
  3. 前記予測リテラルロード値として記憶された前記実際のリテラルロード値で前記エントリを更新することによって前記予測ミスリカバリを起動するように構成される、請求項1に記載の命令処理回路。
  4. 前記リテラルロード予測テーブルから前記エントリをフラッシュすることによって前記予測ミスリカバリを起動するように構成される、請求項1に記載の命令処理回路。
  5. 前記エントリにdo-not-predictインジケータを設定することによって前記予測ミスリカバリを起動するように構成される、請求項1に記載の命令処理回路。
  6. 前記命令ストリームにおいて、前記リテラルロード命令の第2の出現を検出し、
    前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在するかどうかを決定し、
    前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定することに応答して、
    前記エントリ内の前記do-not-predictインジケータが設定されているかどうかを決定し、
    前記エントリ内の前記do-not-predictインジケータが設定されていると決定することに応答して、前記少なくとも1つの依存命令の実行のために、前記エントリに記憶されている前記予測リテラルロード値を提供することなく、前記リテラルロード命令を実行する
    ようにさらに構成される、請求項5に記載の命令処理回路。
  7. 集積回路(IC)に組み込まれる、請求項1に記載の命令処理回路。
  8. セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定ロケーションデータユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤからなる群から選択されるデバイスに組み込まれる、請求項1に記載の命令処理回路。
  9. 命令ストリームにおいて、リテラルロード命令の第1の出現を検出するための手段と、
    前記リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定するための手段と、
    前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定することに応答して、前記リテラルロード命令について少なくとも1つの依存命令を実行するために、前記エントリに記憶されている予測リテラルロード値を提供するための手段と、
    前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定することにさらに応答して、前記リテラルロード命令の実行時に、前記予測リテラルロード値が、前記リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定するための手段と、
    前記予測リテラルロード値が前記実際のリテラルロード値に一致しないと決定することに応答して、予測ミスリカバリを起動するための手段と、
    前記予測リテラルロード値が前記実際のリテラルロード値に一致しないと決定することにさらに応答して、前記実際のリテラルロード値を使用して前記少なくとも1つの依存命令を再実行するための手段と
    を備える、命令処理回路。
  10. リテラルロードの値を予測するための方法であって、
    命令ストリームにおいて、リテラルロード命令の第1の出現を検出するステップと、
    前記リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定するステップと、
    前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定するステップに応答して、
    前記リテラルロード命令についての少なくとも1つの依存命令の実行のために、前記エントリに記憶されている予測リテラルロード値を提供し、
    前記リテラルロード命令の実行時に、前記予測リテラルロード値が、前記リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定し、
    前記予測リテラルロード値が、前記実際のリテラルロード値に一致しないと決定することに応答して、
    予測ミスリカバリを起動し、
    前記実際のリテラルロード値を使用して前記少なくとも1つの依存命令を再実行するステップと
    を含む、方法。
  11. 前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在しないと決定することに応答して、前記リテラルロード命令の実行時に、前記リテラルロード予測テーブルに、前記リテラルロード命令の前記アドレスと、前記予測リテラルロード値として記憶された前記実際のリテラルロード値とを含んだ前記エントリを生成するステップ
    をさらに含む、請求項10に記載の方法。
  12. 前記予測ミスリカバリを起動するステップが、前記予測リテラルロード値として記憶された前記実際のリテラルロード値で前記エントリを更新するステップを含む、請求項10に記載の方法。
  13. 前記予測ミスリカバリを起動するステップが、前記リテラルロード予測テーブルから前記エントリをフラッシュするステップを含む、請求項10に記載の方法。
  14. 前記予測ミスリカバリを起動するステップが、前記エントリにdo-not-predictインジケータを設定するステップを含む、請求項10に記載の方法。
  15. 前記命令ストリームにおいて、前記リテラルロード命令の第2の出現を検出するステップと、
    前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在するかどうかを決定するステップと、
    前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定するステップに応答して、
    前記エントリ内の前記do-not-predictインジケータが設定されているかどうかを決定し、
    前記エントリ内の前記do-not-predictインジケータが設定されていると決定することに応答して、前記少なくとも1つの依存命令の実行のために、前記エントリに記憶されている前記予測リテラルロード値を提供することなく、前記リテラルロード命令を実行するステップと
    をさらに含む、請求項14に記載の方法。
  16. プロセッサに、
    命令ストリームにおいて、リテラルロード命令の第1の出現を検出させ、
    前記リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定させ、
    前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定するステップに応答して、
    前記リテラルロード命令についての少なくとも1つの依存命令の実行のために、前記エントリに記憶されている予測リテラルロード値を提供させ、
    前記リテラルロード命令の実行時に、前記予測リテラルロード値が、前記リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定させ、
    前記予測リテラルロード値が、前記実際のリテラルロード値に一致しないと決定することに応答して、
    予測ミスリカバリを起動させ、
    前記実際のリテラルロード値を使用して前記少なくとも1つの依存命令を再実行させる
    コンピュータ実行可能命令を記憶したコンピュータ可読記憶媒体。
  17. 前記プロセッサにさらに、
    前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在しないと決定することに応答して、前記リテラルロード命令の実行時に、前記リテラルロード予測テーブルに、前記リテラルロード命令の前記アドレスと、前記予測リテラルロード値として記憶された前記実際のリテラルロード値とを含んだ前記エントリを生成させる
    コンピュータ実行可能命令を記憶した、請求項16に記載のコンピュータ可読記憶媒体。
  18. 前記プロセッサに、前記予測リテラルロード値として記憶された前記実際のリテラルロード値で前記エントリを更新することによって前記予測ミスリカバリを起動させるコンピュータ実行可能命令を記憶した、請求項16に記載のコンピュータ可読記憶媒体。
  19. 前記プロセッサに、前記リテラルロード予測テーブルから前記エントリをフラッシュすることによって、前記予測ミスリカバリを起動させるコンピュータ実行可能命令を記憶した、請求項16に記載のコンピュータ可読記憶媒体。
  20. 前記プロセッサに、前記エントリにdo-not-predictインジケータを設定することによって、前記予測ミスリカバリを起動させるコンピュータ実行可能命令を記憶した、請求項16に記載のコンピュータ可読記憶媒体。
  21. 前記プロセッサにさらに、
    前記命令ストリームにおいて、前記リテラルロード命令の第2の出現を検出させ、
    前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在するかどうかを決定させ、
    前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定するステップに応答して、
    前記エントリ内の前記do-not-predictインジケータが設定されているかどうかを決定し、
    前記エントリ内の前記do-not-predictインジケータが設定されていると決定することに応答して、前記少なくとも1つの依存命令の実行のために、前記エントリに記憶されている前記予測リテラルロード値を提供することなく、前記リテラルロード命令を実行させる
    コンピュータ実行可能命令を記憶した、請求項20に記載のコンピュータ可読記憶媒体。
JP2017512912A 2014-09-12 2015-08-24 リテラルロード予測テーブルを使用してリテラルロード値を予測すること、ならびに関係する回路、方法、およびコンピュータ可読媒体 Pending JP2017527916A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/484,659 US20160077836A1 (en) 2014-09-12 2014-09-12 Predicting literal load values using a literal load prediction table, and related circuits, methods, and computer-readable media
US14/484,659 2014-09-12
PCT/US2015/046517 WO2016039967A1 (en) 2014-09-12 2015-08-24 Predicting literal load values using a literal load prediction table, and related circuits, methods, and computer-readable media

Publications (1)

Publication Number Publication Date
JP2017527916A true JP2017527916A (ja) 2017-09-21

Family

ID=54066204

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017512912A Pending JP2017527916A (ja) 2014-09-12 2015-08-24 リテラルロード予測テーブルを使用してリテラルロード値を予測すること、ならびに関係する回路、方法、およびコンピュータ可読媒体

Country Status (5)

Country Link
US (1) US20160077836A1 (ja)
EP (1) EP3191938A1 (ja)
JP (1) JP2017527916A (ja)
CN (1) CN106605207A (ja)
WO (1) WO2016039967A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9921833B2 (en) * 2015-12-15 2018-03-20 International Business Machines Corporation Determining of validity of speculative load data after a predetermined period of time in a multi-slice processor
US11416251B2 (en) * 2017-11-16 2022-08-16 Arm Limited Apparatus for storing, reading and modifying constant values
US11366668B1 (en) * 2020-12-08 2022-06-21 Arm Limited Method and apparatus for comparing predicated load value with masked load value

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080022080A1 (en) * 2006-07-20 2008-01-24 Arm Limited Data access handling in a data processing system
US8190859B2 (en) * 2006-11-13 2012-05-29 Intel Corporation Critical section detection and prediction mechanism for hardware lock elision
US7856548B1 (en) * 2006-12-26 2010-12-21 Oracle America, Inc. Prediction of data values read from memory by a microprocessor using a dynamic confidence threshold
CN101901132B (zh) * 2009-08-12 2013-08-21 威盛电子股份有限公司 微处理器以及相关储存方法
US8468325B2 (en) * 2009-12-22 2013-06-18 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US20150254078A1 (en) * 2014-03-07 2015-09-10 Analog Devices, Inc. Pre-fetch unit for microprocessors using wide, slow memory

Also Published As

Publication number Publication date
CN106605207A (zh) 2017-04-26
US20160077836A1 (en) 2016-03-17
WO2016039967A1 (en) 2016-03-17
EP3191938A1 (en) 2017-07-19

Similar Documents

Publication Publication Date Title
CN108780398B (zh) 在基于处理器系统中基于负载路径历史使用地址预测表以提供负载地址预测
US10255074B2 (en) Selective flushing of instructions in an instruction pipeline in a processor back to an execution-resolved target address, in response to a precise interrupt
US9830152B2 (en) Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor
EP2936323B1 (en) Speculative addressing using a virtual address-to-physical address page crossing buffer
KR101705211B1 (ko) 분기 예측 테이블 스왑 명령(들)에 응답하여 분기 방향 히스토리(들)를 스왑하는 것, 및 관련 시스템들 및 방법들
EP3221784B1 (en) Providing loop-invariant value prediction using a predicted values table, and related apparatuses, methods, and computer-readable media
JP6271572B2 (ja) 実行パイプラインバブルを低減するためにサブルーチンリターンのための分岐ターゲット命令キャッシュ(btic)エントリを確立すること、ならびに関連するシステム、方法、およびコンピュータ可読媒体
JP2017527916A (ja) リテラルロード予測テーブルを使用してリテラルロード値を予測すること、ならびに関係する回路、方法、およびコンピュータ可読媒体
JP2017537408A (ja) アウトオブオーダー(ooo)プロセッサにおける早期命令実行を提供すること、ならびに関連する装置、方法、およびコンピュータ可読媒体
JP6370918B2 (ja) オーバーライド分岐予測器における投機的履歴転送、関連する回路、方法およびコンピュータ可読媒体
US9858077B2 (en) Issuing instructions to execution pipelines based on register-associated preferences, and related instruction processing circuits, processor systems, methods, and computer-readable media
EP3335111B1 (en) Predicting memory instruction punts in a computer processor using a punt avoidance table (pat)
US20220043908A1 (en) Mitigation of return stack buffer side channel attacks in a processor
US20160291981A1 (en) Removing invalid literal load values, and related circuits, methods, and computer-readable media
US20160092219A1 (en) Accelerating constant value generation using a computed constants table, and related circuits, methods, and computer-readable media
US20190294443A1 (en) Providing early pipeline optimization of conditional instructions in processor-based systems
US20160092232A1 (en) Propagating constant values using a computed constants table, and related apparatuses and methods