(57)【要約】  リテラルロード予測テーブルを使用してリテラルロード値を予測すること、ならびに関係する回路、方法、およびコンピュータ可読媒体が開示される。一態様では、命令処理回路が、1つまたは複数のエントリを含んだリテラルロード予測テーブルを提供し、各エントリがアドレスと、リテラルロード値とを含む。命令ストリームにリテラルロード命令を検出すると、命令処理回路は、リテラルロード予測テーブルが、リテラルロード命令のアドレスを有するエントリを含んでいるかどうかを決定する。含んでいる場合、命令処理回路は、エントリに記憶されている予測リテラルロード値を、少なくとも1つの依存命令に提供する。命令処理回路はその後、予測リテラルロード値が、リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定する。不一致が存在する場合、命令処理回路は、予測ミスリカバリを起動する。少なくとも1つの依存命令は、実際のリテラルロード値を使用して再実行される。
2017527916.tif 000002
【特許請求の範囲】
【請求項１】
命令ストリームにおいて、リテラルロード命令の第1の出現を検出し、
前記リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定し、
前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定することに応答して、
前記リテラルロード命令についての少なくとも1つの依存命令の実行のために、前記エントリに記憶されている予測リテラルロード値を提供し、
前記リテラルロード命令の実行時に、前記予測リテラルロード値が、前記リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定し、
前記予測リテラルロード値が、前記実際のリテラルロード値に一致しないと決定することに応答して、
予測ミスリカバリを起動し、
前記実際のリテラルロード値を使用して前記少なくとも1つの依存命令を再実行する
ように構成される、命令処理回路。
【請求項２】
前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在しないと決定することに応答して、前記リテラルロード命令の実行時に、前記リテラルロード予測テーブルに、前記リテラルロード命令の前記アドレスと、前記予測リテラルロード値として記憶された前記実際のリテラルロード値とを含んだ前記エントリを生成する
ようにさらに構成される、請求項1に記載の命令処理回路。
【請求項３】
前記予測リテラルロード値として記憶された前記実際のリテラルロード値で前記エントリを更新することによって前記予測ミスリカバリを起動するように構成される、請求項1に記載の命令処理回路。
【請求項４】
前記リテラルロード予測テーブルから前記エントリをフラッシュすることによって前記予測ミスリカバリを起動するように構成される、請求項1に記載の命令処理回路。
【請求項５】
前記エントリにdo-not-predictインジケータを設定することによって前記予測ミスリカバリを起動するように構成される、請求項1に記載の命令処理回路。
【請求項６】
前記命令ストリームにおいて、前記リテラルロード命令の第2の出現を検出し、
前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在するかどうかを決定し、
前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定することに応答して、
前記エントリ内の前記do-not-predictインジケータが設定されているかどうかを決定し、
前記エントリ内の前記do-not-predictインジケータが設定されていると決定することに応答して、前記少なくとも1つの依存命令の実行のために、前記エントリに記憶されている前記予測リテラルロード値を提供することなく、前記リテラルロード命令を実行する
ようにさらに構成される、請求項5に記載の命令処理回路。
【請求項７】
集積回路(IC)に組み込まれる、請求項1に記載の命令処理回路。
【請求項８】
セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定ロケーションデータユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤからなる群から選択されるデバイスに組み込まれる、請求項1に記載の命令処理回路。
【請求項９】
命令ストリームにおいて、リテラルロード命令の第1の出現を検出するための手段と、
前記リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定するための手段と、
前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定することに応答して、前記リテラルロード命令について少なくとも1つの依存命令を実行するために、前記エントリに記憶されている予測リテラルロード値を提供するための手段と、
前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定することにさらに応答して、前記リテラルロード命令の実行時に、前記予測リテラルロード値が、前記リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定するための手段と、
前記予測リテラルロード値が前記実際のリテラルロード値に一致しないと決定することに応答して、予測ミスリカバリを起動するための手段と、
前記予測リテラルロード値が前記実際のリテラルロード値に一致しないと決定することにさらに応答して、前記実際のリテラルロード値を使用して前記少なくとも1つの依存命令を再実行するための手段と
を備える、命令処理回路。
【請求項１０】
リテラルロードの値を予測するための方法であって、
命令ストリームにおいて、リテラルロード命令の第1の出現を検出するステップと、
前記リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定するステップと、
前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定するステップに応答して、
前記リテラルロード命令についての少なくとも1つの依存命令の実行のために、前記エントリに記憶されている予測リテラルロード値を提供し、
前記リテラルロード命令の実行時に、前記予測リテラルロード値が、前記リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定し、
前記予測リテラルロード値が、前記実際のリテラルロード値に一致しないと決定することに応答して、
予測ミスリカバリを起動し、
前記実際のリテラルロード値を使用して前記少なくとも1つの依存命令を再実行するステップと
を含む、方法。
【請求項１１】
前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在しないと決定することに応答して、前記リテラルロード命令の実行時に、前記リテラルロード予測テーブルに、前記リテラルロード命令の前記アドレスと、前記予測リテラルロード値として記憶された前記実際のリテラルロード値とを含んだ前記エントリを生成するステップ
をさらに含む、請求項10に記載の方法。
【請求項１２】
前記予測ミスリカバリを起動するステップが、前記予測リテラルロード値として記憶された前記実際のリテラルロード値で前記エントリを更新するステップを含む、請求項10に記載の方法。
【請求項１３】
前記予測ミスリカバリを起動するステップが、前記リテラルロード予測テーブルから前記エントリをフラッシュするステップを含む、請求項10に記載の方法。
【請求項１４】
前記予測ミスリカバリを起動するステップが、前記エントリにdo-not-predictインジケータを設定するステップを含む、請求項10に記載の方法。
【請求項１５】
前記命令ストリームにおいて、前記リテラルロード命令の第2の出現を検出するステップと、
前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在するかどうかを決定するステップと、
前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定するステップに応答して、
前記エントリ内の前記do-not-predictインジケータが設定されているかどうかを決定し、
前記エントリ内の前記do-not-predictインジケータが設定されていると決定することに応答して、前記少なくとも1つの依存命令の実行のために、前記エントリに記憶されている前記予測リテラルロード値を提供することなく、前記リテラルロード命令を実行するステップと
をさらに含む、請求項14に記載の方法。
【請求項１６】
プロセッサに、
命令ストリームにおいて、リテラルロード命令の第1の出現を検出させ、
前記リテラルロード命令のアドレスが、リテラルロード予測テーブルのエントリに存在するかどうかを決定させ、
前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定するステップに応答して、
前記リテラルロード命令についての少なくとも1つの依存命令の実行のために、前記エントリに記憶されている予測リテラルロード値を提供させ、
前記リテラルロード命令の実行時に、前記予測リテラルロード値が、前記リテラルロード命令によってロードされた実際のリテラルロード値に一致するかどうかを決定させ、
前記予測リテラルロード値が、前記実際のリテラルロード値に一致しないと決定することに応答して、
予測ミスリカバリを起動させ、
前記実際のリテラルロード値を使用して前記少なくとも1つの依存命令を再実行させる
コンピュータ実行可能命令を記憶したコンピュータ可読記憶媒体。
【請求項１７】
前記プロセッサにさらに、
前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在しないと決定することに応答して、前記リテラルロード命令の実行時に、前記リテラルロード予測テーブルに、前記リテラルロード命令の前記アドレスと、前記予測リテラルロード値として記憶された前記実際のリテラルロード値とを含んだ前記エントリを生成させる
コンピュータ実行可能命令を記憶した、請求項16に記載のコンピュータ可読記憶媒体。
【請求項１８】
前記プロセッサに、前記予測リテラルロード値として記憶された前記実際のリテラルロード値で前記エントリを更新することによって前記予測ミスリカバリを起動させるコンピュータ実行可能命令を記憶した、請求項16に記載のコンピュータ可読記憶媒体。
【請求項１９】
前記プロセッサに、前記リテラルロード予測テーブルから前記エントリをフラッシュすることによって、前記予測ミスリカバリを起動させるコンピュータ実行可能命令を記憶した、請求項16に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記プロセッサに、前記エントリにdo-not-predictインジケータを設定することによって、前記予測ミスリカバリを起動させるコンピュータ実行可能命令を記憶した、請求項16に記載のコンピュータ可読記憶媒体。
【請求項２１】
前記プロセッサにさらに、
前記命令ストリームにおいて、前記リテラルロード命令の第2の出現を検出させ、
前記リテラルロード命令の前記アドレスが、前記リテラルロード予測テーブルの前記エントリに存在するかどうかを決定させ、
前記リテラルロード命令の前記アドレスが前記エントリに存在すると決定するステップに応答して、
前記エントリ内の前記do-not-predictインジケータが設定されているかどうかを決定し、
前記エントリ内の前記do-not-predictインジケータが設定されていると決定することに応答して、前記少なくとも1つの依存命令の実行のために、前記エントリに記憶されている前記予測リテラルロード値を提供することなく、前記リテラルロード命令を実行させる
コンピュータ実行可能命令を記憶した、請求項20に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権出願
本出願は、その内容の全体が本明細書に組み込まれる、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  ビデオプロセッサ
【図１】
2017527916.tif 000003
【図２Ａ】
2017527916.tif 000004
【図２Ｂ】
2017527916.tif 000005
【図２Ｃ】
2017527916.tif 000006
【図３】
2017527916.tif 000007
【図４】
2017527916.tif 000008
【図５】
2017527916.tif 000009
【図６】
2017527916.tif 000010
【国際調査報告】
2017527916.tif 000011
2017527916.tif 000012
2017527916.tif 000013