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

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

▶ アーム・リミテッドの特許一覧

<>
  • 特許-データ構造放棄 図1
  • 特許-データ構造放棄 図2A
  • 特許-データ構造放棄 図2B
  • 特許-データ構造放棄 図2C
  • 特許-データ構造放棄 図3
  • 特許-データ構造放棄 図4
  • 特許-データ構造放棄 図5
  • 特許-データ構造放棄 図6
  • 特許-データ構造放棄 図7
  • 特許-データ構造放棄 図8
  • 特許-データ構造放棄 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-18
(45)【発行日】2024-11-26
(54)【発明の名称】データ構造放棄
(51)【国際特許分類】
   G06F 9/30 20180101AFI20241119BHJP
   G06F 9/34 20180101ALI20241119BHJP
   G06F 9/38 20180101ALI20241119BHJP
   G06F 9/48 20060101ALI20241119BHJP
【FI】
G06F9/30 350A
G06F9/34 330
G06F9/38 350B
G06F9/38 330A
G06F9/48 350A
【請求項の数】 3
(21)【出願番号】P 2021555375
(86)(22)【出願日】2020-03-25
(65)【公表番号】
(43)【公表日】2022-10-06
(86)【国際出願番号】 GB2020050800
(87)【国際公開番号】W WO2021023956
(87)【国際公開日】2021-02-11
【審査請求日】2023-03-17
(31)【優先権主張番号】16/531,206
(32)【優先日】2019-08-05
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】マンセル、デイヴィッド ヘンナ
(72)【発明者】
【氏名】ステファンズ、ニゲル ジョン
(72)【発明者】
【氏名】エヴァンス、マシュー ルシアン
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特表2015-501019(JP,A)
【文献】米国特許出願公開第2001/0004755(US,A1)
【文献】特開2011-018120(JP,A)
【文献】伊藤 務、山崎信行,Responsive Multithreaded Processorの命令実行機構,情報処理学会論文誌,日本,社団法人情報処理学会,2003年08月15日,Vol.44, No.SIG11(ACS3),pp.226-235,ISSN 0387-5806
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/34
G06F 9/38
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
データを記憶する複数の記憶回路と、
命令に応じて前記記憶回路を使用して1つ以上の演算を実行する実行回路と、
前記命令をストリーム順序で受信し、かつ前記命令を前記ストリーム順序以外の変更された順序で前記実行回路に発行する発行回路と
を備えるデータ処理装置であって、
前記命令は、放棄命令を含み、
前記実行回路は、前記複数の記憶回路のうちの少なくとも1つが使用されていない記憶回路であるという記憶指示を記憶することによって、前記放棄命令に応答するように適合されており、
前記実行回路は、前記放棄命令を実行した後に前記複数の記憶回路のうちの少なくとも1つが前記使用されていない記憶回路であるという前記記憶指示に基づいて将来の命令の実行に影響を及ぼすように適合されており、
前記ストリーム順序が、前記放棄命令、続いて分岐命令、続いてプロデューサ命令であり、
前記分岐命令は、実行されるものとして予測され、
前記プロデューサ命令は、前記使用されていない記憶回路に第2のデータ値を記憶し、
前記変更された順序は、前記分岐命令が完了する前に前記プロデューサ命令を発行させる、データ処理装置。
【請求項2】
前記使用されていない記憶回路から第1のデータ値を読み出すコンシューマ命令が、複数のプロセッササイクルにわたって実行される、請求項に記載のデータ処理装置。
【請求項3】
前記使用されていない記憶回路から第1のデータ値を読み出すコンシューマ命令が、行列演算命令である、請求項に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理に関する。本開示は、例えば、レジスタなどの記憶回路を使用してデータを記憶するデータ処理デバイスに関連するものであり得る。
【発明の概要】
【0002】
データ処理装置は、処理中にデータ値を記憶するために使用されるレジスタなどの1つ以上の記憶回路を備えてもよい。このようなデータ値は、命令によって演算することができる。しかしながら、所与の期間において、データ値の一部は、もはや使用されない。しかしながら、そのようなデータ値の存在は、将来の命令の実行に影響を及ぼし得る。例えば、分岐が推測的に実行され、命令がレジスタをデスティネーションレジスタとして使用しようとする場合には、その分岐が正しく推測的に実行されたかどうかを判定することができるまで、ストールが発生し得る。これは、実行されない分岐先の命令がレジスタをソースとして使用する可能性があり、レジスタ内の値が上書きされると、推測的に実行された分岐を「巻き戻す」ことができない可能性があるためである。一方、コンテキストスイッチは、レジスタの状態を退避させるため、それらのレジスタを異なるプロセスによって使用することができる。しかしながら、各レジスタが退避されなければならない可能性があるため、各レジスタの存在は、コンテキストスイッチが行われるまでにかかる時間を長くする。このようなデータ処理装置の効率を向上させることが望ましい。
【0003】
第1の例示的構成を見ると、データ処理装置が提供され、データ処理装置は、データを記憶する複数の記憶回路と、命令に応じて記憶回路を使用して1つ以上の演算を実行する実行回路と、を備え、命令は放棄命令を含み、実行回路は、複数の記憶回路のうちの少なくとも1つが使用されていない記憶回路であることを示すことによって、放棄命令に応答するように適合されており、実行回路は、放棄命令を実行した後の使用されていない記憶回路に基づいて将来の命令の実行に影響を及ぼすように適合されている。
【0004】
第2の例示的構成を見ると、データ処理の方法が提供され、方法は、複数の記憶回路にデータを記憶することと、放棄命令を含む命令に応じて、記憶回路を使用して1つ以上の演算を実行することと、放棄命令に応じて、複数の記憶回路のうちの少なくとも1つが使用されていない記憶回路であることを示すことと、放棄命令を実行した後の使用されていない記憶回路に基づいて将来の命令の実行に影響を及ぼすことと、を含む。
【0005】
第3の例示的構成を見ると、データ処理装置が提供され、データ処理装置は、複数の記憶回路にデータを記憶する手段と、放棄命令を含む命令に応じて、記憶回路を使用して1つ以上の演算を実行する手段と、放棄命令に応じて、複数の記憶回路のうちの少なくとも1つが使用されていない記憶回路であることを示す手段と、放棄命令を実行した後の使用されていない記憶回路に基づいて将来の命令の実行に影響を及ぼす手段と、を備える。
【図面の簡単な説明】
【0006】
添付図面に示されるそれらの実施形態を参照して、あくまで例として本発明を更に説明する。
図1図1は、いくつかの実施形態によるデータ処理装置を概略的に示す。
図2A図2Aは、いくつかの実施形態による、放棄命令の3つの異なる実施例を示す。
図2B図2Bは、いくつかの実施形態による、放棄命令の3つの異なる実施例を示す。
図2C図2Cは、いくつかの実施形態による、放棄命令の3つの異なる実施例を示す。
図3図3は、いくつかの実施形態による、推測的実行の方法を示すフローチャートを示す。
図4図4は、いくつかの実施形態による、記憶回路の放棄がどのように推測を助けることができるかの実施例を示す。
図5図5は、いくつかの実施形態による、誤った推測的実行から回復する方法を示すフローチャートを示す。
図6図6は、いくつかの実施形態による、レジスタなどの記憶回路が放棄されているときのコンテキストスイッチ中のコンテキストを退避する実施例を示す。
図7図7は、いくつかの実施形態による、コンテキストスイッチの一部として一部のレジスタが放棄されている、レジスタを退避する実施例を提供する。
図8図8は、いくつかの実施形態による、レジスタが放棄されているときのコンテキストスイッチ中のコンテキストをロードする実施例を示す。
図9図9は、いくつかの実施形態によるデータ処理の方法を示すフローチャートを示す。
【発明を実施するための形態】
【0007】
添付図面を参照して実施形態を検討する前に、以下の実施形態を説明する。
【0008】
いくつかの例示的な構成によれば、データ処理装置が提供され、データ処理装置は、データを記憶する複数の記憶回路と、命令に応じて記憶回路を使用して1つ以上の演算を実行する実行回路と、を備え、命令は放棄命令を含み、実行回路は、複数の記憶回路のうちの少なくとも1つが使用されていない記憶回路であることを示すことによって、放棄命令に応答するように適合されており、実行回路は、放棄命令を実行した後の使用されていない記憶回路に基づいて将来の命令の実行に影響を及ぼすように適合されている。
【0009】
上記の例示的な構成では、放棄命令は、特定の記憶回路に記憶された値(例えば、その記憶回路に記憶されたデータ値)がもはや使用されていないことを示すために使用される。この「使用されていない」状態は、記憶回路が次にアクセスされる(例えば、書き込まれる)まで持続し、その時点で値が変化するため、記憶回路の状態が再び「使用されている」になる。いくつかの実施形態では、記憶回路が現在「使用中」であることを示すために提供される明示的な命令が存在し得る。いずれにせよ、少なくともいくつかの将来の命令の実行は、そのような状態を有する記憶回路に基づいて影響を受ける(例えば、修正される)。なお、将来の命令は、例えば、分岐命令又は他の制御フロー命令に起因して、実際にはプログラムのより早期に現れ得る。放棄命令は専用の命令である必要はなく、代わりに、記憶回路を放棄する機能を実行する通常の命令であってもよい。このようにして、もはや使用されていない記憶回路をそのように示すことができ、そのため、そのような記憶回路を考慮することにより、将来の命令の実行をより効率的にすることができる。所与の記憶回路がもはや使用されていないかどうかを判定するプロセスは、コンパイラによって、及び/又はプログラマによって実行され得る。コンパイル/プログラミングの際に、全体のプログラムを分析して、所与の値がそれ以上使用されるかどうかを判定することができることを考慮すると、そのような情報をデータ処理装置のプログラムの一部として提供することが可能である。
【0010】
いくつかの例示的な構成によれば、データ処理装置は、コンテキストスイッチに応じて記憶回路のセットを退避するコンテキスト退避回路を備え、将来の命令は、コンテキストスイッチを実行する1つ以上のコンテキストスイッチ命令を含む。コンテキスト退避回路は、例えば、データ処理装置が1つのアプリケーションの実行から別のアプリケーションに切り替わるコンテキストスイッチの間に使用されてもよい。コンテキストスイッチ中には、記憶回路のセットに関連付けられた内容が(例えば、メインメモリに)退避される必要があり、それにより、後続のアプリケーションは、それらの記憶回路内に現在あるデータを失うことなく、それらの記憶回路を使用することができる。
【0011】
いくつかの実施例では、コンテキスト退避回路は、使用されていない記憶回路の退避を禁止するように適合されている。使用されていない記憶回路を退避することを禁止することにより、記憶するデータが少なくなり、その結果として、コンテキストの退避を実行するプロセスを高速化することができる。したがって、それは、コンテキストの退避プロセスの効率を向上させるだけでなく、現在のコンテキストを記憶するために必要な記憶量を減少させる。
【0012】
いくつかの実施例では、コンテキスト退避回路は、使用されていない記憶回路以外の複数の記憶回路を退避するように適合されている。このような実施形態では、使用されていない記憶回路を除いた記憶回路のセットが退避される。
【0013】
いくつかの実施例では、コンテキスト退避回路は、使用されていない記憶回路、又は使用されていないもの以外の記憶回路のいずれかのアイデンティティを退避するように適合されている。その結果、使用されていない記憶回路のアイデンティティが退避されるか、又は使用されている記憶回路のアイデンティティが退避される。いずれの場合にも、アプリケーションが再開されるときに、退避された値を記憶回路に戻して挿入する方法及び場所を決定することが可能である。多数の使用されていない記憶回路が存在する場合、使用されていない記憶回路のそれぞれのアイデンティティは、退避された値のそれぞれが退避された値の正しい位置に復元され得るように記憶されてもよい。復元プロセスの初期ステップとして、記憶回路のセットの現在の値をリセットすることができ、それにより、復元されていない記憶回路が消去される。その結果、スイッチアウトされているアプリケーションによって使用されるデータは、予期しない挙動の場合であっても、スイッチインされているアプリケーションによって読み取ることができない。
【0014】
いくつかの実施例では、データ処理装置は、命令をストリーム順序で受信し、かつ命令を、ストリーム順序以外の変更された順序で実行回路に発行する発行回路を備える。発行回路は、命令を順序どおりでなく実行するために使用することができる。具体的には、発行回路は、命令をストリーム順序で受信し、その後、命令(又はそれらの命令に対応する演算/制御信号)を、命令間のデータ依存関係に応じて任意の順序で実行することができるキューに提供することができる。このようにして、複数の実行回路が存在する場合には、命令を並列に実行することができる。更に、命令を順序どおりでなく実行することによって、命令間のデータ依存関係の影響を制限することが可能であるため、他の命令間のデータ依存関係の結果として、命令の実行を停止する必要がない。
【0015】
いくつかの実施例では、ストリーム順序は、放棄命令、続いて分岐命令、続いてプロデューサ命令であり、分岐命令は、実行されるものとして予測され、プロデューサ命令は、使用されていない記憶回路に第2のデータ値を記憶し、変更された順序は、分岐が完了する前にプロデューサ命令を発行させる。これらの実施例では、放棄命令は、第1のデータ値を保持する記憶回路がもはや使用されていないことを示すために使用される。この結果、プロデューサ命令(分岐ターゲットにある)は、分岐がまだ推測的である(例えば、完了していない)間に実行を開始することが可能である。これは、第1のデータ値を記憶する記憶回路がもはや使用されないことを放棄命令が示しているためである。その結果、そのデータを保持する記憶回路は、第2のデータ値を記憶するプロデューサ命令によって使用され得る。通常、制御フローが(例えば、条件分岐に起因して)不確かな場合、プロセッサは、分岐が誤って予測された場合には、古い値を読み取る正しいプログラムフローのコンシューマ命令がまだ存在し得るため、プロデューサ命令を推測的に実行することができない。放棄メカニズムは、これはそのケースではないことを宣言することを可能とし、したがって、推測を進めることを可能とする。いくつかの実施例では、使用されていない記憶回路から第1のデータ値を読み出すコンシューマ命令は、放棄命令に先行する。コンシューマ命令は、特定のデータ値を使用する命令であると見なすことができる(コンシューマ命令が使用するデータ値を提供する命令と見なすことができるプロデューサ命令とは対照的である)。したがって、コンシューマ命令が放棄命令に先行する場合、プロデューサ命令は、放棄命令の対象であるレジスタをコンシューマ命令が読み出し終えた後に実行される。
【0016】
いくつかの実施例では、コンシューマ命令は、複数のプロセッササイクルにわたって実行される。コンシューマ命令が複数のプロセッササイクルにわたって実行される場合、コンシューマ命令が完了する前にプロデューサ命令などの他の命令を実行する能力は、コンシューマ命令が完了するまで、ストールせずに他の演算を実行することを可能にする。
【0017】
いくつかの実施例では、コンシューマ命令は、行列演算命令である。多数のプロセッササイクルにわたって実行される命令の他の例として、除算命令及びメモリアクセス命令が含まれ得る。
【0018】
いくつかの実施例では、複数の記憶回路のそれぞれは、同時にアドレス指定可能である。複数の記憶回路が同時にアドレス指定可能であることの結果として、それらの記憶回路のうちのいずれかが任意のある時点でアクセスされることが可能である。これは、アドレス指定可能な記憶回路を追加することによって効率を向上させることができる行列乗算などのいくつかのアルゴリズムに有用であり得る。これは、全てのアーキテクチャにおいて常に可能というわけではない。具体的には、特定のアーキテクチャは、使用可能な莫大な数の記憶回路を有してもよく、そのうちのサブセットのみが任意のある時点でアドレス指定することができる。これにより、データ処理装置が、記憶回路の可用性が増加したという錯覚を作り出すことを可能にする。例えば、複数の命令がレジスタ(記憶回路)R3内にデータを記憶する場合、レジスタR3の複数のコピーを提供することができるため、各推測的フローに関して、新しいR3レジスタを割り当てることができる。推測が誤っていると分かった場合、R3の以前のコピーを「復元」することができる。このような技術は、リネームとして知られている。リネームには、多数のリソースを使用可能にする必要があり、必要とされる回路の量に起因して、特に大きなレジスタに対して非実用的であると考えることができる。リネーム用レジスタを提供するために、同じ記憶空間を使用するのではなく、アドレス指定可能な記憶をより多く提供することにより、行列乗算などのアルゴリズムの効率を改善することが可能である。そして、使用されていないレジスタを「放棄」することができることにより、コンテキストスイッチ中に退避する必要があるレジスタの数を低減することができる。
【0019】
いくつかの実施例では、複数の記憶回路のそれぞれは、複数のデータ値を記憶するように適合され、複数の記憶回路のそれぞれは、複数のデータ値を記憶するように適合されている。複数のデータ値を記憶するように適合された記憶回路を提供することによって、複雑なデータ構造に対応することができる。例えば、このような記憶回路は、行列に関連する全てのデータ値を記憶するように構成されてもよく、それにより、行列全体に対して一度に演算を実行することができる。
【0020】
いくつかの実施例では、複数の記憶回路のそれぞれは、少なくとも1KiBの容量を有する。換言すれば、複数の記憶回路のそれぞれは、1024バイトの容量を有してもよい。このような記憶回路は、複数のデータ値を記憶するために使用されてもよい。具体的には、個々のデータ値のサイズは異なってもよい。例えば、1024個の8ビット値を記憶することができる、又は256個の32ビット値を記憶することができる。
【0021】
いくつかの実施例では、実行回路は、1つ以上の演算のうちの少なくともいくつかを実行することによって放棄命令に応答し、かつ複数の記憶回路のうちの1つを使用されていない記憶回路として示すように、適合されている。したがって、放棄命令は、いくつかの異なる目的を実行することができる。例えば、放棄命令は、記憶回路に記憶された1つ以上のデータ値を使用するとともに、これらの記憶回路のうちの1つ以上がもはや使用されていないことを示す、通常の命令であってもよい。このようにして、命令セットの一部として専用の放棄命令を提供する必要はない。更に、プログラムは、別の命令の一部として記憶回路の放棄を可能にすることによって、より効率的にすることができる。
【0022】
特定の命令を使用して、放棄演算を実行することを示す多くの方法が存在する。しかしながら、いくつかの実施例では、命令のうちの少なくともいくつかは、その命令が放棄命令であるかどうかを示すフィールドを含む。命令は、実行される命令及び1つ以上のパラメータを識別する命令コードから作成される機械語命令にコンパイルされてもよい。これらの実施例では、パラメータのうちの1つ以上は、記憶回路(例えばレジスタ)参照に関連付けられた単一のビットであり、これはその記憶回路が使用されていないとマークするかどうかを示している。機械語命令内のこれらのフィールドのうちの1つ以上が設定されている結果として、命令は放棄命令として認識され、特定の記憶回路が放棄される。
【0023】
いくつかの実施例では、データ処理装置は、使用されていない記憶回路を含む1つ以上の使用されていない記憶回路を識別するトラック回路を備える。したがって、トラック回路は、使用されていない記憶回路(単数又は複数)のアイデンティティを示すために使用されてもよい。単一の記憶回路のみが使用されていないとマークされてもよい場合、マスク回路は、単に、その記憶回路のIDをエンコードすることができる。他の実施例では、使用されていない記憶回路の数が1つを超える可能性がある場合、使用されている記憶回路を(例えば、ビット単位のエンコードを使用して)エンコードするためにマスクを提供することができる。いずれの場合も、放棄命令は、トラック回路内に記憶された値を更新するために使用されてもよい。同様に、トラック回路内に記憶された値はまた、その記憶回路のその値が変更された結果として、特定のレジスタが使用されることを示すために更新されてもよい。
【0024】
いくつかの実施例では、記憶回路はレジスタであり、使用されていない記憶回路はレジスタ内の使用されていないレジスタである。
【0025】
ここで、特定の実施形態を、図面を参照して説明する。
【0026】
図1は、いくつかの実施形態によるデータ処理装置100を概略的に示す。装置100は、例えば、メインメモリ又は命令キャッシュのいずれかから命令をフェッチする役割を担うフェッチャ110を含む。フェッチされた命令は、デコーダ120によってアクセスされ、デコーダ120がフェッチされた命令を個々の演算を表す1つ以上の制御信号にデコードする。演算は、命令を構成する演算の発行及びスケジューリングの役割を担う、発行ロジック130に渡される。ここから、命令は1つ以上の実行回路170に発行される。この実施例では、実行ユニット170は、論理演算ユニット(ALU)170aと、第2演算ユニット(ALU)170bと、浮動小数点演算ユニット(FPU)170cと、ロード/ストアユニット170dと、分岐ユニット170eと、コンテキスト退避ユニット170fと、行列演算ユニット170gとを含む。装置100は、レジスタファイル140a、140bを含む。レジスタファイルは、2つの部分から構成され、第1の部分140aは、汎用レジスタ150aを含み、第2の部分140bは、この場合には行列演算のために予約されている特定のレジスタ150bを含む。ここで、レジスタ150bは、特許請求される記憶回路の一例である。命令の実行中、レジスタファイル140a内の汎用レジスタ150aからのデータは、実行ユニット170のいずれかに渡されてもよい。しかしながら、特定のレジスタ150bからのデータは、ロード/ストアユニット170d及び行列演算ユニット170gによってのみアクセスされ得る。
【0027】
行列演算ユニット170gなどの実行ユニット170のうちの1つ以上は、フェッチャ110によってフェッチされた命令内の放棄命令に対応する演算を実行する。放棄命令は、レジスタファイル140b内の1つ以上の特定のレジスタ150bがもはや必要とされないことを示すために使用される。そのような要件の欠如は、新しいデータ値がそのレジスタ内に記憶される時点まで持続する。実行回路170のうちの1つによって実行される放棄命令は、レジスタファイル140b内に保持された使用マスク160を更新させる。使用マスク160は、現在使用されている(すなわち、放棄されていない)特定のレジスタ150bのセットを示す。当然のことながら、他の実施形態では、使用マスク160を使用して、放棄されているこれらの特定のレジスタ150bを示すことができる。この実施形態では、使用マスク160はまた、後述するように、推測の目的で発行ロジック130に対し使用可能にされる。
【0028】
図2Aは、放棄命令280の一実施例を示す。この場合、放棄命令は、行列乗算命令の形態をとる。すなわち、行列乗算命令は放棄機能を有し、したがって、命令が実際には行列乗算の更なる演算を実行する場合であっても、これは放棄命令の一実施例である。この実施例では、命令280は、レジスタMC1の第1の参照、レジスタMAの第2の参照、及びレジスタMBの第3の参照の3つのパラメータを含む。この命令280では、最後の2つの参照は、特定の記号(^)を末尾に付けることができる。これは、それらのレジスタ内に記憶された値が使用されると、それらのレジスタが放棄されることを示す。この命令280の機械語形態200もまた、図2Aに示されている。具体的には、命令は、特定の命令を一意に識別する命令コード210から作成され、3つのレジスタ参照230、250、及び270はそれぞれ、二進値でレジスタを識別することができるものである(レジスタ230のうちの1つは、演算の結果のデスティネーションであり、他の2つのレジスタ参照250、270は演算の入力のソースである)。命令200はまた、それぞれがソースレジスタ参照250、270の1つと関連付けられている2つの放棄ビット240、260を含む。これらのビットのうちの1つに対する‘1’の値は、いったん命令が発行され、データが当該レジスタから抽出されると、対応するレジスタが放棄されることを意味する。一方、‘0’の値は、データ値が使用され、レジスタは放棄されないことを示す。現在の実施例では、第1のレジスタ参照MA250に関連付けられた放棄ビット240の設定であり、第2のレジスタ参照MB270に関連付けられた第2の放棄ビット260に対するものではない設定は、以下の命令:
MATMUL MC1,MA^,MB
に対応する。
【0029】
図2Bは、放棄命令の別の実施例を示す。この実施例では、放棄命令290は、更なる演算目的を有さない明示的な放棄命令の形態をとる。ここで、命令290は、明示的なレジスタ参照MA0を含む。その結果、この命令が実行されると、レジスタMA0は放棄される。
【0030】
図2Cは、放棄命令の第3の実施例を示す。この実施例では、命令295は、複数の異なるレジスタを識別するために使用することができるマスクを含む。この実施例では、マスクは、00110111である。このマスクはレジスタ番号0、1、2、4及び5が直ちに放棄されるが、レジスタ3、6及び7は放棄されない、ことを意味すると解釈され得る。
【0031】
放棄命令の他の形態もまた、本技術から逸脱することなく使用され得ることが理解されるであろう。更に、特定のレジスタが放棄されることを示す特定のビット値(1など)の使用は反転されてもよく、代わりにレジスタが放棄されるべきではないことを表すことができる。
【0032】
図3は、いくつかの実施形態による、放棄されたレジスタのセットと組み合わせた推測的実行を使用する方法を示すフローチャート300を示す。プロセスは、(潜在的に)推測的実行がフェッチされるステップ310において開始する。ステップ320において、命令のデスティネーションレジスタ(例えば、結果が書き込まれるレジスタ)が、リネームされるレジスタであるか否かを判定する。例えば、これは汎用レジスタ150aに対応してもよい。デスティネーションレジスタがリネームされたレジスタである場合、ステップ330で、新しい物理レジスタが命令のデスティネーションレジスタとして機能するように割り当てられ、ステップ340で、割り当てられた物理レジスタを使用した命令に基づいて、推測的演算が実行される。
【0033】
しかしながら、本技術はまた、デスティネーションレジスタがリネームされたレジスタではない場合、すなわち、レジスタが特定のレジスタ150bのうちの1つである場合に、推測を実行することも可能にする。具体的には、ステップ320で、デスティネーションレジスタがリネームされたレジスタではないと判定された場合、次に、ステップ350で、デスティネーションレジスタが放棄されたレジスタであるかどうかが判定される。そうでない場合、次にステップ360で、命令は、推測的に実行されることができないため、非推測的に実行されなければならない。あるいは、ステップ350において、レジスタが放棄されたレジスタであると判定された場合、次にプロセスはステップ340に進み、その命令に対応する推測的演算を実行することができる。放棄されたレジスタがもはやアプリケーションによって使用されていないため、放棄されたレジスタを使用して、推測的演算を実行することが可能である。その結果、アプリケーションは、そのレジスタに現行の関連がないため、誤推測の場合には、データを失うことなく、レジスタを放棄された状態に安全に戻すことができる。
【0034】
図4は、いくつかの実施形態による、レジスタの放棄がどのように推測を助けることができるかの実施例を示す。具体的には、図4は、一連の行列乗算が実行されるプログラムの一実施例を示す。ライン1及びライン2において、データ値(例えば、行列)は、レジスタMA0及びMB0にロードされる。次いで、ループが、命令3と命令12との間で始まる。このループ内で、命令3において、更なるデータ値(例えば行列)がレジスタMB1にロードされる。命令4では、MA0に記憶された行列にMB0に記憶された行列を乗算することによって、行列乗算が行われ、その結果がレジスタMC0に記憶される。命令5では、新しい行列がレジスタMA0にロードされ、命令6では、行列乗算MA0×MB1=MC1が実行される。レジスタMA0への更なるロードは、命令7で行われる。命令8では、更なる行列乗算MA1×MB0=MC2が行われる。命令9では、行列がレジスタMB0にロードされる。命令10では、MA1×MB1=MC3の更なる行列乗算が行われる。命令11では、変数「count」の値は、1つ減少する。ライン12では、命令11で行われたデクリメントの結果により、「count」の値がゼロに達したかどうかを確認するために試験される。そうでない場合、プロセスは、命令2と命令3との間のラベルマークされたループに戻る。そうでなければ、プログラムの残り(図示せず)が継続する。
【0035】
行列乗算命令は、実行するために多数のプロセッササイクルを必要とすることが予想される。ストールを防止するために、命令10の実行中、残りの命令は、分岐命令12の結果に関連して作成された予測を用いて実行されてもよい。しかし、これにより、命令3が実行される際に潜在的な問題が生じる。具体的には、命令3は、レジスタMB1に記憶された値を上書きする。したがって、予測が誤りである場合、レジスタMB1に記憶された値が失われる。これは、ループの後にいくつかの命令がMB1を読み取る可能性があるので、許容できないことが明らかである。ある程度、これは、レジスタのリネーム(前述)を使用して解決することができる。これは、異なるレジスタを、命令3などの矛盾する命令に割り当てる。したがって、分岐が誤って予測された場合、ループ内の命令3のその特定の呼び出しに供給される物理レジスタの内容を破棄することが必要となるだけである。しかしながら、レジスタのリネームは、レジスタの複数のコピーが提供されることを必要とする。大きいレジスタが提供される(このような)状況では、レジスタのリネームが禁止される。したがって、通常は、多数の大きいレジスタを提供するか、分岐命令をストールするかを選択しなければならない。
【0036】
放棄命令の使用は、レジスタの数の増加に頼ることなく、そのようなストールを禁止するために使用することができる。具体的には、命令11と命令12との間に放棄命令を挿入して、レジスタMB1がもはや要求されないことを具体的に示すことによって、命令3は問題なく実行され得る。具体的には、分岐が実行されていないと判定され、レジスタMB1の内容が命令3によって上書きされた場合、レジスタMB1の内容を単に消去することができる。これは、MB1の内容がプログラムによってもはや必要とされないため、任意の値に設定することができるからである。実際には、このような情報は、典型的には、コンパイラ及び/又はプログラマ若しくはプログラムに使用可能である。これは、コンパイラ/プログラマがプログラムの全体像をつかんでおり、どの命令が後に実行されるかを判定することができるからである。当然のことながら、レジスタMB1がもはや必要とされないことが示された後、プログラムが、そのレジスタへの更なる書き込みが行われる(それによってレジスタの放棄が終わったことを示す)まで、そのレジスタから読み出そうとしない、ということが重要である。
【0037】
図5は、いくつかの実施形態による、誤って行われた推測的実行から回復する方法を示すフローチャート500を示す。具体的には、図5において、推測が、例えば誤った分岐予測の結果として生じたと仮定する。ステップ510では、推測が誤って行われたと判定される。ステップ520では、誤って実行された命令内で参照されるレジスタが、リネームされたレジスタであるかどうかが判定される。そうである場合、ステップ540で、論理レジスタの物理レジスタへの古いマッピングが復元される。すなわち、レジスタの古い値は、レジスタの現在値として再マッピングされる。ステップ550では、次に値を記憶するために使用された推測的レジスタが解放される(例えば、使用可能な物理レジスタのプールに再追加される)。ステップ520において、レジスタがリネームされたレジスタではない場合、次にステップ530で放棄済みビットが復元される。すなわち、レジスタが書き込まれ、それによって放棄済みビットが消去された場合、放棄済みビットは復元されて、レジスタが依然として放棄されていることを示す。例えば、図4の実施例では、レジスタMB1の放棄ビットは、命令11と命令12との間に設定される。誤推測が発生し、ルックが誤って再実行される場合、次に命令3では、レジスタMB1内の値の設定によって放棄済みビットが消去される。その後、推測が誤って行われたことが検出されると、レジスタが依然として放棄されており、放棄されて以来書き込まれていないため、放棄済みビットは復元されなければならない。
【0038】
放棄命令はまた、コンテキストスイッチを助けるために使用することができる。コンテキストスイッチは、システム上で実行されているアクティブスレッド又はアプリケーションがスイッチされるときに行われる。これには、レジスタの現在値を記憶し、スイッチインされているスレッド又はアプリケーションと関連付けられたレジスタの記憶された値を、レジスタに記憶しなおすことが必要とされ、その結果、実行は、停止されたスレッド(現在、スイッチインされている)が止まった時点から再開され得る。
【0039】
図6は、いくつかの実施形態による、レジスタが放棄されているときに、コンテキストスイッチ中にコンテキストをどのように退避することができるかの実施例を示す。具体的には、命令1では、放棄されたレジスタのセットを示す使用マスク160の値はレジスタx0に記憶される。命令2では、レジスタx0の値は次に、レジスタの現在値が記憶されているメモリ内の位置であるcontext_ptrに記憶される。感嘆符「!」は、context_ptrの値が次いでインクリメントされることを示す。命令3は、値1が使用マスク160内に示されているかどうかを判定する。換言すれば、命令3は、レジスタ1が放棄されているか否かを判定する。レジスタ1(MA0)が放棄されている場合、実行は、ラベルnot_ma0にジャンプする。そうでなければ、命令4は、レジスタMA0に記憶されたデータをcontext_ptrに記憶させ、これを次にインクリメントする。いずれの場合も、命令5において、第2のレジスタ(MA1)が使用マスク160によって示されているかどうかが判定される。そうである場合、プログラムは、not_ma1にジャンプする。そうでなければ、命令6において、レジスタMA1の値がcontext_ptrに記憶され、context_ptrがインクリメントされる。いずれの場合も、命令7において、第3のレジスタ(MB0)が使用マスク160によって示されているかどうかが判定される。そうである場合、プロセスは、ラベルnot_mb0にジャンプする。そうでなければ、命令8において、レジスタMB0の値がcontext_ptrに記憶され、これが次にインクリメントされる。このプロセスは、使用マスク160によって示され得る各レジスタに対して繰り返される。実際に、各レジスタは、使用マスク160内で試験される。レジスタがリストされている(レジスタが放棄されていること、したがって使用されていないことを示す)場合、そのレジスタの退避はスキップされる。そうでなければ、そのレジスタの退避は、context_ptrで実行される。これに加えて、使用マスク160自体は退避されるので、退避された値のアイデンティティは将来的に既知である。
【0040】
図7は、メモリ内のデータとして退避されたレジスタの実施例を示す。記憶されている第1の項目は、4バイトを含むマスク160である。この実施例では、マスクは、値00011010であり、レジスタMA0、MB0、MC1、MC2、及びMC3が放棄されており、したがって退避されないことを示す。キューの次の項目は、第1の退避されたレジスタ、MA1である。これに、第2の退避されたレジスタ、MB1が続く。これに、第3の退避されたレジスタ、MC0が続く。集合的に、合計3076バイトが退避される(レジスタMA1、MB1、MC1のそれぞれが1024バイトを占有する)。したがって、このことは、時間及びスペースの両方の観点から、実質的な節約を生み出す。具体的には、スペースが節約されるのは、レジスタの全て(その多くは放棄され、したがって使用されない)が退避されるわけではないからである。更に、全てのレジスタが退避されるわけではないため、レジスタを退避及びロードするプロセスは、高速化される。このような方法でレジスタを退避することにより、データを読み出し、正しいレジスタを復元することができる。
【0041】
図8は、レジスタが放棄されているときのコンテキストスイッチ中のコンテキストをロードする実施例を示す。具体的には、第1の命令kill_allによって全てのレジスタが消去される。これは、放棄された入来スレッドによるレジスタの結果として、データが1つのスレッド(又はアプリケーション)から別のスレッド(又はアプリケーション)に意図せず運ばれるのを防止するために実行される。次いで、第2の命令は、context_ptrにあるデータをレジスタx0にロードし、コンテキストポインタをインクリメントする。図7に示すように、この内容は、マスク160の退避された以前の値である。この実施例では、マスク160の以前の値は、直接復元されず、代わりに、「kill_all」命令の結果として復元され、続いて有効なレジスタを復元する。命令3では、第1のレジスタが放棄されているか否かを確認するために、マスクを試験する。レジスタが放棄されている場合、プロセスは、not_ma0にジャンプする。そうでなければ、命令4により、context_ptrにおけるデータがレジスタMA0にロードされ、context_ptrがインクリメントされる。いずれの場合も、命令5において、第2のレジスタ(MA1)が放棄されているかどうかを確認するためにマスクが試験される。そうである場合、プロセスは、ラベルnot_ma1にジャンプする。そうでなければ、命令6において、context_ptrに記憶されたデータがレジスタMA1にロードされる。次に、context_ptrがインクリメントされる。このプロセスは、レジスタのそれぞれに対して継続し、特定のレジスタがロードされるべきか否かを試験し、適切な場合(例えば、マスクにしたがってレジスタが放棄されていない場合)にはロードが実行される。前述したように、放棄されたレジスタは、より少ないデータが転送されることを意味するため、転送を実行するために要する時間を短縮することができる。
【0042】
図9は、いくつかの実施形態による、データ処理の方法を示すフローチャートを示す。フローチャート900は、データが1つ以上のレジスタに記憶されるステップ910から開始する。ステップ920では、それらのレジスタのうちの1つ以上を使用して演算が実行される。ステップ930では、それらのレジスタのうちの1つ以上が現在使用されていないことを示すために放棄命令が使用される。ステップ940では、将来の命令の実行は、それらのレジスタのうちのいくつかが使用されていないことを示すことによって実行される。例えば、これは、レジスタが放棄されている結果として、より効率的に、又はより少ないスペースを使用して実行されるコンテキストスイッチの形態をとることができる。この別の実施例は、それらのレジスタのうちのいくつかが放棄された結果として、(リネーム回路が存在しなくても)推測的に命令を実行する能力である。
【0043】
本出願において、「~ように構成されている(configured to)」という用語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するために使用される。このコンテキストにおいて、「構成」は、ハードウェア又はソフトウェアの相互接続の構成又は方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは、機能を実行するようにプログラムされてもよい。「~ように構成されている」は、定義された動作を提供するために、装置要素を任意の方法で変更する必要を意味しない。
【0044】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正を行うことができることを理解されたい。例えば、本発明の範囲から逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組み合わせを行うことができる。
図1
図2A
図2B
図2C
図3
図4
図5
図6
図7
図8
図9