IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特表2022-548392ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法
<>
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図1
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図2
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図3
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図4
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図5
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図6
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図7
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図8
  • 特表-ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-11-18
(54)【発明の名称】ワイド・イミディエートオペランドを含む命令を処理するためのシステム及び方法
(51)【国際特許分類】
   G06F 9/34 20060101AFI20221111BHJP
   G06F 9/30 20180101ALI20221111BHJP
【FI】
G06F9/34 320A
G06F9/30 310A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022518185
(86)(22)【出願日】2020-06-19
(85)【翻訳文提出日】2022-05-12
(86)【国際出願番号】 US2020038570
(87)【国際公開番号】W WO2021061234
(87)【国際公開日】2021-04-01
(31)【優先権主張番号】16/579,161
(32)【優先日】2019-09-23
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.SWIFT
2.RUST
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ペライス,アーサー
(72)【発明者】
【氏名】スミス,ロドニー ウェイン
(72)【発明者】
【氏名】プリヤダルシ,シヴァム
(72)【発明者】
【氏名】アル シェイク,ラミ モハマド
(72)【発明者】
【氏名】コティンティ ナレッシュ,ヴィニヤン レディ
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033AA08
5B033BA00
5B033BD05
5B033DC01
(57)【要約】
プロセッサベースのシステム内のプロセッサ要素は、プログラムバイナリに関連付けられた1つ又は複数の命令をフェッチするように構成され、1つ又は複数の命令にはイミディエートオペランドを含む命令が含まれる。プロセッサ要素は、イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかを判定するように構成される。イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定することに応答して、プロセッサ要素は、プログラムバイナリの共通の中間ルックアップテーブル(CILT)からワイド・イミディエートオペランドを検索するように構成され、イミディエートオペランドはCILT内のワイド・イミディエートオペランドにインデックスを付ける。次に、プロセッサ要素は、イミディエートオペランドがCILTからのワイド・イミディエートオペランドに置き換えられるように、イミディエートオペランドを含む命令を処理するように構成される。
【特許請求の範囲】
【請求項1】
処理要素を含むプロセッサベースのシステムであって、
前記処理要素は、
ハードウェア共通の中間ルックアップテーブル(HCILT)回路と、
命令処理回路と、を含み、
前記HCILT回路は、イミディエート値をワイド・イミディエート値にインデックス付けするテーブルを格納するように構成されたレジスタを含み、
前記命令処理回路は、
プログラムバイナリに関連付けられた1つ又は複数の命令を命令メモリからフェッチすることであって、前記1つ又は複数の命令にはイミディエートオペランドを含む命令が含まれる、前記フェッチすること、
前記イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定すること、及び
前記イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定することに応答して、
前記HCILTにおいて、前記イミディエートオペランドによってインデックス付けされた前記ワイド・イミディエートオペランドを検索すること、
前記HCILTにおいて、前記イミディエートオペランドによってインデックス付けされた前記ワイド・イミディエートオペランドを見つけることに応答して、前記イミディエートオペランドが前記HCILTからの前記ワイド・イミディエートオペランドに置き換えられるように命令を処理すること、を行うように構成される、
プロセッサベースのシステム。
【請求項2】
前記処理要素は、前記HCILTにおいて前記イミディエートオペランドによってインデックス付けされた前記ワイド・イミディエートオペランドを見つけられなかったことに応答して、
前記プログラムバイナリの共通の中間ルックアップテーブル(CILT)から前記ワイド・イミディエートオペランドを検索することであって、前記イミディエートオペランドは前記CILT内の前記ワイド・イミディエートオペランドにインデックスを付ける、前記検索すること、及び
前記イミディエートオペランドが前記CILTからの前記ワイド・イミディエートオペランドに置き換えられるように、前記イミディエートオペランドを含む前記命令を処理すること、を行うようにさらに構成される、請求項1に記載のプロセッサベースのシステム。
【請求項3】
前記処理要素は、前記HCILTにおいて前記イミディエートオペランドによってインデックス付けされた前記ワイド・イミディエートオペランドを見つけられなかったことに応答して、前記CILTから検索した前記ワイド・イミディエートオペランドを前記HCILTに書き込むようにさらに構成される、請求項2に記載のプロセッサベースのシステム。
【請求項4】
前記処理要素は、
前記イミディエートオペランドがワイド・イミディエートオペランドへの参照ではないと判定すること、
前記イミディエートオペランドがワイド・イミディエートオペランドへの参照ではないと判定したことに応答して、前記イミディエートオペランドを含む前記命令を処理するようにさらに構成される、請求項1に記載のプロセッサベースのシステム。
【請求項5】
前記プログラムバイナリには、イミディエート値をワイド・イミディエート値にインデックス付けするテーブルである共通の中間ルックアップテーブル(CILT)が含まれており、
前記処理要素は、前記プログラムバイナリのコンテキスト切替えに応答して、前記CILT内のいくつかのエントリを前記HCILTに書き込むようにさらに構成される、請求項1に記載のプロセッサベースのシステム。
【請求項6】
前記処理要素は、前記イミディエートオペランドの予約ビットが設定されているかどうかを判定するように構成されることによって、前記イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定するようにさらに構成される、請求項1に記載のプロセッサベースのシステム。
【請求項7】
前記処理要素は、前記イミディエートオペランドを含む前記命令のオペコードを検査するように構成されることによって、前記イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定するようにさらに構成される、請求項1に記載のプロセッサベースのシステム。
【請求項8】
ワイド・イミディエートオペランドが、プロセッサの命令セットアーキテクチャ(ISA)によって許可される最大イミディエート長さよりも大きいイミディエートオペランドを含む、請求項1に記載のプロセッサベースのシステム。
【請求項9】
プロセッサベースのシステムにおいてプロセッサ要素を動作させるための方法であって、当該方法は、
プログラムバイナリに関連付けられた1つ又は複数の命令を命令メモリからフェッチするステップであって、前記1つ又は複数の命令にはイミディエートオペランドを含む命令が含まれる、フェッチするステップと、
前記イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定するステップと、
前記イミディエートオペランドがワイドオペランドへの参照であると判定することに応答して、前記プロセッサ要素にハードウェア共通の中間ルックアップテーブル(HCILT)が含まれていると判定するステップと、
前記プロセッサ要素にHCILTが含まれていると判定することに応答して、前記HCILTにおいて、前記イミディエートオペランドによってインデックス付けされた前記ワイド・イミディエートオペランドを検索するステップと、
前記HCILTにおいて、前記イミディエートオペランドによってインデックス付けされた前記ワイド・イミディエートオペランドを見つけることに応答して、前記イミディエートオペランドが前記HCILTからの前記ワイド・イミディエートオペランドに置き換えられるように前記命令を処理するステップと、を含む、
方法。
【請求項10】
前記プロセッサ要素にHCILTが含まれていないと判定するステップと、
前記プロセッサ要素にHCILTが含まれていないと判定することに応答して、
前記プログラムバイナリの共通の中間ルックアップテーブル(CILT)から前記ワイド・イミディエートオペランドを検索するステップであって、前記イミディエートオペランドは前記CILT内の前記ワイド・イミディエートオペランドにインデックスを付ける、検索するステップと、
前記イミディエートオペランドが前記CILTからの前記ワイド・イミディエートオペランドに置き換えられるように前記命令を処理するステップと、をさらに含む、請求項9に記載の方法。
【請求項11】
前記HCILTにおいて前記イミディエートオペランドによってインデックス付けされた前記ワイド・イミディエートオペランドを見つけられなかったことに応答して、
前記プログラムバイナリの共通の中間ルックアップテーブル(CILT)から前記ワイド・イミディエートオペランドを検索するステップであって、前記イミディエートオペランドは前記CILT内の前記ワイド・イミディエートオペランドにインデックスを付ける、検索するステップと、
前記イミディエートオペランドが前記CILTからの前記ワイド・イミディエートオペランドに置き換えられるように前記命令を処理するステップと、をさらに含む、請求項9に記載の方法。
【請求項12】
前記HCILTにおいて前記イミディエートオペランドによってインデックス付けされた前記ワイド・イミディエートオペランドを見つけられなかったことに応答して、前記CILTから検索した前記ワイド・イミディエートオペランドを前記HCILTに書き込むステップをさらに含む、請求項11に記載の方法。
【請求項13】
前記プログラムバイナリには、イミディエート値をワイド・イミディエート値にインデックス付けするテーブルである共通の中間ルックアップテーブル(CILT)が含まれており、
当該方法は、前記プログラムバイナリのコンテキスト切替えに応答して、CILT内のいくつかのエントリを前記HCILTに書き込むステップをさらに含む、請求項9に記載の方法。
【請求項14】
前記イミディエートオペランドがワイド・イミディエートオペランドへの参照ではないと判定するステップと、
前記イミディエートオペランドがワイド・イミディエートオペランドへの参照ではないと判定することに応答して、前記イミディエートオペランドを含む前記命令を処理するステップと、をさらに含む、請求項9に記載の方法。
【請求項15】
ワイド・イミディエートオペランドが、プロセッサの命令セットアーキテクチャ(ISA)によって許可される最大イミディエート長さよりも大きいイミディエートオペランドを含む、請求項9に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、命令セットアーキテクチャ(ISA)によって規定された命令サイズよりも大きいイミディエートオペランドを最小のオーバーヘッドで使用することに対応するためのプロセッサベースのシステム及びプロセッサベースのシステムを動作させるための方法に関する。
【背景技術】
【0002】
命令セットアーキテクチャ(ISA)は、プロセッサによって実行され得る命令を規定する。殆どのISAの命令サイズは比較的小さい(例えば、4バイト)。場合によっては、ISAによって規定された命令サイズよりも大きいイミディエート値(immediate value:即値)(つまり、メモリ位置又はレジスタへのポインタとしてではなく、命令自体の一部として格納される値)を使用することが望ましい場合がある。例えば、4バイトの命令長を有するISAでは、即時移動(move immediate)命令(例えば、「movi register,immediate」、ここで「movi」は命令のオペコードであり、「immediate」はイミディエート値を指定するイミディエートオペランドであり、及び「register」は、イミディエート値で更新されるレジスタを指定するレジスタオペランドである)の場合に、1バイトがオペコードのために予約され、1バイトがレジスタオペランドのために予約され、2バイトのみがイミディエート値オペランドのために残される。この例では、2バイトの長さを超える長さのイミディエート値を命令自体に格納することはできない。別の例として、4バイトの命令長を有する同じISAにおいて、即時オフセット(immediate offset)命令に対する分岐(例えば、「bri immediate」、ここで、「bri」は命令のオペコードであり、「immediate」はジャンプ先へのオフセット値を指定するイミディエートオペランドである)の場合に、1バイトがオペコードのために予約され、3バイトのみがイミディエートオペランドのために残される。この例では、3バイトを超える長さのイミディエート値を命令自体に格納することはできない。イミディエート値が大き過ぎて命令に格納できない場合に、そのイミディエート値は、ISAによって指示された命令によって提供される割り当てられたスペースに収まらないため、ここではワイド・イミディエートとして規定される。
【0003】
ワイド・イミディエートオペランドを含む命令は、従来、ソフトウェアによって処理される。例えば、ワイド・イミディエートオペランドを含む即時移動命令の1つのアプローチでは、ワイド・イミディエートオペランドがプログラムバイナリに埋め込まれ、ワイド・イミディエートオペランドを含む命令がロード命令に置き換えられる。従って、即時移動命令は次のようになる。
movi r0, 0xBADDF00DDEADCAFE
は、ワイド・イミディエートオペランドがプログラムバイナリ(この例では、バイナリがメモリにロードされるときのメモリ位置0xF9)に格納され、即時移動命令が
ldr r0,[0xF9]
になるように変更され得る。これは、プログラムの開発者が明示的に行う、又はコンパイル時にコンパイラによって行うことができる。特に、即時移動命令に依存する命令は、命令を処理する前に、ワイド・イミディエートオペランドをメモリからロードするのを待つ必要がある。これには複数回の処理サイクルが必要になるため、プログラムバイナリの実行時間が長くなる可能性がある。
【0004】
ワイド・イミディエートオペランドを含む即時移動命令の別のアプローチでは、命令は、左シフト命令(shl)及び即時追加命令(addi)を含む一連の命令で置き換えられる。従って、上記と同じ移動即時命令:
movi r0,0xBADDF00DDEADCAFE
は、
movi r0, 0xBADDF00D
shl r0,32
addi r0,0xDEADCAFE
になるように変更され得る。繰り返しになるが、これは、プログラムの開発者が明示的に行う、又はコンパイル時にコンパイラによって行うことができる。
【0005】
別の例として、ワイド・イミディエートオペランドを含む即時オフセット命令に対する分岐の1つのアプローチでは、それぞれがISAの命令長内に収まるイミディエートオペランドを含む複数の分岐を一緒に連鎖させて、ワイド・イミディエートオペランドによって示されたオフセットに最終的に到達することができる。このようなアプローチでは、複数の制御フローリダイレクトが発生するため、追加のプロセッサリソースが消費される。ワイド・イミディエートオペランドを含む即時オフセット命令に対する分岐の別のアプローチでは、間接分岐を使用して、ワイド・イミディエートオペランドによって示されるオフセットに到達することができる。間接分岐は、プロセッサの分岐予測回路でスペースを占有する。そして、100%予測可能なターゲットが1であるこの場合に、分岐予測回路におけるこのスペースを占有することは無駄である。
【0006】
上で議論した全ての例において、ワイド・イミディエートオペランドを含む命令を処理するために発生する比較的大きなオーバーヘッドが存在し、それによってバイナリ実行の性能を低下させる。従って、ワイド・イミディエートオペランドを含む命令を処理するための改善されたシステム及び方法が必要である。
【発明の概要】
【0007】
本開示の例示的な態様は、ワイド・イミディエート値を含む命令を処理するための改善されたシステム及び方法に関する。これに関して、1つの例示的な態様では、プロセッサベースのシステム内のプロセッサ要素は、プログラムバイナリに関連付けられた1つ又は複数の命令をフェッチするように構成され、ここで、1つ又は複数の命令にはイミディエートオペランドを含む命令が含まれる。プロセッサ要素は、イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかを判定するように構成される。イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定することに応答して、プロセッサ要素は、プログラムバイナリの共通のイミディエートルックアップテーブル(CILT)からワイド・イミディエートオペランドを検索するように構成され、ここで、イミディエートオペランドはCILT内のイミディエートオペランドにインデックス付けする。次に、プロセッサ要素は、イミディエートオペランドがCILTからのワイド・イミディエートオペランドに置き換えられるように、イミディエートオペランドを含む命令を処理するように構成される。イミディエートオペランドを含む命令がCILT内のワイド・イミディエートオペランドを参照できるようにすることで、ワイド・イミディエート値を含む命令を、デュアル・セマンティクスを有する単一の命令としてプログラムバイナリで表現することができる。これにより、プログラムバイナリの静的サイズが小さくなり、従来のアプローチと比較して命令フェッチ帯域幅が向上し、これは、プロセッサベースのシステムのパフォーマンスが向上させ得る。
【0008】
別の例示的な態様では、プロセッサベースのシステム内のプロセッサ要素は、ハードウェアCILT(HCILT)及び命令処理回路を含む。HCILTには、イミディエート値をワイド・イミディエート値にインデックス付けするテーブルを格納するように構成されたハードウェアストレージ(例えば、メモリ又はレジスタ)が含まれる。命令処理回路は、プログラムバイナリに関連する1つ又は複数の命令を命令メモリからフェッチするように構成されており、命令にはイミディエートオペランドを含む命令が含まれる。命令処理回路は、イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかを判定するように構成される。イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定することに応答して、命令処理回路は、HCILTにおいて、イミディエートオペランドによってインデックス付けされたワイド・イミディエートオペランドを検索し、HCILTにおいてワイド・イミディエートオペランドを見つけることに応答して、イミディエートオペランドをHCILT内の(from:からの)ワイド・イミディエートオペランドに置き換えるように命令を処理する。ワイド・イミディエートオペランドがHCILTで見つからない場合に、上で議論したように、そのワイド・イミディエートオペランドはCILTから取得される。イミディエートオペランドがワイド・イミディエートオペランドへの参照でない場合に、命令は通常通り処理される。HCILTを使用してワイド・イミディエートオペランドを格納及び取得すると、メモリからワイド・イミディエートオペランドをロードする必要がなくなり、こうしてプロセッサベースのシステムのパフォーマンスを大幅に向上させ得る。
【0009】
当業者は、本開示の範囲を理解し、添付の図面に関連する好ましい実施形態の以下の詳細な説明を読んだ後に、その追加の態様を理解するだろう。
【図面の簡単な説明】
【0010】
本明細書に組み込まれ、その一部を形成する添付の図面は、本開示のいくつかの態様を示しており、詳細な説明とともに、本開示の原理を説明するのに役立つ。
図1】ワイド・イミディエートオペランドが共通のイミディエートルックアップテーブル(CILT)又はハードウェアCILT(HCILT)からフェッチされるように、ワイド・イミディエートオペランドを含む命令を処理するように構成されたプロセッサを含む例示的なプロセッサベースのシステムを示すブロック図である。
図2】ワイド・イミディエートオペランドがCILT又はHCILTからフェッチされるように、ワイド・イミディエートオペランドを含む命令を処理する図1のプロセッサベースのシステムにおけるプロセッサの例示的な詳細を示すブロック図である。
図3】CILT又はHCILTに格納したワイド・イミディエートオペランドを参照するイミディエートオペランドを含み得る命令を処理するための例示的なプロセスを示すフローチャートである。
図4】CILT又はHCILTに格納したワイド・イミディエートオペランドを参照するイミディエートオペランドを含み得る移動即時命令を処理するための例示的なプロセスを示すフローチャートである。
図5】CILTからHCILTを投入するための例示的なプロセスを示すフローチャートである。
図6】ソースコードを、CILTを含むプログラムバイナリにコンパイルするための例示的なコンパイラシステムを示すブロック図である。
図7】ソースコードからCILTを含むプログラムバイナリを生成するための例示的なプロセスを示すフローチャートである。
図8】ワイド・イミディエートオペランドがCILT又はHCILTからフェッチされるように、ワイド・イミディエートオペランドを含む命令を処理するように構成されたプロセッサを含む例示的なプロセッサベースのシステムを示すブロック図である。
図9】ワイド・イミディエートオペランドがHCILTに見つからない、HCILTミスを処理するための例示的なプロセスを示すフローチャートである。
【発明を実施するための形態】
【0011】
本開示の例示的な態様は、ワイド・イミディエート値を含む命令を処理するための改善されたシステム及び方法に関する。これに関して、1つの例示的な態様では、プロセッサベースのシステム内のプロセッサ要素は、プログラムバイナリに関連付けられた1つ又は複数の命令をフェッチするように構成され、ここで、1つ又は複数の命令にはイミディエートオペランドを含む命令が含まれる。プロセッサ要素は、イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかを判定するように構成される。イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定することに応答して、プロセッサ要素は、プログラムバイナリの共通のイミディエートルックアップテーブル(CILT)からワイド・イミディエートオペランドを検索するように構成され、ここで、イミディエートオペランドはCILT内のイミディエートオペランドにインデックス付けする。次に、プロセッサ要素は、イミディエートオペランドがCILTからのワイド・イミディエートオペランドに置き換えられるように、イミディエートオペランドを含む命令を処理するように構成される。イミディエートオペランドを含む命令がCILT内のワイド・イミディエートオペランドを参照できるようにすることで、ワイド・イミディエート値を含む命令を、デュアル・セマンティクスを有する単一の命令としてプログラムバイナリで表現することができる。これにより、プログラムバイナリの静的サイズが小さくなり、従来のアプローチと比較して命令フェッチ帯域幅が向上し、これは、プロセッサベースのシステムのパフォーマンスを向上させ得る。
【0012】
別の例示的な態様では、プロセッサベースのシステム内のプロセッサ要素は、ハードウェアCILT(HCILT)及び命令処理回路を含む。HCILTには、イミディエート値をワイド・イミディエート値にインデックス付けするテーブルを格納するように構成されたハードウェアストレージ(例えば、メモリ又はレジスタ)が含まれる。命令処理回路は、プログラムバイナリに関連する1つ又は複数の命令を命令メモリからフェッチするように構成されており、命令にはイミディエートオペランドを含む命令が含まれる。命令処理回路は、イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかを判定するように構成される。イミディエートオペランドがワイド・イミディエートオペランドへの参照であると判定することに応答して、命令処理回路は、HCILTにおいて、イミディエートオペランドによってインデックス付けされたワイド・イミディエートオペランドを検索し、HCILTにおいてワイド・イミディエートオペランドを見つけることに応答して、イミディエートオペランドがHCILT内のワイド・イミディエートオペランドに置き換えられるように命令を処理する。ワイド・イミディエートオペランドがHCILTで見つからない場合に、上で議論したように、そのワイド・イミディエートオペランドはCILTから取得される。イミディエートオペランドがワイド・イミディエートオペランドへの参照でない場合に、命令は通常通り処理される。HCILTを使用してワイド・イミディエートオペランドを格納及び取得すると、メモリからワイド・イミディエートオペランドをロードする必要がなくなり、こうしてプロセッサベースのシステムのパフォーマンスを大幅に向上させ得る。
【0013】
図1は、ワイド・イミディエートオペランドを含む命令をより効率的に処理するためにそれに対する改良を含み得る、例示的なプロセッサベースのシステム100の概略図である。プロセッサベースのシステム100は、複数のプロセッサブロック102(1)~102(M)を含み、ここで、例示的な本実施形態では、「M」は、所望の任意の数のプロセッサブロック102に等しい。各プロセッサブロック102は、複数のプロセッサ要素104(1)~104(N)を含み、ここで、例示的な本実施形態では、「N」は、所望の任意の数のプロセッサに等しい。プロセッサブロック102のそれぞれのプロセッサ要素104は、マイクロプロセッサ(μP)、ベクトルプロセッサ(vP)、又は任意の他のタイプのプロセッサであり得る。さらに、各プロセッサブロック102は、プロセッサ要素104のいずれかによって使用されるか、又はプロセッサ要素104のそれぞれの間で共有されるキャッシュデータを格納するための共有レベル2(L2)キャッシュ106を含む。プロセッサブロック102のいずれかによって使用される、又はプロセッサブロック102のそれぞれの間で共有されるキャッシュデータを格納するために、共有レベル3(L3)キャッシュ108も提供される。各プロセッサブロック102が共有L3キャッシュ108にアクセスできる、及びメイン、外部メモリ(MEM)、1つ又は複数の周辺機器114(入力/出力装置、ネットワーキング装置等を含む)、及びストレージ116にアクセスするためのメモリコントローラ112等の他の共有リソースにアクセスできるようにする内部バスシステム110が提供される。
【0014】
動作中に、1つ又は複数のプロセッサブロック102内の1つ又は複数のプロセッサ要素104は、メモリコントローラ112と連動して、メモリから命令をフェッチし、命令を実行して1つ又は複数の動作を実行し、結果を生成し、そしてオプションで、結果をメモリに再び格納するか、又は消費(consumption)のために別のコンシューマ(consumer)命令に結果を提供する。
【0015】
図2は、本開示の例示的な実施形態による、プロセッサベースのシステム100のプロセッサブロック102内のプロセッサ要素104の詳細を示している。プロセッサ要素104は、命令処理回路200を含む。命令処理回路200は、命令メモリ206から命令204をフェッチするように構成された命令フェッチ回路202を含む。命令メモリ206は、例として、プロセッサベースのシステム100内のシステムメモリに又はシステムメモリの一部として提供され得る。命令キャッシュ208がまた、命令メモリ206からフェッチした命令204をキャッシュして、命令フェッチ回路202の待ち時間を短縮するために、プロセッサ要素104に提供され得る。この例の命令フェッチ回路202は、フェッチした命令204Fが実行される実行回路212に到達する前に、フェッチした命令204Fとしての命令204を、前処理される命令処理回路200内の命令ストリーム210として1つ又は複数の命令パイプラインI~Iに提供するように構成される。命令パイプラインI~Iは、命令処理回路200の異なる処理回路又はステージに亘って提供され、フェッチした命令204Fを実行回路212で実行する前にスループットを向上させるために同時に実行できる一連のステップでフェッチした命令204Fを前処理及び処理する。
【0016】
制御フロー予測回路214(例えば、分岐予測回路)がまた、条件付き分岐命令等の制御フローフェッチ命令204Fのターゲットアドレスを推測又は予測するために、プロセッサ要素104内の命令処理回路200に提供される。制御フロー予測回路210によるターゲットアドレスの予測を命令フェッチ回路202によって使用し、予測したターゲットアドレスに基づいてフェッチすべき次のフェッチされる命令204Fを決定する。命令処理回路200はまた、命令フェッチ回路202によってフェッチしたフェッチ命令204Fをデコード命令204Dにデコードして、必要な命令タイプ及びアクションを決定するように構成された命令デコード回路216を含み、その命令タイプ及びアクションは、どの命令パイプラインI~Iをデコード命令204Dに配置する必要があるかを決定するためにも使用され得る。次に、デコード命令204Dは、1つ又は複数の命令パイプラインI~Iに配置され、次に、レジスタアクセス回路218に提供される。
【0017】
レジスタアクセス回路218は、物理レジスタファイル(PRF)222内の物理レジスタ220(1)~220(X)にアクセスして、実行回路212からの実行命令204Eから生成された値を検索するように構成される。レジスタアクセス回路218はまた、実行すべきデコード命令204Dのソースレジスタオペランドとして、実行命令204Eから検索した生成値を提供するように構成される。命令処理回路200はディスパッチ回路224も含み、ディスパッチ回路224は、デコード命令204Dの全てのソースレジスタオペランドが利用可能であるときに、デコード命令204Dを実行すべき実行回路212にディスパッチするように構成される。例えば、ディスパッチ回路224は、デコード化コンシューマ命令204Dを実行のために実行回路212にディスパッチする前に、以前に実行されたプロデューサ命令から生成された値を消費する命令である、デコード化コンシューマ命令204Dのオペランドに必要な値が利用可能であることを確認する責任がある。デコード命令204Dのオペランドには、中間値、メモリに格納した値、及びコンシューマ命令に対するプロデューサ命令と見なされる他のデコード命令204Dから生成された値が含まれ得る。
【0018】
特に、HCILT226は、PRF222内に、又は示されるように、PRF222に追加して提供される。この例では、HCILT226は、一組のHCILTレジスタ228(1)~228(Y)を含み、ここで、「Y」は、プロセッサ要素104のISAの命令サイズ内に収まるイミディエート値によってワイド・イミディエート値がインデックス付けされるように、ワイド・イミディエート値を格納するための任意の所望の数である。HCILTレジスタ228は、以下で詳細に議論するようにHCILT226の機能を実現するためのサポートレジスタを含み得る。命令にワイド・イミディエートオペランドを参照するイミディエートオペランドが含まれる(以下で議論するように、オペコード又はイミディエートオペランドのセマンティクスによって指定される)場合に、イミディエートオペランドがレジスタアクセス回路218によってHCILT226内のワイド・イミディエートオペランドに置き換えられるように、HCILT226でワイド・イミディエートオペランドが検索され得る。これにより、メモリからのワイド・イミディエートオペランドのロードをバイパスすることにより、プログラムバイナリ実行のパフォーマンスを大幅に向上させることができ、これは、他に、ワイド・イミディエート値を含む命令を処理させる必要がある。HCILT226の機能に関する更なる詳細については、以下で議論する。特に、HCILT226が一組のレジスタとして上に示されているが、様々な実施形態において、HCILTは、ハードウェアメモリ等の任意のタイプの専用ハードウェアストレージとして実装され得る。
【0019】
実行回路212は、ディスパッチ回路224から受信したデコード命令204Dを実行するように構成される。上で議論したように、実行命令204Eは、他の命令によって消費される生成値を生成することができる。そのような場合に、書き込み回路230(213)は、生成した値をPRF222に書き込み、それによって、それら値は、後でコンシューマ命令によって消費され得る。
【0020】
図3は、本開示の例示的な実施形態による、プロセッサ要素104を動作させてワイド・イミディエートオペランドを含む命令を処理するための方法を示すフロー図である。第1に、プログラムバイナリに関連する命令は、命令メモリ206から、又はキャッシュされている場合は命令キャッシュ208からフェッチされる(ブロック300)。特に、以下で詳細に議論するように、プログラムバイナリは、プロセッサ要素104のISAの命令サイズ内に収まるイミディエートオペランドによってインデックス付けされたワイド・イミディエートオペランドを格納するテーブルであるCILTを含む。命令にはイミディエートオペランドを含む命令が含まれる。上で議論したように、イミディエートオペランドは、メモリ位置又はレジスタへのポイントとしてではなく、命令自体の一部として格納される値である。イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかの判定が行われる(ブロック302)。イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかの判定は、いくつかの方法で実施され得る。例示的な一実施形態では、プロセッサ要素104のISAは、イミディエートオペランドが予約ビットを含むことを指定することができ、これは、イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかを指定する。例えば、イミディエートオペランドの最上位ビットが設定されている場合に、ISAは、イミディエートオペランドがワイド・イミディエートオペランドへの参照であることを指定することができ、これは、以下で議論するようにCILT又はHCILTに格納され得る。イミディエートオペランドの最上位ビットが設定されていない場合に、ISAは、イミディエートオペランドがワイド・イミディエートオペランドへの参照ではないことを指定する場合がある。別の例示的な実施形態では、プロセッサ要素104のISAは、カスタムオペコードに続くイミディエートオペランドがワイド・イミディエートオペランドへの参照であることを指定するカスタムオペコードを指定することができる。
【0021】
イミディエートオペランドがワイド・イミディエートオペランドへの参照ではない場合に、命令は従来通り実行回路212によって処理される(ブロック304)。イミディエートオペランドがワイド・イミディエートオペランドへの参照である場合に、プロセッサ要素104がHCILT226を含むかどうかの判定が行われる(ブロック306)。上で議論したように、HCILT226は、プロセッサ要素104のISAの命令サイズ内に収まるイミディエートオペランドによって参照されるワイド・イミディエートオペランドを格納するテーブルを格納するための1つ又は複数のレジスタを含むハードウェア構造である。HCILT226は、CILTへのハードウェア系(corollary)であり、CILTのみの場合と比較して、ワイド・イミディエートオペランドを含む命令の処理をさらに迅速化することを目的としている。プロセッサ要素104がHCILT226を含むかどうかを判定することは、プロセッサ要素104のレジスタを読み取ることを含み得る。プロセッサ要素104がHCILT226を含むかどうかを判定するための命令は、プロセッサ要素104のISAに含まれ得る。プロセッサ要素104がHCILT226を含まない場合に、ワイド・イミディエートオペランドは、CILTからプログラムバイナリで取得(retrieve:検索)できる(ブロック308)。ワイド・イミディエートオペランドをCILTからプログラムバイナリで取得することには、イミディエート値によってインデックス付けされたメモリ位置からワイド・イミディエートオペランドをフェッチすることが含まれ得る。イミディエートオペランドは、(例えば、CILTの開始メモリアドレスからのオフセット値を介して)ワイド・イミディエート値を含むメモリ位置を直接指し示す場合があり、又は、CILTは、ワイド・イミディエート値の実際のインデックスを取得するためにイミディエート値がハッシュされるマップの場合がある。特に、いずれの方法でも、メモリからのワイド・イミディエート値のロードは、ワイド・イミディエートオペランドを参照するイミディエートオペランドを含む命令に遭遇することに応答して、プロセッサ要素104によって実行され(イミディエートオペランドのデュアル・セマンティクス又はカスタムオペランドのいずれかによって)、それによって、メモリからのロードがプログラムバイナリに関連付けられた命令で明示されないようにする。違いは以下に擬似コードで表され、従来のアプローチによる追加動作は
A=loadX//Xはワイド・イミディエートオペランドである
のように表される。
B=Y+A//先行するロード命令に依存する
は、
B=Y+A’//A’は、デュアル・セマンティクスを有するイミディエートオペランドである
のように再構成できる。示されるように、ワイド・イミディエートオペランドを含む命令を処理するために使用される2つの命令は、単一の命令に圧縮することができ、ここで、ワイド・イミディエート値のロードは、専用のISA仕様に従ってプロセッサによって処理される。これは、プログラムバイナリの静的コードサイズを減らすだけでなく、命令フェッチ帯域幅も減らし、プロセッサ要素104の性能を向上させ得る。
【0022】
次に、命令は、イミディエートオペランドがCILTからのワイド・イミディエートオペランドで置き換えられるように処理される(ブロック310)。プロセッサ要素104がHCILT226を含む場合に、イミディエートオペランドによって参照されるワイド・イミディエートオペランドがHCILT226内にあるかどうかの判定が行われる(ブロック312)。HCILT226は、全てのワイド・イミディエートオペランドをプログラムバイナリで保持するのに十分な大きさではない場合がある。つまり、HCILT226はCILTよりも小さい場合があるため、一部のワイド・イミディエートオペランドのみがHCILT226に存在する場合がある。イミディエートオペランドによって参照されるワイド・イミディエートオペランドがHCILT226にない場合に、ワイド・イミディエートオペランドは、CILTからプログラムバイナリで取得され(ブロック314)、これは、プロセッサ要素104によって開始される動的ロードによって上で議論したように行われる。次に、命令は、イミディエートオペランドがCILTからのワイド・イミディエートオペランドに置き換えられるように処理される(ブロック316)。オプションで、ワイド・イミディエートオペランドがまたCILTからHCILT226にコピーされ(ブロック318)、それによって、将来の処理サイクルでワイド・イミディエートオペランドに容易にアクセスできるようにすることもできる。以下で議論するように、1つ又は複数のキャッシング規則によって、HCILT226で見つからないワイド・イミディエートオペランドを、CILTからフェッチした後にHCILT226に追加すべきかどうかを指定することができる。
【0023】
ワイド・イミディエートオペランドがHCILT226で見つかった場合に、ワイド・イミディエートオペランドは、HCILT226から検索される(ブロック320)。ワイド・イミディエートオペランドは、CILTに関して上で議論したように、イミディエートオペランドを直接インデックス又はハッシュインデックスとして使用して、HCILT226から取得することができる。次に、命令は、イミディエートオペランドがHCILT226からのワイド・イミディエートオペランドに置き換えられるように処理される(ブロック322)。
【0024】
前述の動作をサポートするために、複数のシステムレジスタをプロセッサ要素104に追加して、CILTを単独で、又はCILTをHCILTとともに使用するためのサポートを提供することができる。以下の表に、追加のレジスタ及びその機能を示す。
【表1】

特に、これらのレジスタは、ワイド・イミディエートオペランドを含む命令の処理を改善するための、CILT及びHCILTのISAサポートの1つの例示的な実施態様に過ぎない。1つ又は複数の代替の実施形態では、CILTからワイド・イミディエートをロードするようにISAの専用命令が提供され、上で議論した1つ又は複数のレジスタが不要になり得、こうして含めないようにする。
【0025】
図4は、特定の命令、プロセッサ要素104によって処理される即時移動(movi)命令に関して上で議論したプロセスの適用を示すフロー図である。即時移動命令には、レジスタオペランド及びイミディエートオペランドが含まれる(ブロック400)。命令は、処理されると、イミディエートオペランドをレジスタに移動させる。プロセッサ要素104は、イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかを判定する(ブロック402)。上で議論したように、イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかの判定には、イミディエートオペランドの予約ビットが設定されているかどうかの判定が含まれ得る。イミディエートオペランドがワイド・イミディエートオペランドへの参照でない場合に、レジスタはイミディエートオペランドに設定され(ブロック404)、即時移動命令が完了する(ブロック406)。イミディエートオペランドがワイド・イミディエートオペランドへの参照である場合に、プロセッサ要素104は、そのプロセッサ要素104がHCILT226を含むかどうかを判定する(ブロック408)。プロセッサ要素104がHCILT226を含む場合に、レジスタは、HCILT_table[immediate]の値に設定される(ブロック410)。示されるように、イミディエートオペランドは、HCILT226内のワイド・イミディエートオペランドにインデックスを付ける。次に、即時移動命令が完了する(ブロック406)。プロセッサ要素104がHCILT226を含まない場合に、プロセッサ要素104は、ロードレジスタ命令(「ldr register,[CILT_base_address+immediate])を注入して、CILT_base_addressで始まるメモリ内に格納されているCILTからワイド・イミディエートオペランドをロードする(ブロック412)。この場合も、イミディエートオペランドは、CILT内のワイド・イミディエートオペランドにインデックスを付けるために使用される。イミディエートオペランドがワイド・イミディエートオペランドへの参照であるかどうかを判定するために使用される任意の予約ビットは、イミディエート値をインデックス(オフセット等)として使用してワイド・イミディエートオペランドを検索する前に、イミディエート値から削除され得る。次に、即時移動命令が完了する(ブロック406)。
【0026】
図5は、本開示の例示的な実施形態による、コンテキスト切替え中に、プロセッサ要素104内のHCILT226がCILTからどのように投入(populate:追加)されるかを示すフロー図である。HCILT226の投入は、コンテキスト切替えに応答してプログラムバイナリで発生する(ブロック500)。プロセッサ要素104は、HCILT226内のエントリの数がCILT内のエントリの数以上であるかどうかを判定する(ブロック502)。上で議論したように、HCILT226は、複数のレジスタを含む。レジスタのサイズによって、HCILT226に格納できるエントリ(各エントリがワイド・イミディエートオペランドを格納する場所)の数が決定され、こうしてエントリの数が決まる。上で議論したように、HCILT226内のエントリの数は、レジスタのHCILT_entriesに提供され得、その場合に、HCILT226内のエントリの数がCILT内のエントリの数以上であるかどうかを判定することは、単にレジスタを読み取って比較を行うだけであり得る。HCILT226内のエントリ数がCILT内のエントリ数以上である場合に、全てのCILTエントリがHCILTにコピーされる(ブロック504)。例えば、32個のエントリを有するCILT、及び32個以上のエントリを有するHCILT226の場合に、以下の例示的な命令を実行して、CILTからHCILT226にデータを取り込む(populate)ことができる。
wsr HCILT_active_entry,0
wsr HCILT_table wide_immediate_0
wsr HCILT_active_entry,1
wsr HCILT_table wide_immediate_1
wsr HCILT_active_entry,2
wsr HCILT_table wide_immediate_2
・・・
wsr HCILT_active_entry,31
wsr HCILT_Table wide_immediate_31
ここで、「wsr register,immediate」は「immediate」を「register」に書き込むシステムレジスタ書き込み命令であり、「wide_immediate_x」は、CILTに格納されているワイド・イミディエートオペランド「x」である。示されるように、HCILT_active_entryは、HCILT_tableへの全ての書き込みの前にHCILT_tableのインデックスを更新するために書き込まれる。しかしながら、いくつかの実施形態では、HCILT_tableインデックスの処理は、その処理が自動的にインクリメント及びデクリメントされるように(例えば、スタックと同様に)不透明であり得る。次に、コンテキストが切り替えられる(ブロック506)。
【0027】
HCILT226内のエントリの数がCILT内のエントリの数よりも少ない場合に、CILTエントリのサブセットのみがHCILT226にコピーされる(ブロック508)。例えば、32個のエントリを有するCILT、及び4個のエントリを有するHCILTの場合に、以下の例示的な命令を実行して、CILTからHCILT226にデータを取り込むことができる。
wsr HCILT_active_entry,0
wsr HCILT_table wide_immediate_0
wsr HCILT_active_entry,1
wsr HCILT_table wide_immediate_4
wsr HCILT_active_entry,2
wsr HCILT_table wide_immediate_12
wsr HCILT_active_entry,3
wsr HCILT_table wide_immediate_29
それによって、CILTのエントリ0、4、12、及び29が、HCILT226にコピーされる。次に、コンテキストが切り替えられる(ブロック506)。HCILT226のエントリ数がCILTの全てのエントリを格納するのに十分でない場合に、CILTのどのエントリをHCILT226にコピーするかを決定するために、任意の数の異なるポリシーを提供することができる。さらに、キャッシングポリシーは、ワイド・イミディエートオペランドがHCILT226で見つからず(つまり、HCILT226ミス)、ワイド・イミディエートオペランドをCILTからフェッチする必要がある場合に、ワイド・イミディエートオペランドがその時点でHCILT226にコピーされるように、上で議論したように実装される。
【0028】
上で議論したようにプロセッサ要素104によってフェッチ、デコード、及び実行されるプログラムバイナリに関連する命令は、それら命令にCILTが含まれるようにコンパイラによって生成される。図6は、例示的なコンパイラシステム600を示している。コンパイラシステム600は、メモリ602及び処理回路604を含む。メモリ602及び処理回路604は、バス606を介して接続される。以下で議論するように、メモリ602は命令を格納し、命令が処理回路604によって実行されると、コンパイラシステム600に、ソースコードを検索又は他に受信させ、ソースコードの中間表現を生成させ、1つ又は複数のコンパイラ最適化をソースコードの中間表現に適用させ、ソースコードの最適化した中間表現をプロセッサベースのシステムのプロセッサによる実行に適したマシンコードとして提供させる。コンパイラシステム600は、ソースコード及び/又はマシンコードの記憶及び検索のためにストレージ610に接続することができる入力/出力回路608をさらに含むことができる。説明の目的で、コンパイラシステム600の動作は、ソースコードをプロセッサベースのシステム100のプロセッサ要素104のマシンコードにコンパイルすることに関連するので説明する。しかしながら、コンパイラシステム600は、より一般的にソースコードを、任意のプロセッサベースのシステム内の任意のプロセッサに適したマシンコードにコンパイルすることができ、任意のプロセッサは、いくつかの異なるプロセッサベースのシステムに関するいくつかの異なるプロセッサを含む。本開示の様々な実施形態によれば、メモリ602は命令を含み得、命令が処理回路604によって実行されると、以下で詳細に議論するように、コンパイラシステム600に、CILTを含むマシンコードと、CILTに格納されているワイド・イミディエート値を参照するイミディエート値を含む1つ又は複数の命令とを生成させる。
【0029】
図7は、本開示の例示的な実施形態による、コンパイラシステム600を動作させて、CILTを含むプログラムバイナリを生成するための方法を示すフロー図である。まず、コンパイラシステム600は、ソースコードを受信する(ブロック700)。ソースコードは、C、Rust、Go、Swift等の高級プログラミング言語で記述されたコードであり得る。あるいはまた、ソースコードは、以下で議論するように、コンパイラシステム600によってのみアセンブルされる低レベル言語(すなわち、マシンコードで直接書かれる)であり得る。コンパイラシステム600は、ソースコード内のワイド・イミディエートオペランドを識別する(ブロック702)。ワイド・イミディエートオペランドは、1つ又は複数の規則に従った静的コード分析によって識別することができる。例えば、ワイド・イミディエートペランドは、その長さに基づいて識別することができるが、ソースコードに特定の回数存在する等、追加の要件を満たす必要がある場合もある。コンパイラシステム600は、ソースコードを分析に適した中間表現に変換した後に、ワイド・イミディエートオペランドを識別し得る。コンパイラシステム600は、CILTにおいて識別されたワイド・イミディエート値を提供し(ブロック704)、これは、上で議論したように、ワイド・イミディエートオペランドをプロセッサ要素104のISAの命令長内に収まるイミディエート値にインデックス付けするデータ構造、具体的にはテーブルである。コンパイラシステム600は、ソースコードに基づいてマシンコードを提供する前に、コード最適化等の1つ又は複数の追加のステップを実行することができる(ブロック706)。上で議論したように、CILTデータ構造は、イミディエートオペランドがCILTに及びオプションでHCILT226に格納したワイド・イミディエートオペランドを参照するのを可能にするプロセッサ要素104の更新されたISAと共に、バイナリ実行の性能を向上させ得る。
【0030】
図8は、プロセッサ802に関する実行時情報に基づいてコンパイラによって最適化したマシンコードの実行をサポートするように構成されたプロセッサ802を含む例示的なプロセッサベースのシステム800のブロック図である。例えば、図10のプロセッサ802は、図2のプロセッサ要素104であり得、プロセッサベースのシステム800は、図1のプロセッサベースのシステム100と同じであり得るが、更なる及び/又は代替の詳細が示される。プロセッサベースのシステム800は、プリント回路基板(PCB)、サーバ、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、携帯情報端末(PDA)、コンピューティングパッド、モバイル装置、又は他の装置等の電子ボードカードに含まれる1つ又は複数の回路であり得、例えば、サーバ又はユーザのコンピュータを表し得る。この例では、プロセッサベースのシステム800は、プロセッサ802を含む。プロセッサ802は、マイクロプロセッサ、中央処理装置等の1つ又は複数の汎用処理回路を表す。より具体的には、プロセッサ802は、EDGE命令セットマイクロプロセッサ、又はプロデューサ命令の実行から生じる生成値を通信するための明示的なコンシューマ命名(naming)をサポートする命令セットを実装する他のプロセッサであり得る。プロセッサ802は、本明細書で議論する動作及びステップを実行するための命令において処理ロジックを実行するように構成される。この例では、プロセッサ802は、命令の一時的で高速アクセスのメモリストレージのための命令キャッシュ804と、命令処理回路806とを含む。システムメモリ808等のメモリからシステムバス810を介してフェッチ又は事前にフェッチした命令は命令キャッシュ804に格納される。命令処理回路806は、命令キャッシュ804にフェッチした命令を処理し、実行のために命令を処理するように構成される。
【0031】
プロセッサ802及びシステムメモリ808は、システムバス810に結合され、プロセッサベースのシステム800に含まれる周辺装置を相互結合することができる。よく知られているように、プロセッサ802は、システムバス810を介してアドレス、制御、及びデータ情報を交換することによってこれらの他の装置と通信する。例えば、プロセッサ802は、スレーブ装置の例として、システムメモリ808内のメモリコントローラ812にバストランザクション要求を通信することができる。図8には示していないが、複数のシステムバス810を提供することができ、各システムバス810は、異なるファブリックを構成する。この例では、メモリコントローラ812は、システムメモリ808内のメモリアレイ814にメモリアクセス要求を提供するように構成される。メモリアレイ814は、データを格納するためのストレージビットセルのアレイから構成される。システムメモリ808は、非限定的な例として、読み取り専用メモリ(ROM)、フラッシュメモリ、同期DRAM(SDRAM)等のダイナミックランダムアクセスメモリ(DRAM)、及びスタティックメモリ(例えば、フラッシュメモリ、スタティックランダムアクセスメモリ(SRAM)等))であり得る。
【0032】
他の装置を、システムバス810に接続することができる。図8に示されるように、これらの装置は、例として、システムメモリ808、1つ又は複数の入力装置816、1つ又は複数の出力装置818、モデム820、及び1つ又は複数の表示コントローラ822を含むことができる。入力装置816は、入力キー、スイッチ、音声プロセッサ等を含むがこれらに限定されない、任意のタイプの入力装置を含むことができる。出力装置818は、オーディオ、ビデオ、他の視覚的インジケータ等を含むがこれらに限定されない、任意のタイプの出力装置を含むことができる。モデム820は、ネットワーク824との間でデータの交換を可能にするように構成された任意の装置であり得る。ネットワーク824は、有線又は無線ネットワーク、プライベート又はパブリックネットワーク、ローカルエリアネットワーク(LAN)、ワイヤレスローカルエリアネットワーク(WLAN)、ワイドエリアネットワーク(WAN)、BLUETOOTH(登録商標)ネットワーク、及びインターネットを含むがこれらに限定されない、任意のタイプのネットワークであり得る。モデム820は、所望の任意のタイプの通信プロトコルをサポートするように構成することができる。プロセッサ802は、システムバス810を介して表示コントローラ822にアクセスして、1つ又は複数のディスプレイ826に送信される情報を制御するようにも構成され得る。ディスプレイ826は、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ等を含むがこれらに限定されない任意のタイプのディスプレイを含むことができる。
【0033】
図8のプロセッサベースのシステム800は、命令に従って所望の任意のアプリケーションのためにプロセッサ802によって実行される1組の命令828を含み得る。命令828は、非一時的なコンピュータ可読媒体830の例として、システムメモリ808、プロセッサ802、及び/又は命令キャッシュ804に格納され得る。命令828は、完全に又は少なくとも部分的に、それらの実行中にシステムメモリ808内に及び/又はプロセッサ802内に存在し得る。命令828は、ネットワーク824がコンピュータ可読媒体830を含むように、モデム820を通じてネットワーク824を介してさらに送信又は受信され得る。
【0034】
コンピュータ可読媒体830は、例示的な実施形態では単一の媒体として示されているが、「コンピュータ可読媒体」という用語は、1つ又は複数の命令セットを格納する単一の媒体又は複数の媒体(例えば、集中型又は分散型データベース、及び/又は関連するキャッシュ及びサーバ)を含むように解釈すべきである。「コンピュータ可読媒体」という用語は、処理装置によって実行するための一組の命令を格納、符号化、又は搬送することができ、処理装置に、本明細書に開示する実施形態の方法論の任意の1つ又は複数の命令を実行させる任意の媒体も含むと解釈されるものとする。従って、「コンピュータ可読媒体」という用語は、固体メモリ、光学媒体、及び磁気媒体を含むがこれらに限定されないものと解釈すべきである。
【0035】
図9は、本開示の一実施形態による、ワイド・イミディエートオペランドがHCILT226に見つからない場合(すなわち、HCILTミス)に起こり得ることに関する詳細を示すフローチャートである。このプロセスは、図3に関して上で議論したプロセスのブロック312から始まり、ここで、ワイド・イミディエートオペランドがHCILT226で見つからない(図3のブロック312からのいいえ(NO)のパス)。ワイド・イミディエートオペランドがHCILT226で見つからない場合に、プロセッサ要素104がHCILTミスに対するバックエンドサポートを有するかどうかの判定がなされる(ブロック900)。本明細書で議論するように、HCILTミスのバックエンドサポートとは、パイプライン(又はイミディエートオペランドを含む命令を現在実行しているパイプラインの一部)をブロックできる一方で、CILTからイミディエートオペランドをロードする命令がバックエンドに直接注入され、その後、パイプラインをフラッシュせずに処理することを意味する。プロセッサ要素104がHCILTミスに対するバックエンドサポートを有している場合に、パイプラインが保持され(ブロック902)、イミディエートオペランドがCILTからのワイド・イミディエートオペランドに置き換えられるように、命令が再処理される(ブロック904)。次に、パイプラインに予期しない危険があったかどうかの判定がなされる(ブロック906)。これは、例えば、イミディエートオペランドをCILTからのワイド・イミディエートオペランドに置き換える命令が、パイプラインを保持していても実行リソースを取得できない場合や、変換エラーが発生した場合等に発生し得る。パイプラインに予期しない危険があった場合に、パイプラインがフラッシュされ(ブロック908)、命令が再フェッチされ(ブロック910)、イミディエートオペランドがCILTからのワイド・イミディエートオペランドとしてロードされるように命令が変換され(ブロック912)、変換した命令が処理される(ブロック914)。特に、予期しない危険が発生した場合に、パイプラインフラッシュが発生し、これにより、イミディエートオペランドを含む命令の処理のオーバーヘッドが増加する。
【0036】
パイプラインに予期しない危険がなかった場合(すなわち、パイプラインを保持した後に、イミディエートオペランドをCILTからのワイド・イミディエートオペランドに置き換えられるような命令の再処理が問題なく進行する場合)に、ポリシーによって、ワイド・イミディエートオペランドをHCILTに挿入する必要があるかどうかの判定が行われる(ブロック916)。本明細書で議論するワイド・イミディエートオペランドを処理するためのサポートの一部として、プロセッサベースのシステム100は、HCILT226で見つからなかったワイド・イミディエートオペランドをいつCILTからHCILT226にコピーすべきかを決定するためのポリシーを含み得る。特に、これは、HCILT226のサイズがCILTのエントリ数よりも小さい場合にのみ問題になる。このような場合に、ワイド・イミディエートオペランドに対する特定の数のHCILTミス、HCILTミスの頻度、又は任意の数の異なるイベント等のポリシー規則により、ワイド・イミディエートオペランドをHCILT226に追加するように指示される場合がある。ポリシーによって、ワイド・イミディエートオペランドをHCILT226に挿入すべきと指示される場合に、HCILT226内のビクティム(victim)エントリが選択され(ブロック918)、ビクティムエントリをワイド・イミディエートオペランドに置き換える(ブロック920)。ビクティムエントリは、例えば、使用頻度等、任意の数のポリシー規則によって同様に選択できる。
【0037】
プロセッサ要素104がHCILTミスに対するバックエンドサポートを有さない場合に、ブロック900に戻る。これは、パイプラインに割り込むことなしにイミディエートオペランドがCILTからのワイド・イミディエートオペランドに置き換えられるように命令を再処理できないことを意味し、パイプラインがフラッシュされ(ブロック908)、命令が再フェッチされ(ブロック910)、イミディエートオペランドがCILTからのワイド・イミディエートオペランドに置き換えられるように変換され(ブロック912)、変換した命令が処理される(ブロック914)。この場合も、プロセスはブロック916に進むことができ、ここで、ワイド・イミディエートをHCILT226に追加する必要があり、それに基づいて追加するか否かを判定する。
【0038】
本明細書に開示する実施形態は、様々なステップを含む。本明細書に開示する実施形態のステップは、ハードウェアコンポーネントによって形成され得るか、或いは命令でプログラムされた汎用又は特殊目的のプロセッサにステップを実行させるために使用され得るマシン実行可能命令で具体化され得る。あるいはまた、ステップは、ハードウェア及びソフトウェアの組合せによって実行され得る。
【0039】
本明細書に開示する実施形態は、本明細書に開示する実施形態によるプロセスを実行するようにコンピュータシステム(又は他の電子装置)をプログラムするために使用され得る命令を格納した機械可読媒体(又はコンピュータ可読媒体)を含み得るコンピュータプログラム製品又はソフトウェアとして提供され得る。機械可読媒体は、機械(例えば、コンピュータ)によって可読可能な形式で情報を記憶又は送信するための任意のメカニズムを含む。例えば、機械可読媒体には、機械可読記憶媒体(例えば、ROM、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ装置等)等が含まれる。
【0040】
特に明記しない限り、以前の議論から明らかなように、明細書全体を通して、「処理」、「計算」、「決定/判定」、「表示」等の用語を利用する議論は、コンピュータシステム又は同様の電子コンピューティング装置のアクション及びプロセスを指し、コンピュータシステムのレジスタ内の物理的(電子的)量として表されるデータ及びメモリを操作し、このデータ及びメモリをコンピュータシステムのメモリ又はレジスタ或いは他のそのような情報の記憶、送信、又は表示装置内の物理的量として同様に表される他のデータに変換することが分かる。
【0041】
本明細書に提示するアルゴリズム及び表示は、特定のコンピュータ又は他の機器に本質的に関連していない。様々なシステムは、本明細書の教示によるプログラムと共に使用することができ、又はそのシステムは、必要な方法ステップを実行するためのより特殊な機器を構築することが便利であることが分かる場合がある。これらの様々なシステムに必要な構造は、上記の説明から明らかであろう。さらに、本明細書で説明する実施形態は、特定のプログラミング言語を参照して説明していない。本明細書で説明する実施形態の教示を実現するために、様々なプログラミング言語を使用してもよいことが理解されよう。
【0042】
当業者は、本明細書に開示する実施形態に関連して説明する様々な例示的な論理ブロック、モジュール、回路、及びアルゴリズムが、電子ハードウェア、メモリ又は別のコンピュータ可読媒体に格納した命令として実装され、プロセッサ又は他の処理装置、或いは両方の組合せによって実行される得ることをさらに理解するだろう。本明細書で説明する分散アンテナシステムのコンポーネントは、例として、任意の回路、ハードウェアコンポーネント、集積回路(IC)、又はICチップに使用することができる。本明細書で開示するメモリは、任意のタイプ及びサイズのメモリであり得、所望の任意のタイプの情報を格納するように構成され得る。この互換性を明確に説明するために、様々な例示的なコンポーネント、ブロック、モジュール、回路、及びステップが、一般にそれらの機能の観点から上で説明してきた。このような機能がどのように実装されるかは、特定のアプリケーション、設計の選択、及び/又はシステム全体に課せられる設計上の制約に依存する。当業者は、特定のアプリケーション毎に説明した機能を様々な方法で実装することができるが、そのような実装の決定は、本実施形態の範囲からの逸脱を生じさせると解釈すべきではない。
【0043】
本明細書に開示する実施形態に関連して説明した様々な例示的な論理ブロック、モジュール、及び回路は、プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又は他のプログラマブルロジック装置、ディスクリートゲート又はトランジスタロジック、ディスクリートハードウェアコンポーネント、又は本明細書で説明する機能を実行するように設計されたそれらの任意の組合せで実装又は実行され得る。さらに、コントローラはプロセッサであってもよい。プロセッサはマイクロプロセッサであってもよいが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、又はステートマシンであってもよい。プロセッサは、コンピューティング装置(例えば、DSP及びマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと組み合わせた1つ又は複数のマイクロプロセッサ、又は任意の他のそのような構成)の組合せとしても実装され得る。
【0044】
本明細書に開示する実施形態は、ハードウェアで及びハードウェアに格納される命令で具体化され得、例えば、RAM、フラッシュメモリ、ROM、電気的にプログラム可能なROM(EPROM)、電気的に消去可能なプログラム可能なROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、又は当技術分野で知られている他の形式のコンピュータ可読媒体に存在し得る。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替として、記憶媒体はプロセッサに一体化され得る。プロセッサ及び記憶媒体はASICに常駐する場合がある。ASICはリモートステーションに常駐する場合がある。代替として、プロセッサ及び記憶媒体は、リモートステーション、基地局、又はサーバ内の個別のコンポーネントとして存在する場合がある。
【0045】
本明細書の例示的な実施形態のいずれかで説明している動作ステップは、例及び考察を提供するために記載されていることにも留意されたい。説明した動作は、図示したシーケンス以外の多くの異なるシーケンスで実行することができる。さらに、単一の動作ステップで説明した動作は、実際にはいくつかの異なるステップで実行され得る。さらに、例示的な実施形態で議論した1つ又は複数の動作ステップを組み合わせることができる。当業者はまた、情報及び信号が様々な技術及び技術のいずれかを使用して表現され得ることを理解するだろう。例えば、上記の説明全体を通して参照され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、及びチップは、電圧、電流、電磁波、磁場、又は粒子、光場又は粒子、或いはそれらの任意の組合せによって表され得る。
【0046】
特に明記しない限り、本明細書に記載の方法は、そのステップを特定の順序で実行することを要求すると解釈されることを決して意図するものではない。従って、方法の請求項が実際にそのステップが続く順序を記載していない場合、又はステップが特定の順序に限定されることが請求項又は詳細な説明に具体的に記載していない場合に、それは、決して特定の順序が推定されることを意図していない。
【0047】
本発明の精神又は範囲から逸脱することなく、様々な修正及び変形を行うことができることは、当業者には明らかであろう。本発明の精神及び実体を組み込んだ開示した実施形態の修正、組合せ、サブコンビネーション、及び変形は、当業者に想起され得るので、本発明は、添付の特許請求の範囲及びそれらの同等物の範囲内の全てを含むと解釈すべきである。

図1
図2
図3
図4
図5
図6
図7
図8
図9
【国際調査報告】