(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-18
(45)【発行日】2022-01-26
(54)【発明の名称】分岐命令
(51)【国際特許分類】
G06F 9/38 20060101AFI20220119BHJP
G06F 9/32 20060101ALI20220119BHJP
【FI】
G06F9/38 330J
G06F9/32 320D
(21)【出願番号】P 2018548913
(86)(22)【出願日】2017-03-21
(86)【国際出願番号】 GB2017050774
(87)【国際公開番号】W WO2017163038
(87)【国際公開日】2017-09-28
【審査請求日】2020-03-13
(32)【優先日】2016-03-23
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】特許業務法人浅村特許事務所
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
(72)【発明者】
【氏名】グリセンスウェイト、リチャード ロイ
(72)【発明者】
【氏名】クラスク、サイモン ジョン
(72)【発明者】
【氏名】ボットマン、フランソワ クリストファー ジャック
(72)【発明者】
【氏名】スミス、ブラッドリー ジョン
【審査官】久保 光宏
(56)【参考文献】
【文献】特開平8-292887(JP,A)
【文献】特開平8-339299(JP,A)
【文献】特開平6-314195(JP,A)
【文献】米国特許第5790845(US,A)
【文献】米国特許第5724563(US,A)
【文献】Bill Appelbe, et al.,"Hoisting Branch Conditions - Improving Super-Scalar Processor Performance",Proceedings of the International Workshop on Languages and Compilers for Parallel Computing (LCPC 1995) (Also published as "Lecture Notes in Computer Science, Vol.1033".),[online],1995年08月,Pages 1-15,[令和3年4月14日検索], インターネット, <URL: https://link.springer.com/chapter/10.1007/BFb0014207> ,<URL: https://www.researchgate.net/profile/Maurizio-Vitale/publication/221497032_Hoisting_Branch_Conditions_-_Improving_Super-Scalar_Processor_Performance/links/54fb47810cf2c3f524204735/Hoisting-Branch-Conditions-Improving-Super-Scalar-Processor-Performance.pdf>, <DOI: 10.1007/BFb0014207>.
【文献】James E. Smith, et al.,"PIPE: A High Performance VLSI Architecture",Computer Science Technical Report #512,[online], University of Wisconsin-Madison Department of Computer Sciences,1983年09月,Pages 1-15,[令和3年4月17日検索], インターネット, <URL: https://minds.wisconsin.edu/handle/1793/58462?show=full>.
【文献】「Cover Story 仮想化の正体 Part 2:コンピュータ. 「分割」を極め、「結合」の段階に」,日経バイト(NIKKEI BYTE),日本,日経BP社,2005年10月22日,2005年11月号(No.270),第28~33頁,ISSN: 0289-6508.
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/30-9/38
CSDB(日本国特許庁)
IEEEXplore(IEEE)
(57)【特許請求の範囲】
【請求項1】
プログラム命令のシーケンスによって指定される処理動作を行う処理回路と、
前記処理動作を行うために、プログラム命令の前記シーケンスを復号して前記処理回路を制御する制御信号を生成する命令復号器と、
を備え、
前記命令復号器が、分岐見込み命令を復号する分岐見込み命令復号回路を備え、前記分岐見込み命令が、分岐宛先アドレスと関連付けられたプログラム可能なパラメータと、プログラム命令の前記シーケンス内の前記分岐見込み命令に続く所定の命令を示す
分岐ポイント・データを提供する、さらなるプログラム可能
なパラメータと、を有し、
前記処理回路が、前記分岐見込み命令復号回路によって制御され、プログラム命令の前記シーケンスの処理が前記所定の命令に到達すると前記分岐宛先アドレスに対応する分岐宛先命令から始まるプログラム命令の処理への分岐をトリガする前記分岐ポイント・データに応答する、分岐制御回路を備
え、
前記分岐見込み命令が、条件付き分岐見込み命令であって、当該条件付き分岐見込み命令が満たされたということと関連付けられた1つ又は複数の条件コードに依存して実行される条件付き分岐見込み命令であり、
前記1つ又は複数の条件コードが満たされないときに前記条件付き分岐見込み命令に応答して、前記分岐見込み命令復号回路が、プログラム命令の前記シーケンスの処理が前記所定の命令に到達したときにプログラム命令の前記シーケンス内の前記その後の分岐命令に続く分岐迂回命令の処理への分岐をトリガするように前記分岐制御回路を制御する分岐制御データをセットするように構成される、
データを処理するための装置。
【請求項2】
前記分岐制御回路が前記分岐をトリガすると、前記分岐宛先命令が、プログラム命令の前記シーケンス内の前記所定の命令の直前の命令に続き、かつ
、前記所定の命令の直前の前記命令によって指定された動作
及び前記分岐見込み命令によって指定された動作が、前記処理回路によって連続的に行われる、請求項1に記載の装置。
【請求項3】
前記分岐ポイント・データが、
前記所定の命令のアドレスを示すアドレス・データと、
前記所定の命令の直前にある最後の命令のアドレスを示す終了データと、
前記分岐見込み命令と前記所定の命令との間の間隔を示すオフセット・データと、
命令の開始記憶アドレスを区別するメモリ記憶アドレスのビットの最下位ビットの端から始まる前記所定の命令の前記メモリ記憶アドレスを示すビットの真部分集合と、
前記所定の命令の前に処理されるべき、残っている命令の数を示す残存サイズ命令データと、
前記所定の命令に到達する前に処理されるべき、残っているプログラムの記憶場所の数を示す残存サイズ・データと、
のうちの1つ又は複数を含む、請求項1及び2のいずれか一項に記載の装置。
【請求項4】
前記分岐見込み命令復号器回路が、分岐制御キャッシュに前記分岐ポイント・データ及び前記分岐宛先アドレスを格納するように前記処理回路を制御する、請求項1から3までのいずれかに記載の装置。
【請求項5】
前記分岐見込み命令復号回路が前記分岐見込み命令を復号するとき、前記分岐制御回路が、命令の開始記憶アドレスを区別するメモリ記憶アドレスのビットの最下位ビットの端から始まる前記所定の命令の前記メモリ記憶アドレスを示すビットの真部分集合を格納する、請求項4に記載の装置。
【請求項6】
ビットの前記真部分集合が、
プログラム・カウンタの値を示す値の対応する部分と、
命令フェッチ・アドレスを示す値の対応する部分と
、
のうちの1つにマッチするとき、前記分岐制御回路が前記分岐をトリガする、請求項5に記載の装置。
【請求項7】
前記処理回路がリセットされることと、
ループ制御回路又はループ終了命令が、プログラム・ループ本体のさらなる繰返しが必要とされないことを決定することと、
例外に入ることと、
例外がテール・チェーンし、それによって現在の例外より前の状態を復元させずに、処理が前記現在の例外の処理から次の例外の処理に直接的に進むことと、
所定のイミディエート宛先アドレスの範囲より大きい分岐命令の実行と、
分岐命令の実行と、
ループ開始命令の実行と、
例外から復帰することと、
前記データ
を処理
するための装置の命令キャッシュが無効化されるようにする命令の実行と、
分岐制御データのキャッシングをディスエーブルする命令の実行と、
分岐予測をディスエーブルする命令の実行と、
プログラム・ループ本体内部の分岐が、ループ開始命令とループ終了命令との間にないアドレスを宛先にしていると前記処理回路が決定することと、
セキュア・モードの動作と非セキュア・モードの動作との間での切り替えと
、
のうちの1つ又は複数に応答して前記分岐ポイント・データが無効化される、請求項4に記載の装置。
【請求項8】
前記分岐ポイント・データが無効化されると、プログラム・フローが前記所定の命令に進行する、請求項7に記載の装置。
【請求項9】
前記条件付き分岐見込み命令が、前記所定の命令のアドレスに相対する前記分岐迂回命令のアドレスを示す迂回パラメータを指定する、請求項
1に記載の装置。
【請求項10】
前記命令復号器が、前記命令復号器によってサポートされる複数の命令長から選択された可変命令長を有する命令を復号するように構成され、
前記迂回パラメータが、前記その後の分岐命令の命令長を示す、
請求項
9に記載の装置。
【請求項11】
前記1つ又は複数の条件コードが満たされ、分岐制御キャッシュが、より以前の分岐見込み命令に応答してセットされた有効な分岐制御データを既に格納しているときに前記条件付き分岐見込み命令に応答して、前記分岐見込み命令復号器回路が、前記有効な分岐制御データを上書きするように前記処理回路を制御するように構成され、
前記1つ又は複数の条件コードが満たされず、前記分岐制御キャッシュが、より以前の分岐見込み命令に応答してセットされた有効な分岐制御データを既に格納しているときに前記条件付き分岐見込み命令に応答して、前記分岐見込み命令復号器回路が、前記分岐制御キャッシュに前記有効な分岐制御データを保持するように前記処理回路を制御するように構成される、
請求項
1から
10までのいずれかに記載の装置。
【請求項12】
分岐宛先アドレスと関連付けられた前記プログラム可能なパラメータが、レジスタ指定子を含み、前記分岐宛先アドレスが、前記レジスタ指定子に対応するレジスタに格納される、請求項1から
11までのいずれかに記載の装置。
【請求項13】
分岐宛先アドレスと関連付けられた前記プログラム可能なパラメータが、前記分岐見込み命令のメモリ・アドレスに依存する現在のメモリ・アドレスからのオフセットによって前記分岐宛先アドレスを示す、イミディエートオフセット値を含む、請求項1から
11までのいずれかに記載の装置。
【請求項14】
前記分岐見込み命令復号器回路が、前記分岐か
らの復帰に使用するための復帰アドレスをリンク・データ記憶機器内に格納するように前記処理回路を制御する、請求項1から
13までのいずれか一項に記載の装置。
【請求項15】
前記分岐制御回路が、プログラム命令の前記シーケンスの処理が前記所定の命令に到達するときに、前記分岐か
らの復帰に使用するための復帰アドレスをリンク・データ記憶機器に格納するように構成される、請求項1から
13までのいずれかに記載の装置。
【請求項16】
前記リンク・データ記憶機器が、
リンク・レジスタ、又は
スタック・ポインタ・レジスタに適用される所定のオフセットによって指定される記憶エリア内のアドレス
のうちの1つである、請求項
14から
15までのいずれかに記載の装置。
【請求項17】
プログラム命令のシーケンスによって指定される処理動作を行うための処理手段と、
前記処理動作を行うように前記処理手段を制御するために制御信号を生成するようプログラム命令の前記シーケンスに応答する命令復号器手段と、
を備え、
前記命令復号器手段が、分岐見込み命令を復号するための分岐見込み命令復号手段を備え、前記分岐見込み命令が、分岐宛先アドレス、及びプログラム命令の前記シーケンス内の前記分岐見込み命令に続く所定の命令を示す分岐ポイント・データとそれぞれ関連付けられたプログラム可能なパラメータを有し、
前記処理手段が、前記分岐見込み命令復号手段によって制御され、プログラム命令の前記シーケンスの処理が前記所定の命令に到達すると前記分岐宛先アドレスに対応する分岐宛先命令から始まるプログラム命令の処理への分岐をトリガする前記分岐ポイント・データに応答する、分岐制御手段を備
え、
前記分岐見込み命令が、条件付き分岐見込み命令であって、当該条件付き分岐見込み命令が満たされたということと関連付けられた1つ又は複数の条件コードに依存して実行される条件付き分岐見込み命令であり、
前記1つ又は複数の条件コードが満たされないときに前記条件付き分岐見込み命令に応答して、前記分岐見込み命令復号手段が、プログラム命令の前記シーケンスの処理が前記所定の命令に到達したときにプログラム命令の前記シーケンス内のその後の分岐命令に続く分岐迂回命令の処理への分岐をトリガするように前記分岐制御手段を制御する分岐制御データをセットするように構成される、
データを処理するための装置。
【請求項18】
プログラム命令のシーケンスによって指定される処理動作を行うステップと、
前記処理動作を行う前記ステップを制御する制御信号を生成するためにプログラム命令の前記シーケンスを復号するステップと、
を含み、
前記復号するステップが、分岐見込み命令を復号するステップを含み、前記分岐見込み命令が、分岐宛先アドレス、及びプログラム命令の前記シーケンス内の前記分岐見込み命令に続く所定の命令を示す分岐ポイント・データとそれぞれ関連付けられたプログラム可能なパラメータを有し、
プログラム命令の前記シーケンスの処理が前記所定の命令に到達するときに、前記分岐宛先アドレスに対応する分岐宛先命令から始まるプログラム命令の処理への分岐をトリガするステップ
を含み、
前記分岐見込み命令が、条件付き分岐見込み命令であって、当該条件付き分岐見込み命令が満たされたということと関連付けられた1つ又は複数の条件コードに依存して実行される条件付き分岐見込み命令であり、
前記1つ又は複数の条件コードが満たされないときに前記条件付き分岐見込み命令に応答して、プログラム命令の前記シーケンスの処理が前記所定の命令に到達したときにプログラム命令の前記シーケンス内のその後の分岐命令に続く分岐迂回命令の処理への分岐をトリガするように分岐制御回路を制御する分岐制御データをセットするステップ
を含む、データを処理する方法。
【請求項19】
請求項
18に記載の方法
の各ステップをコンピュータ
に実行させるためのコンピュータ・プログラ
ム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理システムに関する。より詳細には、本開示は、データ処理システム内の分岐命令に関する。
【背景技術】
【0002】
命令を処理するための回路を含み、及びそのための方法をサポートするデータ処理システムを提供することが知られている。これら命令のいくつかは、分岐宛先アドレスにおけるプログラム命令への分岐を引き起こす。
【発明の概要】
【課題を解決するための手段】
【0003】
本開示は、少なくともいくつかの実施例において、
プログラム命令のシーケンスによって指定される処理動作を行う処理回路と、
前記処理動作を行うために、プログラム命令の前記シーケンスを復号して前記処理回路を制御する制御信号を生成する命令復号器と、
を備え、
前記命令復号器が、分岐見込み命令を復号する分岐見込み命令復号回路を備え、前記分岐見込み命令が、分岐宛先アドレスと関連付けられたプログラム可能なパラメータと、プログラム命令の前記シーケンス内の前記分岐見込み命令に続く所定の命令を示す、さらなるプログラム可能な分岐ポイント・データ・パラメータと、を有し、
前記処理回路が、前記分岐見込み命令復号回路によって制御され、プログラム命令の前記シーケンスの処理が前記所定の命令に到達すると前記分岐宛先アドレスに対応する分岐宛先命令から始まるプログラム命令の処理への分岐をトリガする前記分岐ポイント・データに応答する、分岐制御回路を備える、
データ処理装置である一例を提供する。
【0004】
本開示は、少なくともいくつかの実施例において、
プログラム命令のシーケンスによって指定される処理動作を行うための処理手段と、
前記処理動作を行うように前記処理手段を制御するために制御信号を生成するようプログラム命令の前記シーケンスに応答する命令復号器手段と、
を備え、
前記命令復号器手段が、分岐見込み命令を復号するための分岐見込み命令復号手段を備え、前記分岐見込み命令が、分岐宛先アドレス、及びプログラム命令の前記シーケンス内の前記分岐見込み命令に続く所定の命令を示す分岐ポイント・データとそれぞれ関連付けられたプログラム可能なパラメータを有し、
前記処理手段が、前記分岐見込み命令復号手段によって制御され、プログラム命令の前記シーケンスの処理が前記所定の命令に到達すると前記分岐宛先アドレスに対応する分岐宛先命令から始まるプログラム命令の処理への分岐をトリガする前記分岐ポイント・データに応答する、分岐制御手段を備える、
データを処理するための装置を提供する。
【0005】
本開示は、少なくともいくつかの実施例において、
プログラム命令のシーケンスによって指定される処理動作を行うステップと、
前記処理動作を行う前記ステップを制御する制御信号を生成するためにプログラム命令の前記シーケンスを復号するステップと、
を含み、
前記復号するステップが、分岐見込み命令を復号するステップを含み、前記分岐見込み命令が、分岐宛先アドレス、及びプログラム命令の前記シーケンス内の前記分岐見込み命令に続く所定の命令を示す分岐ポイント・データとそれぞれ関連付けられたプログラム可能なパラメータを有し、
プログラム命令の前記シーケンスの処理が前記所定の命令に到達するときに、前記分岐宛先アドレスに対応する分岐宛先命令から始まるプログラム命令の処理への分岐をトリガするステップ
を含む、データを処理する方法を提供する。
【0006】
添付の図面を参照しながら、ほんの一例として、実例の実施例がこれから説明される。
【図面の簡単な説明】
【0007】
【
図2A】分岐見込み(branch-future)命令を概略的に示す。
【
図2B】分岐見込み命令を含むプログラム命令のシーケンスを概略的に示す。
【
図2C】所定の命令を示すプログラム可能なパラメータの様々な実装形態を有する、いくつかの分岐見込み命令を概略的に示す。
【
図2D】プログラム可能な分岐宛先アドレスの様々な実装形態を有する、いくつかの分岐見込み命令を概略的に示す。
【
図3A】処理パイプラインを通じて進行する分岐見込み命令を含むプログラム命令のシーケンスを概略的に示す。
【
図3B】分岐見込み命令を含む命令のシーケンスのプログラム・フローを概略的に示す。
【
図3C】分岐見込みとリンクの命令を含む命令のシーケンスのプログラム・フローを概略的に示す。
【
図4】分岐見込み処理の1つの方法を概略的に示す。
【
図5】データ無効化に応答する処理を含む分岐見込み処理の別の方法を概略的に示す。
【
図5A】条件付き分岐見込み命令を処理する実例を示す。
【
図5B】逆条件に対応する条件付き分岐見込み命令のペアを処理する実例を示す。
【
図6】ゼロ・オーバヘッドのループ挙動を概略的に示す。
【
図7】
図6のゼロ・オーバヘッドのループ挙動に続く命令を実行するときの処理パイプラインのステージの内容を概略的に示す。
【
図8】ゼロ・オーバヘッドのループ挙動及び分岐見込み命令の挙動を制御するループ/分岐制御回路を含む処理パイプラインを概略的に示す。
【
図9】ループ開始位置への分岐が行われるべきプログラム実行時のポイントを識別するために、プログラム・カウンタの値とループ制御データのフィールドとの間で、どのように比較が行われ得るかを示す。
【
図10A】ループ開始プログラム命令の挙動を概略的に示す流れ図である。
【
図10B】ループ開始命令の実装形態を概略的に示す。
【
図11】ループ終了プログラム命令の挙動を概略的に示す流れ図である。
【
図12】ゼロ・オーバヘッドのループ挙動の一部としてプログラム・ループ本体を実行するときのループ制御回路のアクションを概略的に示す流れ図である。
【
図13】述語を提供するプログラム・ループ本体内部の命令の実行の制御を概略的に示す流れ図であり、これによってベクトル命令は、プログラム・ループ本体の所与の繰返しが述語によって制御されている間、特定のベクトル要素がアクティブな、複数のベクトル要素上で動作することができる。
【
図14A】非述語的(non-predicated)及び述語的ループの実行の実例を示す。
【
図14B】非述語的及び述語的ループの実行の実例を示す。
【
図14C】非述語的及び述語的ループの実行の実例を示す。
【
図14D】非述語的及び述語的ループの実行の実例を示す。
【
図14E】非述語的及び述語的ループの実行の実例を示す。
【発明を実施するための形態】
【0008】
本開示は、パフォーマンスを低下させる処理の遅れを分岐命令が引き起こす可能性があることを認識している。この問題に対処するために、本開示は、分岐見込み命令を復号する分岐見込み命令復号回路を提供する。分岐見込み命令は、分岐宛先アドレスと関連付けられたプログラム可能なパラメータを含む。分岐宛先アドレスは、分岐に続く、処理回路によって処理され得るプログラム命令に対応する。分岐見込み命令は、プログラム命令のシーケンス内の分岐見込み命令に続く所定の命令を示す、さらなるプログラム可能な分岐ポイント・データ・パラメータも含む。分岐見込み命令にさらなるプログラム可能な分岐ポイント・データ・パラメータを含むことによって、処理回路は、分岐ポイントより前に分岐宛先アドレスへの分岐に準えることができる。したがって分岐ポイントに到達するときに、処理の遅れが回避又は緩和され得る。
【0009】
図1は、メモリ102に連結されたデータ処理装置100の実例を概略的に示す。メモリ102は、プログラム命令及びオペランド・データを格納する。命令はフェッチ・ユニット104によってフェッチされ、命令復号器106によって復号されて、処理回路を制御する制御信号120を生成する。処理回路は、メモリ102から受け取られた、又はメモリ102に格納された浮動小数点のオペランドに対してデータ処理演算を行うために、浮動小数点処理回路108及び浮動小数点レジスタ110を含むことができる。処理回路は、メモリ102から受け取られ、又はメモリ102に格納する整数のオペランドに対してデータ処理演算を行うために、乗算器112、シフタ114、加算器116、及び整数レジスタ117も含む。
【0010】
フェッチ・ユニットによってフェッチされたいくつかの命令は、プログラム命令の現在のシーケンスの後から、分岐宛先アドレスから始まるメモリ・アドレスの場所に格納されたプログラム命令に、処理を分岐させる分岐命令であってよい。分岐命令に対応するために、データ処理装置100は、プログラム・フローを分岐宛先アドレスにリダイレクトできる分岐ユニット119を含む。分岐命令の処理を速めるために、データ処理装置100は、分岐予測器118を含むことができる。分岐プレディケータ118は状態データを格納し、分岐命令が、状態データに基づいて行われるか、又は行われないかを予測する。分岐ユニット119は、さらに本明細書で説明されるように、(他のループ制御回路の代用として、又はこれらに加えて)ゼロ・オーバヘッドのループ挙動をサポートする/もたらすループ制御データによって制御されてもよい。分岐予測器118も、さらに本明細書で説明されるように、ループ制御によって実装される。
【0011】
図2Aは、分岐見込み命令BF200の実例を概略的に示す。分岐見込み命令200は、分岐宛先アドレス254を示すプログラム可能なパラメータ、プログラム可能な分岐ポイント・データ252を提供するプログラム可能なパラメータ、及び分岐見込み命令として命令を識別する符号化ビット258を含む。分岐ポイント・データ252は、データ処理装置によって処理されることになるプログラム命令のシーケンスの中の分岐見込み命令BFに続く所定の命令を示す。分岐宛先アドレス254は、プログラム・フローが所定の命令に到達するときに処理が分岐すべき命令の場所を示す。いくつかのビットx256は、他のパラメータのために予約されることがある。
【0012】
図1に戻ると、データ処理装置は、分岐見込み符号化ビット258にマッチさせることによって、命令が分岐見込みであることを識別するのに応答して、
図2Aに示されたものなどの分岐見込み命令を復号するための分岐見込み命令復号回路122を含む。分岐見込み命令を復号すると、分岐見込み命令復号回路122は、分岐宛先アドレス・データ、及び所定の命令を示す分岐ポイント・データを、分岐制御データ・キャッシュ130に格納するように処理回路を制御する。このようにデータを格納することによって、データ処理装置100は、プログラム命令の通常のシーケンスの処理からの分岐が発生し得るときより前の指示、及び分岐がプログラム実行ポイントを指示する場所への宛先アドレスを提供されることが可能になる。したがってプログラム・フローが、分岐見込み命令によって示される所定の命令に到達すると、分岐は、処理の遅れが緩和されるか、又はない状態で発生することができる。データ処理装置は、さらに以下に説明されるように、ループ終了命令DLE及びループ開始命令DLS(P)に応答するように処理回路を制御するために、ループ終了命令復号回路123及び(非述語的ループ開始命令復号回路の役割も果たす)述語的ループ開始命令復号回路125も含む。
【0013】
分岐制御データ・キャッシュ130は、命令の開始記憶アドレスを区別するメモリ記憶アドレスのビットの最下位ビットの端から始まる所定の命令のメモリ記憶アドレスを示すビットの真部分集合として、分岐ポイントに対応するデータを格納することができる。プログラム・フローが、いつ所定の命令に到達したか決定するために、これらのビットは、プログラム・カウンタを示す値、次の命令フェッチ・アドレスを示す値、又はデータ処理装置100の処理活動を示す値と比較されてよい(例えば、以下に説明される
図9を参照)。
【0014】
図2Bは、分岐見込み命令BF、並びにプログラム命令のシーケンスADD
1、ADD
2、及びBXを含むプログラム・コードを示し、これらは、データ処理装置100によって処理されてよい。分岐見込み命令BFは初めに、上述のように、プログラム・フローが所定の命令BXに到達するときに宛先アドレスに分岐するようにデータ処理装置100を設定する。分岐見込み命令を復号すると、データ処理装置100は、ADD
1及びADD
2を含むプログラム命令のシーケンスを処理し続ける。データ処理装置100がADD
2を処理すると、キャッシュ130に格納された分岐ポイント・データは、分岐が発生しようとしていることを示す。さらに分岐制御データ・キャッシュ130は、分岐されることになる命令のアドレスに対応する、対応する分岐宛先データも格納する。このようにして、分岐宛先データに対応する分岐宛先命令から始まる処理プログラム命令への分岐は、処理の遅れ、又は処理パイプラインに挿入されることになるバブル(未使用のスロット)を生じることなく、発生させることができる。
【0015】
図2Cは、
図2Bに示された命令のシーケンスに関連する所定の命令を示すプログラム可能な分岐ポイント・データ・パラメータの様々な実例を示す。
図2Cの分岐見込み命令201において、分岐ポイント・データは、分岐命令BXのアドレスを示すデータを含む。
図1に示された分岐制御回路124は、BXのアドレスを示すデータを、フェッチされる次の命令に対応する値にマッチさせることができる。その後、プログラム・フローが分岐命令BXに到達したと決定されると、分岐制御回路124は、分岐見込み命令201の分岐宛先によって示される命令への分岐をトリガする。
【0016】
分岐ポイント・データはまた、
図2Cの分岐見込み命令202に示すように、命令ADD
2を示すデータであってもよい。したがって分岐見込み命令201と同じように、分岐制御回路124は、プログラム・フローがADD
2をフェッチし、BXに到達したときに分岐宛先への分岐をトリガする。
【0017】
図2Cの分岐見込み命令203は、
図2Bにおける分岐見込み命令BFから所定の命令BXまでのアドレスのオフセットを含む、分岐ポイント・データを示す。
図2Bの実例において、ADD
1及びADD
2は32ビット命令である。したがって、8バイトのアドレスのオフセットは所定の命令BXを示す。
【0018】
図2Cの分岐見込み命令204は、残りの命令数を示す分岐ポイント・データを示す。残りの命令数は、所定の命令に到達する前の、分岐見込み命令に続いて実行されることになる命令の数を示す。
図2Bの実例において、これはADD
1及びADD
2に対応する。したがって残りの命令数は、この実例では+2である。
【0019】
図2Cの分岐見込み命令205は、所定の命令に到達する前の、まだ処理されていない、いくつかのプログラムの記憶場所を示す残存サイズ・データを示す。命令ADD及びADD
2が、それぞれ32ビット及び16ビットの可変長命令であった場合、これらの全体サイズは6バイトになるので、残りのサイズの値は6である。
【0020】
図2Cの分岐見込み命令211は、
図2Bにおける分岐見込み命令BFから所定の命令BXまでのアドレスのオフセットを含む、分岐ポイント・データを示す。
図2Bの実例において、ADD
1及びADD
2は32ビット命令である。したがって、アドレスのオフセットは8バイトであるが、すべての命令が少なくとも2バイト境界に揃えられ、したがって値8の最下位ビットが所定の命令のアドレスを一意に識別することが必要とされないので、所定の命令BXを示す値4が使用される。
【0021】
図2Dは、分岐宛先アドレスと関連付けられたプログラム可能なパラメータの様々な実装形態を有する分岐見込み命令の他のいくつかの実例を示す。
図2Dの分岐見込み命令206に示すように、分岐宛先は、処理回路によって分岐されることになる命令のメモリ・アドレスを格納するレジスタの場所を指定するレジスタ指定子<R
m>によって示されてよい。
【0022】
図2Dの分岐命令207は別の実例を示し、ここで分岐宛先は、分岐見込み命令のメモリ・アドレスに相対するポイントからのオフセットによって、分岐されることになる命令のアドレスを示す、イミディエートオフセット値<imm>によって示される。
【0023】
図2Dの分岐見込み命令208及び分岐見込み命令209は、リンク指定子を同様に含む分岐見込み命令の実例を示す。リンク指定子は、リンク・レジスタLRに復帰アドレスを格納するように処理回路を制御する。プログラム・フローが分岐宛先で始まるプログラム命令の処理を完了し、リターン命令に到達すると、リンク・レジスタに格納されたアドレスへのさらなる分岐が行われる。したがって、分岐宛先でプログラム命令が処理されると、処理は、プログラム命令の元のストリームに戻ることができる。他の実例において、復帰アドレスは、所定のオフセットがスタック・ポイント・レジスタに当てはめられることによって指定された記憶エリア内の任意のアドレスに格納されてよい。
【0024】
図2Dは、条件付き分岐見込み命令210も示す。条件付き分岐見込み命令210は、いくつかの条件コード、op{cond}を含む。条件付き分岐見込み命令が処理されると、分岐見込み命令復号器は、条件コードが満たされたかどうかを決定し、条件付き分岐見込み命令は、この決定に従って処理される。
【0025】
図3Aは、
図1のデータ処理装置100の処理パイプライン(フェッチ、復号、及び実行という単純な3つのステージのパイプライン)を進行する、分岐見込み命令を含む命令のシーケンスを示す。サイクル0において、命令I
1が処理パイプラインのフェッチ・ステージに送り込まれる。サイクル1において、
図2Bに示された命令のシーケンスの第1の命令、即ち分岐見込み命令BFがパイプラインに送り込まれる。命令I
1も、このサイクル内の復号ステージに進行する。サイクル2において、加算命令ADD
1がパイプラインに送り込まれ、分岐見込み命令BFが復号される。分岐見込み命令BFを復号すると、分岐見込み命令復号回路122は、分岐制御データ・キャッシュ130に格納されている可能性がある、プログラム命令のシーケンス内の分岐見込み命令BFに続く所定の命令を示す分岐ポイント・データ、及び分岐宛先データを取得する。この場合、分岐ポイント・データは、別の分岐命令BXを指示可能である。
【0026】
サイクル3において、別の命令ADD2が処理パイプラインに送り込まれる。分岐制御回路124は、プログラム命令のシーケンスが所定の命令に到達したこと、及び分岐宛先アドレスから始まるプログラム命令の処理への分岐がトリガされるはずであることを識別する。したがって、次のサイクルであるサイクル4において、分岐宛先アドレスにおけるプログラム命令からの第1の命令I1BTが、処理パイプラインに送り込まれる。同様に、サイクル5及びサイクル6において、さらに2つの命令I2BT及びI3BTが、処理パイプラインに送り込まれる。
【0027】
図3Bは、
図3Aの命令を処理するときのデータ処理装置100のプログラム・フローを示す。図に示すように、I
1、BF、ADD
1、及びADD
2を含む命令の第1のシーケンスは、データ処理装置によって最初に処理される。分岐見込み命令BFによって、ADD
2の処理は、分岐宛先アドレスから始まるプログラム命令の別のシーケンスに対して分岐が発生するはずであることを示す。このその他のシーケンスは、分岐宛先命令I
1BT、I
2BT、及びI
3BTを含む。
図3Bに示すように、プログラム・フローは、分岐見込み命令を含むプログラム命令の第1のシーケンスから分岐して離れ、分岐宛先命令を処理する。I
1BT、I
2BT、及びI
3BTは、算術的且つ論理的な命令、メモリ操作が行われるようにするデータ・ハンドリング命令、又は他の任意のタイプの命令であってよい。
【0028】
図3Bに示されるように、分岐見込み命令BFは、ADD
2命令の直後に分岐を引き起こし、分岐命令BXを迂回する。分岐命令BXは、分岐制御データ・キャッシュ130に格納された分岐見込み状態データが、分岐見込み命令BFとBXの間で無効化されるイベントのプログラム命令のシーケンスに含まれてよい。例えば、前記処理回路がリセットされることと、ループ制御回路又はループ終了命令が、前記分岐見込み命令を含むプログラム・ループのさらなる繰返しが必要とされないと決定することと、例外がエンターされることと、例外がテール・チェーンし、それによって現在の例外より前の状態を復元させずに、処理が前記現在の例外の処理から次の例外の処理に直接的に進むことと、所定のイミディエート宛先アドレスの範囲より大きい分岐命令の実行と、分岐命令の実行と、ループ開始命令と、例外から復帰することと、前記データ処理装置の命令キャッシュが無効化されるようにする命令の実行と、前記制御データのキャッシングをディスエーブルする命令の実行と、分岐予測をディスエーブルする命令の実行と、プログラム・ループ本体内部の分岐が、ループ開始命令とループ終了命令の間にないアドレスを宛先にしていると前記処理回路が決定することと、セキュア・モードの動作と非セキュア・モードの動作を切り替えることと、1つ又は複数の実装形態を定義した条件と、のイベントにおいて、分岐見込み命令に対応する任意の格納された分岐ポイント・データが無効化されることがある。したがって、分岐見込み命令によって示される分岐を行うことは、もはや実現可能になることがない。したがって、分岐命令BXは、宛先アドレスに分岐するためのバックアップとしてシーケンスのプログラム命令に含まれる。しかし通常の状況下では、分岐命令BXは処理されない。
【0029】
図3Cは、分岐見込みとリンクの命令BFLを含むプログラム命令のシーケンスを概略的に示す。BFL命令は、命令MULに到達するときに、サブルーチンfunc:への分岐を生じる。BFL命令はまた、復帰アドレス値がリンク・レジスタLRに格納されるようにし、復帰アドレス値は、サブルーチンfunc:が実行されたときに返されることになるCMP命令のアドレスを示す。いくつかの実施例において、BFL命令は、復帰アドレス値をリンク・レジスタLRに格納することができる。他の実施例において、BFL命令は、リンク指標フラグを分岐制御データ・キャッシュ130に格納することができ、分岐制御回路124は、リンク指標フラグがセットされる場合に、分岐宛先アドレスへの分岐がトリガされると、復帰アドレス値をリンク・レジスタLRに格納することができる。
【0030】
図4は、分岐見込み処理のための方法の1つの実例を示す。ステップ401において、分岐見込み命令が復号される。分岐見込み命令は、分岐宛先アドレス、及びプログラム命令のシーケンス内の分岐見込み命令に続く所定の命令を示す分岐ポイント・データをそれぞれ示すプログラム可能なパラメータを含む。方法は次にステップ402に進み、ここでプログラム命令のシーケンスが所定の命令に到達したかどうかが決定される。プログラム命令のシーケンスが所定の命令に到達したと決定されると、方法はステップ403に進み、ここで、分岐宛先アドレスからのプログラム命令の処理への分岐がトリガされる。
【0031】
図5は、分岐見込み処理のための方法の別の実例を示す。ステップ501において、分岐見込み命令が復号される。前述のように、分岐見込み命令は、分岐宛先アドレス、及びプログラム命令の前記シーケンス内の前記分岐見込み命令に続く所定の命令を示す分岐ポイント・データを含む。ステップ502において、分岐ポイント・データ及び分岐宛先アドレスは、ループ/分岐制御キャッシュに格納される。リンクを伴う分岐見込み命令の場合、復帰アドレスはまた、リンク・レジスタLRを使用して格納され、代替実施例において、リンクを伴う分岐見込み命令は、代わりにリンク指標フラグが格納されるようにする。処理は次にステップ503に進み、ここで、処理されているプログラム命令のシーケンスが所定の命令に到達したかどうかが監視される。所定の命令に到達していない場合、ステップ504において、分岐宛先アドレス及び分岐ポイント・データが無効化されたかどうかがチェックされる。ステップ504において無効化された場合、処理はステップ506に移り、ここで分岐見込み命令は無視され、通常のプログラム・フローが前進する。しかし、データがまだ有効であると決定される場合、処理はステップ503に戻る。所定の命令に到達したと決定されると、処理はステップ505に進み、ここで分岐宛先アドレスから始まるプログラム命令の処理への分岐がトリガされる。ステップ502においてリンク指標フラグを格納する実施例において、処理回路は、ステップ505においてこのフラグがセットされているかどうかを確かめるためにチェックし、セットされていると決定すると、復帰アドレスはリンク・レジスタLRに格納される。
【0032】
図5Aは、条件付き分岐見込み命令と共に生じ得る問題、及びこの問題に対処するための技法を示すために、命令の実例のシーケンスを示す。命令のシーケンスは、対応する条件(例えばEQに等しい)が満たされる場合に一定の宛先アドレスに分岐するための条件分岐BEQを含む。分岐BEQと同じ条件EQを指定し、分岐宛先アドレスを示すパラメータ「func」、及び直前に分岐が行われるアドレスBPを識別するための分岐ポイント・データBPも指定する、対応する条件付き分岐見込み命令BFCSELが含まれる。したがってEQ条件が満たされる場合、処理がポイントBPの直前の命令ADD2に到達するときに分岐宛先命令I1BTへの分岐がトリガされる。通常、条件付き分岐と関連付けられた条件が満たされない場合、分岐は行われず、代わりにプログラム・フローは順次継続する。分岐見込み命令BFは同様にふるまうものと思われ、その結果、分岐見込み命令BFCSELの条件が満たされない場合、ADD2命令に続いて、分岐宛先アドレス「func」への分岐は行われず、代わりに分岐ポイントBPにおいて命令ADD2に続く次の命令が実行される。
【0033】
しかしADD2に続く命令は、分岐見込み命令BFCSELに対応する条件付き分岐BEQであり、EQ条件が分岐見込み命令BFCSELを満たさないことが既に分かっているので、分岐BEQもまた、この条件に不合格になる。したがって条件が不合格になると、フェッチ/復号/発行/実行のスロットを占めるが、いずれの本物の処理動作もトリガしない、処理パイプラインに挿入される2つの「浪費された」命令(分岐見込み命令BFCSEL及び分岐命令BEQ)が存在することになる(不合格になった分岐は本質的に、無演算(NOP:no-operation)命令としてふるまう)。したがって、分岐見込み命令BFCSELを含むことは、分岐条件が合格になる場合にはパフォーマンスを改善できるが、条件が不合格になると、分岐見込み命令BFCSELを含むことは、分岐見込み命令BFCSELが含まれなかった場合に1つの浪費された命令(分岐BEQ)が存在する代わりに、現時点で2つの浪費された命令(分岐見込み命令BFCSEL及び分岐BEQ)が存在するので、実際にパフォーマンスの代償をこうむる。これは、分岐見込み命令BFCSEL含むことが理にかなうかどうかコンパイラが決定することを困難にし、含むべきか含むべきではないかの判定が、条件が満たされる確率に依存する可能性があり、これは、データに依存する可能性があり、コンパイル時に予測することが非常に困難になる可能性がある。
【0034】
図5Aは、この課題がどのように対処され得るかを示す。条件コードEQ、分岐ポイント情報BP、及び宛先アドレス情報「func」に加えて、条件付き分岐見込み命令BFCSELは、分岐見込み命令BFCSELと関連付けられたその後の分岐命令BEQXに続く命令である分岐迂回命令I2のアドレスを示す分岐迂回パラメータ「end」も指定することができる。分岐見込み命令BFCSELと関連付けられた条件が満たされる場合、分岐見込み命令復号回路122は、上述と同じ方式で、分岐宛先アドレス・データ、及びポイントBPの直前の所定の命令ADD2を示す分岐ポイント・データを分岐制御データ・キャッシュ130に格納するように処理回路を制御する。その一方で、分岐見込み命令BFCSELと関連付けられた条件が満たされない場合、分岐見込み命令復号回路122は、分岐ポイントBP及び分岐迂回命令を識別する分岐制御データを分岐制御データ・キャッシュ130に格納するように処理回路を制御する。したがって、処理が分岐ポイントBPに到達するとき、条件が不合格になると、次の命令BEQに順次進む代わりに、分岐制御回路124は、分岐迂回命令I2への分岐をトリガする。
【0035】
これは、条件付き分岐見込み命令と関連付けられた条件が満たされるかどうかに関わらず、分岐ポイントBPに到達する前に分岐制御データが無効化されない限り、分岐命令BEQ自体は到達されないということを意味する。したがって、条件が合格になるか不合格になるかに関わらず、及び分岐見込み命令が含まれるか否かに関わらず、分岐制御と関連付けられた命令スロットの数は依然として1なので、分岐見込み命令BFCSELを導入することによってこうむる代償はない。したがって、これは、分岐見込み命令を含むことがパフォーマンスの代償をもたらす可能性があるか否かを推定する必要なく、コンパイラが分岐見込み命令を使用できるということを意味し、したがって、実際にプログラム・コードを実行するときに、分岐ポイントにおける分岐の遅れを緩和するというパフォーマンスの恩恵がさらに頻繁に実現され得るように、分岐見込み命令をさらに利用しやすくする。
【0036】
分岐迂回パラメータ「end」は、条件付き分岐命令の中で様々な方式で符号化されてよく、又は暗黙的であってもよいので符号化される必要も全くなくてよい。例えば、「end」のアドレスは、レジスタ内で、又はイミディエート値として指定されてよく、絶対値として指定されるか、又は分岐見込み命令BFCSEL自体のプログラム・カウンタ・アドレスに相対して指定されてもよい。しかし実際には、分岐迂回命令I2は典型的には、分岐ポイントBPからの2,3の命令に続くだけなので、分岐迂回パラメータを符号化するために必要とされるビット数を減らすために、分岐ポイントにおける所定の命令ADD2のアドレスに相対して指定されたアドレスとして、分岐迂回パラメータを符号化することがさらに効率的になり得る。いくつかの実施例は、分岐ポイントBPが分岐命令BEQより先に任意の数の命令を指定されることを可能にすることがある。例えば、これは、分岐ポイント並びに分岐自体から分岐するときに、分岐BEQと関連付けられた条件を評価するための比較命令などの制御命令が、迂回されることを可能にすることができる。この場合、分岐迂回パラメータは、(例えば2又は4バイトといった)いくつかのアドレスのストライド値の倍数の、分岐ポイントにおける所定の命令に相対した分岐迂回命令のオフセットを指定する2進数の値であってよい。
【0037】
しかし、他の実施例は、分岐ポイントBPが分岐BXの直前の命令ADD2であること、及び分岐迂回命令I2が分岐の直後の命令であるので、ADD2とI2の間に1つの命令が存在することを想定できる。すべての分岐命令が一定の固定命令長を有する場合、分岐ポイントBPにおける命令ADD2のアドレスと分岐迂回命令I2の間のオフセットが、一定の既知のオフセットによって分離されてよいので、分岐見込み命令の中で分岐迂回パラメータ「end」を符号化する必要が全くなくてよい。
【0038】
その一方で、分岐命令BXが、分岐ポイントBPにおいて分岐迂回命令I2を命令ADD2から分離するただ1つの命令であることが想定されるとしても、いくつかの実装形態は、可変命令長をサポートすることができるので、介在する分岐命令BEQは、いくつかの命令長のうちの1つを有することができる。この場合、条件付き分岐見込み命令BFCSELの中の迂回パラメータ「end」は、分岐命令BEQの長さをフェッチして決定する必要なく、その後の分岐命令BEQの長さを指定することによって分岐迂回命令を識別することができ、例えば、分岐命令に対して2つの考えられる命令長(例えば16ビット又は32ビット)が存在する場合、迂回パラメータ「end」は、1ビットのフラグによって表されてよい。
【0039】
図5Bは、逆条件に対応する分岐見込み命令BFCSELのペアの使用を示す命令の別の実例のシーケンスを示す。(例えばif-then-else構造を処理するために)条件が満たされる場合、第1のコードへの分岐、及び条件が満たされない場合、第2のコードへの分岐を必要とするプログラム・フローにおいて、プログラムが「フォーク」を必要とすることが比較的よく見られる。したがって、プログラム命令のシーケンスは、(例えばEQに等しく、NEに等しくない)逆条件に対応する分岐命令BEQ及びBNQのペアを含むことができる。分岐を処理する際の遅れを緩和させるために、対応する条件付き分岐見込み命令BFCSELには、逆条件EQ及びNEそれぞれが共に含まれてよい。したがって、EQの条件が満足されるか、NEの条件が満足されるかに関わらず、「func1」又は「func2」への分岐のうちの1つが行われるはずである。
【0040】
分岐見込み命令BFCSELのペアの第1のEQがこの条件に不合格になると、分岐見込み命令復号回路122は、上述のように、迂回アドレス「end」における分岐迂回命令を指定する分岐制御データを分岐制御データ・キャッシュ130に格納するように処理回路を制御する。次に、第2の分岐見込み命令BFCSELのNEがこの条件に合格するので、第1の分岐ポイントBPへの到達時に「end」に分岐する代わりに、必要とされるプログラム・フローは、分岐ポイントBPにおいて関数「func2」に分岐することを実際には必要とする。したがって、分岐制御データ・キャッシュ130が、初めの方の分岐見込み命令に応答してセットされた有効な分岐制御データを既に収めているときに、分岐見込み命令がこの条件に合格する場合、分岐見込み命令復号器回路122は、以前にセットされた分岐制御データを上書きするように処理回路を制御する。
【0041】
しかし、分岐見込み命令BFCSELのペアの第1のEQがこの条件に合格すると、データは、処理が分岐ポイントBPに到達するときに分岐宛先アドレス「func1」への分岐を制御するために、分岐制御データ・キャッシュ130に格納される。しかし、分岐見込み命令BFCSELのペアの第2のNEがこの条件に不合格になり、分岐ポイントBPにおける分岐迂回アドレス「end」への分岐を示すために、分岐制御データ・キャッシュ130にデータを普通にセットする。しかし、以前にセットされた分岐制御データを上書きすることは、この場合、分岐ポイントBPに続くアドレス「end」において命令I2に分岐することが、2つの関数「func1」及び「func2」のどちらも実行されないという結果になるような、間違った結果に至る。このことを防ぐために、分岐制御データ・キャッシュ130が、初めの方の分岐見込み命令に応答してセットされた有効な分岐制御データを既に収めているときに、分岐見込み命令がこの条件に不合格になる場合、分岐見込み命令復号器回路122は、以前にセットされた分岐制御データを分岐制御データ・キャッシュ130に保持するように処理回路を制御する。
【0042】
要約すれば、「条件真」の分岐見込み命令は、以前の分岐見込み命令に応答してセットされた有効な分岐制御データを上書きするが、「条件偽」の分岐見込み命令は、以前の分岐見込み命令に応答してセットされた有効な分岐制御データを上書きしない。このことは、条件の結果に応じてプログラムが2つの代替関数のうちの1つに分岐する場合にプログラム・フロー制御における「フォーク」が必要とされるときでさえ、分岐見込み命令が正しく使用され得ることを保証する。
【0043】
図6は、ゼロ・オーバヘッドのプログラムのループ挙動を概略的に示す。ゼロ・オーバヘッドのプログラムのループ挙動は、ループ挙動をサポートすることと関連付けられたオーバヘッドがないことを意味せず、例えば、プログラム・ループ本体を通る第1の工程の間、プログラム実行パイプライン内のスロットを占有することをループ制御プログラム命令に必要とすることなどによって、このオーバヘッドは緩和され、これらのループ制御プログラム命令を別々に実行することを必要とせずにその後の工程が制御されるということが理解されよう。
【0044】
プログラム・フローは通常、プログラム分岐が遭遇されるまで直線的に進行する。
図6に示された実例において、プログラム・フローは命令Ixを通り過ぎて進行し、ループ開始命令DLS[P]に到達する。このループ開始命令DLS[P]は、述語的及び非述語的挙動の両方を見せることがある。ループ開始命令DLS[P]に続く命令I0、I1、I2、I3を含むプログラム・ループ本体が、プログラム・ループ本体を通るそれぞれの工程に対して複数のベクトル要素が処理されるベクトル・プログラム・ループ本体として実行することになる場合、ループ開始命令は、述語に対して使用されることになるベクトル要素サイズを指定する。使用されることになるこのベクトル要素サイズが、根本的な処理システムの最大データ経路幅より小さいとき、これは、プログラム・ループ本体を通るそれぞれの工程上で複数のベクトル要素が処理されることになるということを示す。逆に、指定されたベクトル要素サイズが、最大データ経路幅に等しいか、又はデータ要素のサイズが指定されていない場合、これは、処理がスカラ的に推進されることになり、それによって1つの要素が、プログラム・ループ本体を通るそれぞれの工程に対して処理されるということを示す。プログラム・ループ本体を通る1つの工程の間に複数のベクトル要素を処理するとき、このような工程は、プログラム・ループ本体を通るこの工程の間に処理されるベクトル要素の数によって示される複数の繰返しに対してプログラム・ループ本体を実行したことに対応すると考えられてよい。例えば、実行されることになるプログラムは、処理されることになる8つの要素、即ちプログラム・ループ本体の8つの繰返しを必要とすることができる。これは、要素のうちの4つに対する所望の処理をそれぞれ並列に実行する、プログラム・ループ本体を通る2つの工程によって実現されてよく、プログラム・ループ本体を通るそれぞれの工程はループの4つの繰返しに対応する。他の実施例において、要素は、1つの繰返しにそれぞれ対応する、ループを通る8つの工程の間、別々に処理されてよい。
【0045】
典型的なベクトルの実装形態において、パフォーマンスの向上は、プログラム・ループ本体を通る工程の間、ベクトル要素を並列に処理することによって実現されるということが理解されよう。しかし、いくつかの実施例は、これらが、プログラマの視点から、単一の並列ベクトル処理命令に対応するように思えても、様々なベクトル要素を順番に実行することによってハードウェアのオーバヘッド/複雑性を低下させるために、並列に実行する能力を犠牲にすることがある。
【0046】
複数のベクトル要素を伴うベクトル処理の場合、様々なベクトル要素がベクトル処理の様々なレーンの中で処理され、これらのレーンのそれぞれは述語を必要とすることがある。1つのレベルにおいて、述語は、当該の要素のビット幅に利用できるデータ・レーンの利用可能な数を考慮して、プログラム・ループ本体を通るそれぞれの工程の間に処理されることになるベクトル要素の数に、行われる処理をマッチさせるために使用されてよい。例えば、処理が7つのベクトル要素に対して行われることになり、ベクトル要素サイズが、プログラム・ループ本体を通るそれぞれの工程の間に4つのベクトル要素が処理され得るというようなものである場合、全体的な処理は、4つのベクトル要素が並列に処理される、プログラム・ループ本体を通る1つの工程を行い、続いて、3つの要素が並列に処理され、且つベクトル処理の1つのレーンがプログラム・ループ本体内部のプログラム命令の述語のためにこの動作の中で抑制される、ループ本体を通る最終の工程を行うことによって実現されることが可能である。
【0047】
このような述語は、プログラム・ループ本体を通る繰返しの数を、処理のデータ経路幅及びベクトル要素サイズとマッチさせる。このような述語は、例えばプログラム命令によって指定されるような、演算が行われていることに関連する他の理由のために、プログラム・ループ本体を通る所与の工程の間、処理レーン内の処理を抑制する効果があるさらなる述語によって追加されてよい。ベクトル要素がプログラム・ループ本体の実行を経るので、述語のこれらの形の両方が、ベクトル要素の全体的な述語をもたらすように組み合わされてよい。
【0048】
図6に戻ると、ループ開始命令は、レジスタRnに格納された値によって示されるような、(ベクトル化が行われない場合、スカラ・ループの繰返しの数に対応する、)プログラム・ループ本体が実行されることになる回数を指定する、ループ開始命令と関連付けられたパラメータを有し、この値は、DLS(P)命令によってレジスタLRにコピーされる。レジスタLRは、プログラム・コールの復帰時に使用されることになる復帰アドレスを格納するためのリンク・レジスタとしても使用されるレジスタであってよく、したがって、DLS(P)命令を実行する前に、このリンク・レジスタの内容をプログラム・スタックに保存することが望ましい場合がある。ループ開始命令DLS(P)は、ゼロ・オーバヘッドのループの終わりのプログラム・アドレスを示す、関連付けられたパラメータ「loopend」も有し、ループ終了命令DLEの直後の命令である。
【0049】
ループ開始命令DLS(P)に続いて、プログラム・ループ本体を形成する、例えば、I0、I1、I2、I3といった1つ又は複数のプログラム命令がある。プログラム・ループ本体は、短く且つ単純、又は長く且つ複雑であってよく(例えば、さらなるループ又は分岐を収めてよく)、状況次第で単一の命令しか含まなくてもよいということが理解されよう。実際には、プログラム・ループ本体自体の長さが短くなれば、プログラム・ループ本体を通るそれぞれの工程に対して従来のループ制御命令を実行することによるオーバヘッドが大きくなるので、短いプログラム・ループ本体は、ゼロ・オーバヘッドのループの使用から相対的により多くの恩恵を受ける。
【0050】
プログラム・ループ本体の終わりに、ループ終了命令DLEがある。このループ終了命令DLEは、ループ開始命令DLS[P]の後の命令のメモリ・アドレスを指定するloopstartパラメータを、ループ終了命令DLEの挙動を制御するためのパラメータとみなす。DLE命令は、まだ行われていない繰返しの数を示す、レジスタLRに格納された値をチェックする。プログラム・ループ本体を通る最終の工程が行われると、処理は、ループ終了命令DLEに続くプログラム命令、即ち命令Izを実行するために進む。これは、命令Izに直接的に分岐することによって、又はNOPとしてDLE命令を最初に実行し、次にIzを実行することによって行われてよい。
【0051】
図6の右側部分は、プログラム・ループ本体を通るどの工程の間に、どの命令が実行されるかを概略的に示す。プログラム・ループ本体を通る第1の工程において、ループ開始命令DLS[P]とループ終了命令DLEの両方が実行される。ループ開始命令とループ終了命令の両方を実行すると、ループ制御データは、システムのハードウェアによってセットアップされ、格納される。これは、このようなループ挙動が途切れずに進むことが許されるときに、ループ開始命令DLS[P]又はループ終了命令DLEを別々に実行する必要なく、プログラム・ループ本体を通るその後の工程が行われることを可能にする。これは、実行されるプログラム命令をなぞる実線、及びプログラム・フローを飛び越えること/分岐することを示す点線で
図6の右側部分に示される。図示されるように、プログラム・ループ本体を通る最終の工程の終わりで、プログラム実行ポイントは、ループ終了命令DLEを実行せずに、プログラム・ループ本体の最終の命令I3から、ループ終了命令に続く命令Izに飛び越えることができる。他の実施例において、プログラム・フローはループ終了命令DLEを通ることができるが、このアクションは、このポイントまでに、リンク・レジスタLRがプログラム・ループ本体の必要とされた繰返しのすべてが行われたことを示す値を格納しているとき、単に抑制されるだけである。
【0052】
プログラム・ループ本体の終わりにおけるループ終了命令DLEの場所、並びにループ制御データをセットアップ及び格納する際のこのアクションは、例外の発生などのために、プログラム・ループ本体を通る工程が割り込まれ、ループ制御データが無効化される場合、プログラム・ループ本体による処理が再開されるときに、必要なループ制御データを復元するためにループ終了命令DLEが再び実行され得るという結果になる。さらに具体的には、ループ制御データ(マイクロアーキテクチャ状態)は、例外の発生時に保護される必要がなく、プログラム・ループ本体の繰返しのうちのいくつが行われたかを示すリンク・レジスタ値LR(アーキテクチャ状態)が維持される。プログラム・ループ本体の途中で実行が再開すると、(割込が発生しなかった場合にループ終了命令の実行が抑制されたとしても、)ループ終了命令は再び実行され、プログラム・ループ本体を通るその後の工程において、ゼロ・オーバヘッドのループ挙動が再開されるように、ループ制御データを復元する役目をし、このようなその後の工程に対する、ループ終了命令の実行が回避されることが可能である。
【0053】
上述のように、ゼロ・オーバヘッドのループ挙動を制御するループ制御データは、ゼロ・オーバヘッドのループ処理中に例外/割込が発生すると無効にされることがある。他のイベントは、ループ制御データの無効化をトリガすることもできるが、少なくともいくつかの例において、このループ制御データはその後、処理が再開されるときに復元される。ループ制御データの無効化をもたらす可能性のあるイベントの実例は、処理回路がリセットされることと、ループ制御回路又はループ終了命令が、プログラム・ループ本体のさらなる繰返しが必要とされないことを識別することと、例外がエンターされることと、例外がテール・チェーンし、それによって現在の例外より前の状態を復元させずに、処理が現在の例外の処理から次の例外の処理に直接的に進むことと、所定のイミディエート宛先アドレスの範囲より大きい分岐命令の実行と、例外から復帰することと、装置の命令キャッシュが無効化されるようにする命令の実行と、ループ制御データのキャッシングをディスエーブルする命令の実行と、分岐予測器又は分岐予測をディスエーブルする命令の実行(修正された分岐予測器は、ループ制御回路の役割を部分的に果たすために使用されることがある)と、プログラム・ループ本体内部の分岐が、プログラム・ループ本体の冒頭の命令とループ終了命令の間にないアドレスを宛先にしていると処理回路が決定することと、セキュア・モードの動作と非セキュア・モードの動作を切り替えることと、ループ制御データを無効化するために特定の実装形態が使用できる1つ又は複数の実装形態を定義した条件と、を含む。
【0054】
図7は、
図6に示された実例のゼロ・オーバヘッドのプログラムのループ挙動を行うときの処理パイプラインの様々な処理ステージの内容を概略的に示す。この実例において、処理パイプラインは、6つのステージ、即ちフェッチ、復号、及び実行を含む。
図6に示されたプログラム命令は、この処理パイプラインに供給/フェッチされる。図示されるように、プログラム・ループ本体を通る第1の工程は、ループ開始命令DLS[P]とループ終了命令DLEの両方の実行を含む。したがって、第1の工程において実行される6つの命令(DLS(P)、I0、I1、I2、I3、及びDLE)がある。プログラム・ループ本体を通るその後の3つの工程において、ループ開始命令DLS[P]及びループ終了命令DLEの実行は必要とされず、代わりにループ制御データの制御下で動作するループ制御回路は、行われたプログラム・ループ本体を通る工程の数を追跡するため、プログラム・ループ本体内部の最後の命令がフェッチ・ステージに入れられたときを識別するため、及びプログラム・ループ本体の冒頭の命令に分岐して戻るときに使用されることになる分岐ポイントを識別するために使用されてよい。この実例において、命令I0はプログラム・ループ本体の冒頭の命令であり、命令I3はプログラム・ループ本体内部の最後の/最終の命令である。プログラム・ループを通るゼロ・オーバヘッドの工程のそれぞれにおいて、4つのプログラム命令(I0、I1、I2、及びI3)が、処理パイプラインを流れる。プログラム・ループ本体を通る第4の工程における最終の命令I3の実行の後、リンク・レジスタLRに格納されたループ繰返しカウンタは、必要とされた繰返しすべてが行われたことを示し、したがって最終の命令I3に到達すると、ループ制御回路は、冒頭の命令I0に戻る分岐をトリガせず、代わりにループ終了命令DLEの直後の命令Izへの分岐をトリガする。他の実施例において、ループ制御回路は命令Izへの分岐をトリガせず、代わりにプログラム・フローがDLEに続くことを可能にする。リンク・レジスタLRに格納された繰返しカウンタは、これ以上の繰返しが必要とされないことを示すので、DLE命令はどのような動作も行わず、プログラム・フローは命令Izを続ける。このアプローチは、いくつかの実施例において、さらに実装しやすくする可能性があり、ループの終わりに到達すると、もう1つのDLE命令しか実行されないので、パフォーマンスのインパクトが最小になる可能性がある。
【0055】
図8は、命令パイプラインのフェッチ・ステージ1002と関連するループ/分岐制御回路1000の1つの実例の形及び動作を概略的に示す。ループ/分岐制御回路は、ループ/分岐制御キャッシュ1004に格納されたループ/分岐制御データによって少なくとも部分的に制御される。他の場所で説明されたゼロ・オーバヘッドのループ挙動及び分岐見込み挙動は、同じ又は類似の回路を使用して制御され得るということが理解されよう。例えば、(ゼロ・オーバヘッドのループ挙動がアクティブであることを示す)DoLoopフラグがセットされず、まだループ/分岐制御データが有効であるとマークされる状態にシステムがあるとき、分岐見込み挙動は、ループ制御データ(又はこれに類似のデータ)及びループ/分岐制御回路1000使用してサポートされてよい。
【0056】
図8及びこの使用に戻ると、ゼロ・オーバヘッドのループ挙動を制御する際に、ループ制御キャッシュ1004は、ループ終了命令DLEの結果としてループ制御データをロードされる。ループ終了命令は、
図1に示されたループ終了復号回路123によって復号される。データは、分岐見込み命令BFの実行によってこのキャッシュ1004にロードされてもよく、このデータは、
図1に示された分岐見込み命令復号回路122で復号される。
【0057】
ループ制御キャッシュ1004は、いくつかの実施例において、障害シンドローム・レジスタ、即ち障害の発生時に障害シンドローム・データを格納するレジスタとしても働くストレージを再使用することができる。このようなレジスタは、レジスタに格納された何らかのデータが有効な障害シンドローム・データであるかどうかを示す、レジスタと関連付けられた少なくとも1つの有効ビットfvを有することができる。ループ/分岐制御回路1000並びにループ開始及びループ終了命令のアクションは、当該のレジスタがループ制御データ又は分岐見込みデータを代わりに格納しているときに、障害シンドローム・データと関連付けられたこのような障害レジスタの有効ビットfvを無効状態にセットするように働く。いくつかの実施例において、ゼロ・オーバヘッドのループ挙動が進むことを可能にする障害シンドローム・データの保護がより重要であるとみなされるということがあり得、したがって偽のシンドローム・レジスタのいずれかが、障害レジスタの有効ビットfvによって示されるような障害シンドローム・データを格納している場合、(ループ開始及びループ終了命令の存在はまだ、これらの明示的な実行によって、プログラム・ループ本体の繰返しの正確な数が行われることを保証するが)ループ終了命令の復号は、このような有効な障害シンドローム・データが上書きされるのを許可せず、ゼロ・オーバヘッドのループ挙動は抑制される。
【0058】
ループ制御回路1000は、診断/分析のために、トレース・データを形成するために使用されることになるトレース出力も生成する。ループ制御回路は、プログラム・ループ本体を通る第1の工程の後のゼロ・オーバヘッドのループの動作中に、ループ終了命令の実行が回避され、明示的に(別々に)行わなかったとしても、ゼロ・オーバヘッドのループを実行するときに、ループ/分岐制御回路1000の制御下で、ループ終了命令の実行時、又は冒頭の命令に分岐して戻る制御時に、ループ終了命令DLEの実行に対応するトレース出力を生成する。このループ終了命令が、一般に言われている意味で明示的に/別々に実行されなかったとしても、ループ終了命令の実行に対応するイベントを示すトレース・データを含むトレース出力を提供することは、診断及び分析操作を行うときに、トレース出力をさらに追いやすくし、理解しやすくする。
【0059】
ループ制御キャッシュ1004に格納されたループ制御データは様々な形を有し、ゼロ・オーバヘッドのループ挙動及び分岐見込み挙動を制御するために使用される様々なタイプのデータを含むことができる。具体的には、ループ制御データは、例えば、(このアドレスを直接的に又はアドレスから冒頭の命令への所定のオフセットによるアドレスを介して示す)冒頭の命令のアドレスを示すループ開始データと、ループ終了命令に直接的に進むプログラム・ループ本体の最後の命令とプログラム・ループ本体の冒頭の命令との間の間隔を示すループ開始オフセット・アドレスと、ループ終了命令に直接的に進むプログラム・ループ本体の最後の命令のアドレスを示すループ終了データと、ループ終了命令に直接的に進むプログラム・ループ本体の最後の命令に到達する前の、まだ処理されていない命令の数を示すループ残存命令データと、ループ終了命令に直接的に進むプログラム・ループ本体の最後の命令に到達する前に、まだ処理されていないプログラム命令を格納するプログラム記憶メモリの場所の数を示すループ残存サイズ・データと、例えば、前述のように無効化イベントが発生しなかったことといった、ループ制御データが有効であることを示すループ制御有効データvと、のうちの1つ又は複数を含むことができる。
【0060】
いくつかの実例の実施例において、ループ制御キャッシュ1004は、複数のエントリを収めることができ、その結果、複数の動作が一斉にサポートされることが可能である。ループ制御キャッシュ1004の内部のこれらのエントリのそれぞれはさらに、ループ制御キャッシュ1004が現在、有効なループ制御データを格納しているか否かを示す、ループ制御キャッシュ1004と関連付けられた有効ビットvを有する。ループ制御データに対するこの有効ビットvは、上述の様々な無効化イベントのうちの1つの発生時に無効であることを示すようにクリアされてよい。この実例の実施例において、ループ制御キャッシュ1004は、2つのエントリを有するものとして示される。これは、ゼロ・オーバヘッドのループと分岐見込み挙動の両方が一斉にサポートされることを可能にする。他の実施例において、ただ1つのエントリ対して充分なストレージがループ制御キャッシュ1004の内部に設けられてよく、したがってゼロ・オーバヘッドのループ挙動又は分岐見込み挙動のうちのただ1つが、所与の時間にサポートされることが可能である。ループ制御キャッシュ1004は、分岐制御キャッシュとしても働くということが理解されよう。同じ2重の関数が同様に、ループ制御回路1000によって提供される。
【0061】
図8に示されるように、ループ制御回路1000は、命令キャッシュ1006からフェッチ・ステージ1002にロードされるプログラム命令Iと関連付けられたメモリ・アドレスを監視する役目をする。ロードされたプログラム命令のアドレスが、ループ制御キャッシュ104に格納されたループ制御データによって、ゼロ・オーバヘッドのループのプログラム・ループ本体内部の最後の命令として示されるプログラム命令のアドレスにマッチする(又は例えばこのアドレスからの所定のオフセットといった所定の関連性を有する)とき、ループ制御回路1000は、(リンク・レジスタLR内の値によって示されるような、)プログラム・ループ本体を通ってシステムによって行われることになる残りの工程があるか否かを決定し、このような残りの工程がある場合、プログラム・ループ本体の冒頭の命令への分岐をトリガする。このようにして、ループ制御キャッシュ1004に格納されたループ制御データの制御下でふるまうループ制御回路1000は、さらなるループの繰返しが必要とされるかどうかを決定し、さらなるループの繰返し(処理されることになる所与の要素に対するプログラム・ループ本体を通る工程)が必要とされる場合、ループ終了命令に先行するプログラム命令又はプログラム・ループ本体によって指定される処理動作を行うように処理回路(命令パイプライン及び処理パイプラインによって実行される命令を行うシステムの他の要素)を制御することができるが、(ループ終了命令自体が、第1の工程以外のプログラム・ループ本体を通る工程において別々に実行される必要がなく、ループ制御データが生じない無効化イベントを必要としない)ループ終了命令を除外する。
【0062】
図9は、ループ制御回路1000の1つの実例の形式が、プログラム・ループ本体の冒頭の命令への分岐が必要とされるかどうかを決定するために、どのようにループ制御データの部分を使用して、フェッチ・ステージ1002によってフェッチされることになる次の命令(命令メモリ・アドレス自体でなくてもよく、例えばこのアドレスからの固定オフセットを有してよい)を、関連付けられた現在のプログラム・カウンタの値に依存するデータと比較することができるかを概略的に示す。さらに具体的には、ループ制御データは、ループ終了命令のメモリ記憶アドレスを示すビットの真部分集合を含むことができる。例えば、ループ制御データは、メモリ記憶場所に対応するバイトでアドレス指定されたメモリ・アドレスを、通常の32ビットのうちのビット2からビットxまで拡張するビットのフィールドを含むことができる。これは、フェッチ・ステージ1002によって供給される、フェッチされることになる次の命令と関連付けられたメモリ・アドレス内の対応するビット位置と比較される。この実例の実施例におけるプログラム命令は32ビットのプログラム命令であり、これは、2つの最下位ビット1:0が不変になるように、バイトでアドレス指定されたメモリ・アドレス空間の内部で揃えられ、したがってループ開始アドレスに分岐する要件を識別するために比較される必要はない。
図9の実例は、プログラム・ループ本体内部の最後の命令がフェッチ・ステージ1002にフェッチされていること、及びそれに応じた、ループ開始アドレス、即ちプログラム・ループ本体の冒頭の命令に分岐する要件を、ループ制御回路1000が識別できるただ1つの方式であることが理解されよう。分岐を行うこのような要件は、プログラム・ループ本体を通って進行される間にフェッチされる命令の数を数えること、プログラム・ループ本体の命令をフェッチする際に通った記憶場所の数を数えること(この技法は、可変長命令を用いる実施例における使用に適していることがある)、又は他の技法などの、さらなる方式で実現されることが可能である。
【0063】
図10Aは、ループ開始命令の復号の際の挙動を概略的に示す流れ図である。ステップ2000において、処理は、ループ開始命令DLS(P)がループ開始命令復号器回路によって復号されるまで待機する。ステップ2002は、パラメータRnによって指定された、レジスタに格納された繰返しカウントが、ゼロに等しいか否かを決定する。繰返しカウントがゼロに等しい場合、これは、プログラム・ループ本体を通る工程(繰返し)が必要とされないことを示し、処理はステップ2004に進み、ここで、ループ終了命令DLEに続く命令への分岐が行われるか、又はライト・バック及びこれらの命令からの他の副次的作用を抑制することなどによって、遭遇される命令のそれぞれを抑制しながらプログラム・ループ本体が横断される。
【0064】
ステップ2002における決定が、繰返しカウントがゼロでないというものである場合、処理はステップ2003に進み、ここで、ステップ2000で復号された命令が、述語的ループ開始命令DLSPであるかどうかについての決定が行われる。はいの場合、処理はステップ2006に直接的に進む。いいえの場合、ステップ2005は要素サイズを十分なベクトル・サイズにセットし、その後処理はやはりステップ2006に進み、ここで、プログラム・ループ本体を通る1つの工程の中で処理されることが可能なベクトル要素の最大数を示す値Nmaxが生成される。他の実施例において、Nmaxの計算は、DLS(P)命令の一部として行われる必要はなく、例えば、
図13に示されるようなDoLoopの中で処理する命令の一部として行われてよい。この値Nmaxは、ループ開始命令によって指定されたベクトル要素サイズと比較される、処理パイプラインの処理回路のデータ幅に依存している。Nmaxの値は、ゼロ・オーバヘッドのループ挙動の実行の全体を通じて静的であるので、生成された値は明示的に格納される必要はなく、必要とされたときにベクトルの挙動を制御するためにしか使用されない。
【0065】
ステップ2008は、DoLoopの状態が有効であり、システムが現在、DoLoopを処理している(即ち、ゼロ・オーバヘッドのループ挙動がアクティブである)ことを示すフラグをセットする役目をし、ループ繰返しカウントは、リンク・レジスタLRにもコピーされ、ループ制御回路によって使用される。処理は次にステップ2010に進み、ここで、プログラム・ループ本体の冒頭の命令のフェッチ及び実行への前進が行われる。
【0066】
図10Bは、ループ開始命令DLS(P)を概略的に示す。これは、命令をDLS(P)命令として識別するオペコード・フィールドENCを含む。(リンク・レジスタLRに移送されることになる)繰返しカウントR
n、ループ終了命令が置かれる場所の指標(前述のように、分岐宛先アドレスを指定するBFに関する様々な方式で指定されてよい)、及び要素サイズの値を収めるレジスタを指定するパラメータ・フィールドも含まれる。要素サイズの値が、データ経路の十分なベクトル・サイズにセットされる場合、命令は、非述語的、即ちDLS命令として扱われる。要素サイズが、より小さい場合、これは、ループが、指定されたベクトル・サイズの要素を使用してベクトル化され、述語的ループ開始命令として処理されるはずであることを示す。
【0067】
ベクトル要素サイズVEwidthは、浮動小数点データの値がアクセス可能なときにアクセス可能であり、浮動小数点データの値がアクセス不能なときにアクセス不能な、浮動小数点制御データ・レジスタに格納される。浮動小数点データの値がアクセス可能なとき、ループ開始命令から復号されるようなベクトル要素サイズVEwidthは、浮動小数点制御データ・レジスタに格納され、データ経路内のベクトル化を制御する。ループ開始命令が非述語的である場合、ベクトル要素サイズは、ベクトル・レジスタ幅VRwidthにセットされる。
【0068】
例えば、浮動小数点状態が初期化されていなかったときのように、浮動小数点データの値がアクセス可能ではないとき、浮動小数点制御データ・レジスタからVEwidthを読み込もうとする試みは、(同様にアクセス不能な)浮動小数点制御レジスタに現在、格納されているVEwidthの任意の値に依存しないVRwidthの値を返す。浮動小数点の値が、ループの実行の途中でアクセス可能になる(初期化される)と、任意の既存の浮動状態は(例えば、遅延状態(lazy state)保存メカニズムによって)保存され、新しい浮動小数点状態が初期化され、(特定の実装形態に組み込まれた)浮動小数点制御データ・レジスタに格納されたVEwidthの値をVRwidthに初期化することを含む。ループ内のベクトル化は、それに応じて変更されない。
【0069】
図11は、ループ終了命令DLEを復号する際のアクションを概略的に示す流れ図である。ステップ2012において、処理は、ループ終了命令DLEがループ終了命令復号器によって復号されるまで待機する。ステップ2014は次に、DoLoopフラグが現在、セットされているか否かを決定する。DoLoopフラグが現在、セットされていない場合、これは、ゼロ・ループ挙動が現在、アクティブでないことを示し、処理はステップ2016に進み、ここで、ステップ2013においてループ終了命令を無演算命令(NOP)として扱うことなどによって、ループ終了命令の実行は抑制される。
【0070】
ステップ2014における決定が、DoLoopフラグがセットされているというものである場合、ステップ2018は、ループ制御データをループ制御キャッシュ1004に格納する役目をする。このループ制御データは、例えば、冒頭の命令の命令アドレスを示すデータ、DLE命令のメモリ記憶アドレスのビットに対応する(固定命令の配列のための任意の不変のビットを除く)最下位ビットのフィールド、及びループ制御データが有効であることを示す有効ビットを含むことができる。ループ制御データの他の形式も、前述のように格納される。
【0071】
ステップ2020は、現在の繰返しカウントが、DLS(P)ループ開始命令に応答して以前に生成されたNmaxの値以下であるか否かを決定する。繰返しカウントがNmaxの値以下である場合、これは、ループ終了命令に到達した現在のプログラム・ループ本体を通る工程が、プログラム・ループ本体を通る最後に必要とされた工程であることを示し、したがって処理はステップ2016に進む。ステップ2020における決定が、繰返しカウントがNmaxの値以下ではないというものである場合、処理はステップ2022に進み、ここで、繰返しカウントはNmaxまで減らされる。
【0072】
ステップ2024は次に、プログラム・ループ本体の冒頭の命令への分岐を行う。
【0073】
図12は、ループ制御回路1000のアクションを概略的に示す流れ図である。ステップ2026において、ループ制御回路1000は、ループ制御データが現在、有効であるとマークされているか否かを決定する。ループ制御データが現在、有効であるとマークされている場合、処理はステップ2028に進み、ここで、パイプラインに供給された(即ちフェッチ・ステージ1002にフェッチされた)最新の命令が、ループ制御データとマッチするフェッチされることになる次の命令のアドレスによって示されるような、プログラム・ループ本体内部の最後の命令であるか否かについての決定が行われる。プログラム・ループ本体の中のこのような最後の命令のフェッチが検出されると、処理はステップ2030に進み、ここで、繰返しカウントが現在、値Nmax以下であるか否かについての決定が行われる。繰返しカウントがNmaxの値以下である場合、処理はステップ2032に進み、ここで、DoLoopフラグはクリアされ、ループ制御データの有効ビットvはクリアされる。これは、ゼロ・オーバヘッドのループ挙動が終了されることを示す。ループ制御回路1000による処理はその後、このゼロ・オーバヘッドのループ挙動の事例を終了する。ループ終了命令は次に、
図11に関連して議論されたように処理され、例えば、このようなループ終了命令DLEに関する分岐が行われる。
【0074】
ステップ2030における決定が、プログラム・ループ本体を通る工程の数を追跡する現在の繰返しカウントが値Nmax以下ではないというものである場合、ステップ2034は、Nmaxまで繰返しカウントを減らす役目をする。ステップ2036は次に、プログラム・ループ本体の冒頭の命令に分岐し、プログラム・ループ本体を通る次の工程が開始される。
【0075】
図13は、ゼロ・オーバヘッドのプログラム・ループ本体内部の命令の実行の制御、さらに具体的には、これがどのように述語を伴うことができるかを概略的に示す流れ図である。ステップ2038は、実行することになる命令があるかどうかを決定する。ステップ2040は次に、ゼロ・オーバヘッドのループのプログラム・ループ本体内部でこのような実行が行われることを示すDoLoopフラグがセットされているか否かを決定する。DoLoopフラグがセットされていない場合、命令の処理はステップ2050に正常に進む。ステップ2040における決定が、DoLoopフラグがセットされているというものである場合、ステップ2042は、Nmaxの値が残りの繰返しカウントより大きいかどうかを決定する。Nmaxの値が残りの繰返しカウントより大きくない場合、ステップ2044は、実行されることになるプログラム命令のために使用されることになるアクティブなレーンの数をNmaxとしてセットする。アクティブなレーンのこの数は、実際には、ステップ2048で実行されることになる命令、又はステップ2048若しくは2050で行われた以前の命令の中で符号化され得るさらなる述語の結果として減らされることがある。ステップ2042における決定が、Nmaxの値が残りの繰返しカウントより大きいというものである場合、ステップ2046は、命令のために使用されることになるアクティブなレーンの数を残りの繰返しカウントの値としてセットする。これは、このようなレーンの中で処理される必要があるベクトル要素がないときに処理するレーンのアクティブな使用を回避する。ステップ2048は次に、アクティブなレーンのセットされた数を使用して、ステップ2038で実行を必要とするものとして識別された命令を行う。
【0076】
命令のベクトル化されたパフォーマンスは、行われている命令のタイプに依存してよい。さらに具体的には、選択されたアクティブなレーンの数によって示される述語が実現される手法は、実行されている命令の性質、及び当該のシステムのデータ経路の性質によって変化してよい。例えば述語は、必要とされないときに、データの述語によって示された(例えばバイトが可能にする)データ・レーンに対するライト・バックを抑制することによって適用されてよい。このような場合、述語の値を生成するときに適用される要素サイズは、処理命令によって適用される要素サイズとは異なることがある。したがって、より小さい要素サイズにライト・バックを抑制することは、加算がライト・バックされることなどの、単一の算術演算の部分だけを生じることがある。容易に分割され得ない命令の場合、適用される述語はバイト・レベルで指定されてよいが、行われるデータ処理のワードの全体を断定するのに役立つ最下位バイトなどの、バイトの述語の値のうちのただ1つに依存して実装される。
【0077】
上述のように、ループ制御回路1000は、プログラム・ループ本体の1つのベクトル命令に応答して処理されることになる、いくつかのベクトル要素を示す所定の状態レジスタに格納された制御パラメータに依存してループ・カウンタのアップデートを制御することができる。例えば制御パラメータは、ループによって処理される1つのベクトル要素のサイズを示すVEwidthであってよく、これは、ループの繰返し当たりの処理されることになる要素の数が決定されることを可能にし、その結果、ループ・カウンタは、ループ本体の横断によって処理された、いくつかのベクトル要素によって、それぞれの繰返しの際にアップデートされてよい。VEwidthは、ループの処理のために定義されるような、1つのベクトル要素サイズであるということに留意されたい。別々のベクトル要素サイズIVEwidthは、ループ内のベクトル命令のパラメータのうちの1つとして指定されてもよく、全体としてループに対して指定されたものとしてVEwidthとマッチすることが多いが、同じである必要はない。全体としてループ及びループ内の命令に対して別々の要素サイズが指定されることを可能にすることは、ループ内で処理されることになる1つの「要素」が、ベクトル命令の様々なベクトル要素に割り振られる複数の構成要素を実際に収める場合をサポートするのに有用なことがある。例えば複素数は、実数及び虚数の構成要素を有してよく、1つ又は複数の数のうちの実数及び虚数の構成要素が、ベクトルの代替要素に割り振られることを想定する複素数の算術ベクトル命令がサポートされてもよい。この場合、個別のベクトル命令が32ビットの要素を指定するとしても、例えば、これが実数と虚数両方の構成要素を含むので、全体としてのループが、1つの「要素」が64ビットを有するとみなすことができる。したがって、本明細書においてVEwidthへの言及は、ループ制御回路から分かるように、ベクトル要素サイズを指し、これは、ループ内のベクトル命令によって使用される実際の要素サイズと必ずしも同じではない。
【0078】
ループの最終の繰返しにおいて(Nmax-loopcount)ベクトル・レーンをマスクするループ末端述語は、所定の状態レジスタに格納されたパラメータに依存することもある。例えば、ループ末端述語は、述語が必要とされるかどうかを示すフラグに依存することがあり、述語が必要とされると、最終の繰返しにおいて行われることになるアクティブなレーンの数は、(リンク・レジスタに格納されたループ・カウンタ「loopcount」と組み合わせて)所定の状態レジスタに格納されたVEwidthから導出可能なである。ループの終わりで、ループに続くベクトル命令が末端の述語がなくても動作するように、適用されている任意のループ末端述語は、所定の状態レジスタ内のフラグをリセットすることによってディスエーブルされてよい。一方、述語が必要とされるかどうかは、明示的な述語フラグが必要とされることがないように、loopcount及びVEwidthから直接的に決定されてよい。ここで、ループ末端述語は、Nveが、プログラム・ループ本体のいくつかの繰返しの間に処理されることになる(サイズVEwidthの)ベクトル要素の総数であり、Nmaxが、プログラム・ループ本体の1つの繰返しの中で処理されることになる(やはりサイズVEwidthの)ベクトル要素の最大数である場合に、Nve/Nmaxが整数でないとき、ループ制御回路1000が、前記繰返しの中で処理されるベクトル要素の総数がNveになるように、前記繰返しの1つ又は複数の間、前記ベクトル処理レーンの1つ又は複数の中の処理を少なくとも部分的に抑制するという機能性を指す。以下の実例は、ループ末端述語が最終のループの繰返しに適用されるケースを説明するが、他の実装形態が、同じ結果を示すように、初めの方のループの繰返しにおいてループ末端述語を適用してもよい。サイズVEwidthの1つの要素の述語は、上述のように、VEwidth>IVEwidthのケースにおいて、ループ内の個別のベクトル命令に対してマスクされることになるサイズIVEwidthの2つ以上の要素を必要とすることができるということに留意されたい。
【0079】
しかし、所定の状態レジスタは、常にアクセス可能というわけではないレジスタであってよい。例えば、所定の状態レジスタは、例えば、
図1に示された浮動小数点レジスタ110のうちの1つである浮動小数点制御レジスタ1110(
図8参照)といった、浮動小数点コンテキスト・データと関連付けられたレジスタであってよい。コンテキスト・スイッチにおいて保存される必要がある状態の量を減らすために、浮動小数点演算を必要としない処理は、デフォルトで浮動小数点状態を割り振られず、制御レジスタに格納された浮動小数点状態アクセス可能性フラグ(又は遅延状態保存ステータス・フラグ)は、浮動小数点コンテキストが現在のプロセスにアクセス可能であるかどうかを示すことができる。コンテキスト・スイッチにおいて、浮動小数点コンテキストが現在、アクセス可能でないことを状態アクセス可能性フラグが示す場合、浮動小数点コンテキストは、メモリに保存される必要がない。浮動小数点コンテキストが現在、アクセス可能でないときに浮動小数点コンテキストを必要とする命令に応答して、浮動小数点レジスタに格納された以前の任意のコンテキスト・データをメモリに保存するために遅延状態保存動作が行われ、次に浮動小数点コンテキスト・レジスタは、現在のプロセス、及び浮動小数点コンテキストが現時点でアクセス可能であることを示すためにアップデートされた状態アクセス可能性フラグにアクセス可能になる。
【0080】
所定の状態レジスタがアクセス不能になり得る別の状況は、現在の特権レベル又はプロセスがこのレジスタにアクセスするのを禁止するアクセス許可が定義された場合である。例えば、いくつかのシステムは、所定の状態レジスタ(例えば浮動小数点レジスタ)を含むレジスタの特定のサブセットへのアクセスを制御するためのアクセス許可データをチェックするため、及び前記アクセス許可データに違反するレジスタのサブセットのうちの1つへのアクセスが検出されるときに障害条件をトリガするために、許可チェック回路1008(
図8参照)を提供することがある。レジスタのサブセットを、障害をトリガしたプロセス/特権レベルにアクセス可能にするようにアクセス許可を変更する前に、及び非特権プロセスに処理を返す前に、障害が、障害をトリガした非特権プロセスから隠されることが可能なように、障害は、アクセス許可を見直し、必要ならレジスタに現在、格納されている特権データをメモリに保存するように、オペレーティング・システムをトリガすることができる。
【0081】
必要とされるベクトル要素幅VEwidthをセットアップするために、ループの初めに浮動小数点コンテキストがアクセス可能になるとしても、現在のプロセスのコンテキストが無効化されることに至る例外がループ中に発生し、例外に続くこのプロセスのコンテキストの復元の際に、浮動小数点コンテキストは、復元されるプロセスと関連付けられた命令によって実際に必要とされるまで復元されない可能性があるので、ループの終わりに浮動小数点コンテキストが依然としてアクセス可能であることが想定されることはない。
【0082】
したがって、ループの終わりに、ループ・カウントの減少及び/又はループ末端述語を制御するために使用されるパラメータを格納する所定の状態レジスタがアクセス可能になることはない。ループ末端述語情報をリセットできるように、ループの終わりに遅延状態の保存又は障害条件をトリガして、所定の状態レジスタがアクセス可能になることを可能にするための機能を提供することが期待される。しかし、このアプローチは、特定の命令アドレスにおいてこれらの動作がトリガされるということを、障害又は状態保存を処理するためのアーキテクチャのメカニズムが想定できるときに、命令によってトリガされずにループ制御回路1000から遅延状態保存動作又は障害条件をトリガすることが望ましくないことが多いので問題となることがある。パフォーマンスを改善するために、(ループ制御データが有効なときに、さらなるループの繰返しが必要とされないことを検出することに応答して、ループ制御回路が、前記ループ終了命令の後の命令からプログラムの実行を継続するように処理回路を制御するように構成されるように、)ループの最終の繰返しにおいて、ループ終了命令の実行を完全に省略することが好ましいことがある。ループ終了命令に先行する又は続く命令に応答して、障害条件又は状態保存をトリガすることは、妥当ではないことがある。したがって、必要とされるときに浮動小数点コンテキストをアクセス可能にするために遅延状態保存又は障害条件をトリガすることに対して、ループの終わりに妥当な命令がないことがある。同様にループ制御回路1000は、命令パイプラインのフェッチ・ステージと関連付けられることがあり、このステージは通常、レジスタ・アクセスをトリガするための経路を有さないので、フェッチ・ステージが状態保存をトリガすることを可能にすることは、回路の面積の観点から困難且つ高価である。
【0083】
これらの課題は、ループ終了命令に応答して、遅延状態保存動作又は障害条件を代わりにトリガすることによって対処されることが可能であり、これは、ループの一番初めの繰返しにおいて、又は例外が発生した繰返しの終わりに実行される(例外はループ制御データを無効化するので、ループ終了命令は、この繰返しの終わりに再実行される)。したがって、所定の状態レジスタを含むレジスタのサブセットがアクセス不能なときにループ終了命令に応答して、ループ終了命令復号回路は、レジスタの前記サブセットに格納された状態データのメモリへの保存をトリガし、レジスタの前記サブセットをアクセス可能にするために、状態保存制御信号を生成することができる。ループの完了時ではなく、ループ終了命令に応答して状態保存演算をトリガすることによって、浮動小数点状態がアクセス不能になった場合の単なる予防策として、最終のループの繰返しの終わりにループ終了命令を実行することは必要ではなく、パフォーマンスが改善されることを可能にする。同様に、アクセス許可データが、所定の状態レジスタを含むレジスタのサブセットへのアクセスを禁止する場合、ループ終了命令に応答して、ループ終了命令復号回路は、レジスタのサブセットへのアクセスをトリガする制御信号を生成することができる。したがって、許可チェック回路1008によって、アクセスが現在、許可されていない場合、障害は、ループ終了命令を実行するときに生成され、いずれかの影響を受けたデータがメモリに保存されて、レジスタのこのサブセットの中で無効化されると、必要な許可をグラントするためにオペレーティング・システムが介入することを可能にする。ループ終了命令に応答したこれらの動作は、ループ・カウンタの減少を制御するために、ループ制御回路1000がVEwidthパラメータにアクセスできることも保証する。
【0084】
ループの最終の繰返しの終わりで、プログラム・ループ本体の繰返しに続いて、さらなるループの繰返しが必要とされないことを検出することに応答して、ループ制御回路は、前記ベクトル処理レーンの前記1つ又は複数における処理の抑制をディスエーブルする。例えば、ループ制御回路は、所定の状態レジスタに格納された制御パラメータに依存して前記ベクトル処理レーンの1つ又は複数における処理の抑制を制御することができ、プログラム・ループ本体の繰返しに続くさらなるループの繰返しが必要とされないことを検出することに応答して、ループ制御回路1000は、所定の状態レジスタがアクセス可能であるかどうかを決定することができ、所定の状態レジスタがアクセス可能であると決定されると、所定の状態レジスタに格納された制御パラメータをアップデートすることによって、前記ベクトル処理レーンの1つ又は複数における処理の抑制をディスエーブルするために述語ディスエーブル化制御信号を生成する。ループ制御回路1000は、所定の状態レジスタがアクセス不能であると決定されるときに、述語ディスエーブル化制御信号の生成を抑制する。
【0085】
即ち、ループ制御回路1000は、所定の状態レジスタが既にアクセス可能なときに、所定の状態レジスタ内のパラメータをリセットして、ループ末端述語をディスエーブルすることしか行わない。所定の状態レジスタがまだアクセス可能でないとき、レジスタがアクセス不能になることに至る可能性があるイベント(例えば、例外、障害、又はコンテキスト・スイッチ)が、ループ制御キャッシュ1004からのループ制御データも無効化するときに、ループ終了命令は遭遇される。したがって、ループ制御回路1000が遅延状態保存又は障害トリガ動作をトリガする必要はなく、遅延状態保存又は障害トリガ動作は、ループの終わりに必要に応じて、ループ終了命令に応答して、ループ終了命令復号回路123によって代わりにトリガされる。
【0086】
上記に示された理由のために、ループ終了命令が、要素幅及びループ末端述語制御情報を指定する制御パラメータを格納する所定の状態レジスタがアクセス可能であるかどうかに関するチェックをトリガすること、並びにレジスタがアクセス不能な場合に障害条件又は遅延状態保存をトリガすることが有用である。いくつかの実装形態は、必要とされた所定の状態レジスタがアクセス不能なときに、ループ終了命令に応答して、このような状態保存又は障害条件を常にトリガすることができる。
【0087】
しかし実際には、すべてのループが、ループの末端にレーンの述語を必要とするわけではない。例えば、要素サイズがレジスタ幅に等しいスカラ命令又はベクトル命令を使用してループが処理されることになる場合、繰返しごとにただ1つの要素が処理されるので、要素の総数は、常にベクトル長の正確な倍数である。したがって、このようなループにおいて、VEwidth又はループ末端述語制御パラメータへのアクセスは必要とされない。非述語的ループに対して遅延状態保存又は障害条件をトリガすることによってパフォーマンス・コストを招くことを回避するために、2つのバージョンのループ開始命令及びループ終了命令が提供される。
・DLS:非述語的ループ開始命令。ループ終了アドレス「loopend」及び繰返しrNの数を指定するが、ベクトル要素サイズは指定しないので、浮動小数点制御レジスタ内のVEwidthパラメータに対する変更は行われない。VEwidthはデフォルトで、1つのベクトル・レジスタVRwidthの中のビット数に等しくなると想定される。
・DLSP:述語的ループ開始命令。ループ終了アドレス「loopend」及び繰返しrNの数を指定し、ベクトル命令に対する要素幅VEwidthを示す「size」パラメータも指定する。要素幅は、浮動小数点制御レジスタに格納される。浮動小数点コンテキストがまだアクセス可能でない場合、DLSP命令は、遅延状態保存動作をトリガして、以前の浮動小数点コンテキストをメモリに保存し、浮動小数点コンテキストは、要素幅を浮動小数点制御レジスタに格納する前に、現在のプロセスにアクセス可能になる。
・DLE:非述語的ループ終了命令。DLS命令に続いて使用される。浮動小数点コンテキストがアクセス不能なときに実行されると、ループ終了命令復号回路は、メモリへの、浮動小数点コンテキストのいずれの遅延状態保存もトリガしない。
・DLEP:述語的ループ終了命令。DLSP命令に続いて使用される。浮動小数点コンテキストがアクセス不能なときに実行されると、ループ終了命令復号回路は、浮動小数点コンテキストのメモリへの保存をトリガする制御信号を生成し、浮動小数点コンテキストをアクセス可能にする。DLEP命令は、浮動小数点コンテキストが、現在のプロセス/特権レベルに対してアクセスされることを許可されない場合、アクセス許可チェック回路1008によって障害条件がトリガされることを保証するために、浮動小数点コンテキスト・レジスタのうちの1つ(例えば、VEwidthを格納する浮動小数点制御レジスタ)へのアクセスもトリガする。
【0088】
ループのそれぞれの繰返しの終わりに、ループ制御回路は、浮動小数点制御レジスタから読み込まれたVEwidthから導出される、この繰返しの中で処理される要素の数までループ・カウンタを減らす。したがって、非述語的ループに関して、VEwidth=VRwidthなので、ループ・カウンタは、それぞれの繰返しに対して1まで減らされる。述語的ループに関して、繰返しごとに処理される要素の数は、VRwidth/VEwidthである(VRwidthは、所与のハードウェアの実装形態に対して固定されてよいので、制御レジスタ内で明示的に示される必要はなくてもよい)。
【0089】
2つのバージョンのループ終了命令を提供ことによって、コンテキスト・データがフラッシュされ、浮動小数点コンテキストが、例外からの復帰に続く現在のプロセスに対して再びアクセス不能になるように、述語的ループの途中で例外が発生しても、このことがループ制御データも無効化するので、述語的ループ終了命令は、ループの終わりで実行され、浮動小数点コンテキストを再びアクセス可能にする必要がある場合、遅延状態保存動作又は障害条件をトリガすることができる。しかし、非述語的ループに関して、遅延状態保存動作又は障害条件をトリガすることによるオーバヘッドは、非述語的ループ終了命令を使用することによって回避されることが可能である。したがって要約すれば、ループ終了命令復号回路は、ループ終了命令が、第1のタイプのループ終了命令であるか、第2のタイプのループ終了命令であるかによって、状態保存制御信号を生成すべきかどうかを選択することができる。同様に、ループ終了命令に応答して所定の状態レジスタを含むレジスタのサブセットへのアクセスがトリガされるかどうかは、ループ終了命令が第1のタイプのループ終了命令であるか、第2のタイプのループ終了命令であるかに依存することができる。
【0090】
図14Aから
図14Eは、上述の特徴を示すために非述語的及び述語的ループの実行の実例を示す。
【0091】
図14Aは、ループの実行中に例外が発生しない非述語的ループの実例を示す。非述語的ループ開始命令DLSはループの始めに実行され、ループ終了アドレス及び実行されることになる繰返しの数をセットアップする。これは非述語的ループ開始命令なので、浮動小数点制御レジスタ内の要素幅VE
widthパラメータは、まだ変化していない。現在のプロセスがまだ、浮動小数点コンテキストにアクセスできない場合、アクセスは必要とされないので、遅延状態保存動作又は障害条件はトリガされない。第1のループの繰返しの終わりに、非述語的ループ終了命令DLEは実行され、その後の繰返しを制御するためのループ開始アドレスをセットアップし、浮動小数点制御レジスタへのアクセスは必要とされないので、浮動小数点コンテキストが現在、アクセス可能でないことを浮動小数点コンテキスト・アクセス可能性フラグが示しても、遅延状態保存動作又は障害条件はトリガされない。ループのその後の繰返しにおいて、ループ開始命令及びループ終了命令は実行されず、プログラム・フローは、プログラム・ループ本体の複数の繰返しを通って進む。それぞれの繰返しの終わりにおいて、浮動小数点コンテキストはアクセス不能なので、ループ制御回路1000は浮動小数点制御レジスタにアクセスせず、VE
width=VR
width、即ちベクトル当たりの要素の数が1であることを想定するので、ループ・カウンタを1まで減らす。最終の繰返しにおいて、ベクトル・ループの述語は適用されず、さらなる繰返しが必要とされないこと検出すると、ループ制御回路1000は、ループ終了命令DLEに先行する命令からDLE後の命令に飛び越えるようにプログラム・フローを制御し、ループ終了命令をスキップして、ループ後のその後の命令の処理を継続する。
【0092】
図14Bは、ループの実行中に例外が発生しない述語的ループの実例を示す。今回、ループ開始命令は述語的ループ開始命令DLSPであるので、ループ終了アドレス、及び行われることになる繰返しの数を指定するループ制御データをセットアップすることに加えて、ループ開始命令復号回路は、DLSP命令によって指定される「size」パラメータに基づいて、浮動小数点制御レジスタ内で指定されるベクトル要素幅VE
widthのアップデートもトリガする。したがって、浮動小数点コンテキストがまだアクセス可能でない場合、VE
widthがアップデートされることが可能になるように、遅延状態保存動作又は障害条件がトリガされ、コンテキストをアクセス可能にする。第1のループの繰返しの終わりに、述語的ループ終了命令DLEPが実行され、ループ開始アドレスをセットアップする。ループ終了命令復号回路は、浮動小数点コンテキストが既にアクセス可能であることを状態アクセス可能性フラグから検出するので、遅延状態保存の必要はなく、ループ終了命令DLEPに応答してトリガされる浮動小数点制御レジスタへのアクセスは、障害をトリガしない。ループのその後の繰返しはその後、ループ開始命令/ループ終了命令を実行せずに実行される。ループのそれぞれの繰返しにおいて、ループ制御回路1000は、浮動小数点制御レジスタから読み込まれたVE
widthに基づいて、繰返しの中で処理される要素の数を決定し、要素の決定された数によってループ・カウンタを減らす。ループの最終の繰返しにおいて、ループ・カウンタによって示されるような、まだ処理されていない要素の数が、1つのベクトル命令によって処理されることになる要素の数より小さい場合、ループ制御回路1000は、不要なベクトル・レーンに述語を適用し、マスクされることになるベクトルの部分は、VE
width及びループ・カウンタから決定される。最終の繰返しの終わりに、ループ制御回路1000は、さらなる繰返しが必要とされないことを検出するので、DLEP命令はスキップされる。浮動小数点コンテキストは既にアクセス可能なので、浮動小数点制御レジスタ内のVE
widthフィールドは、ベクトル・レジスタの幅にリセットされ、その後のベクトル命令に対するループ末端述語をディスエーブルし、遅延状態保存又は障害条件は必要とされない。
【0093】
図14Cは、ループ中に例外が発生するときの非述語的ループの実例を示す。非述語的ループ開始命令及び非述語的ループ終了命令DLS、DLEは、
図14Aに対して説明されたのと同じ方式で実行され、ループ・カウンタは、
図14Aに対して説明されたように、ループのそれぞれの繰返しにおいて、1まで減らされる。第3の繰返しにおいて、割り込まれたスレッドのコンテキストの状態保存をトリガする例外が発生する。浮動小数点コンテキストがアクセス可能として示される場合、状態保存は、浮動小数点コンテキストの保存を含むが、浮動小数点コンテキストがアクセス不能な場合、状態保存は、整数コンテキスト・データを保存するが、浮動小数点コンテキスト・データは保存しない。例外から戻ると、整数状態データは復元され、浮動小数点コンテキスト・データは、初めはアクセス不能である。遅延状態保護がアクティブであることを示すように遅延状態保護フラグがセットされ、その結果、ループのその後の任意の命令が、浮動小数点コンテキスト・データを必要とする場合、これは、浮動小数点コンテキストの遅延状態の復元をトリガする。浮動小数点コンテキスト・データを必要とする命令が遭遇される場合、ループ終了命令DLEに到達するとき、浮動小数点コンテキストはまだアクセス不能である。ループ制御データは以前、例外の発生時に無効化されたので、ループ終了命令DLEが実行され、ループ制御データをリセットする。これは非述語的ループ終了命令DLEなので、浮動小数点コンテキストがアクセス不能であるとしても、ループ終了命令は、遅延状態保存、又は浮動小数点制御レジスタへのアクセスをトリガしない。ループ制御データを復元すると、ループのその後の繰返しは、
図14Aの方式と同じ方式で継続し、ループの最終の繰返しは、
図14Aと同じ方式で処理される。したがって、処理されることになる繰返しが残っていないとき、DLE命令はスキップされるので、浮動小数点コンテキストがアクセス不能であるとしても、最終の繰返しにおいて遅延状態保護又は障害条件はトリガされない。例外から復帰してから、遅延状態保護フラグがまだクリアされていない場合、フラグはまだアクティブなので、ループ後に浮動小数点コンテキストを必要とする次の命令は、遅延状態保存をトリガする。さらに、例外から復帰してから、遅延状態保護フラグがまだクリアされていない場合、ループ制御回路は、浮動小数点制御レジスタ内のVE
widthをベクトル・レジスタの幅にリセットしようとしない。
【0094】
図14Dは、ループ中に例外が発生するときの述語的ループの実例を示す。第1の繰返しにおいて、述語的ループ開始命令/述語的ループ終了命令DLSP及びDLEPは、
図14Bの方式と同じ方式で実行される。ループの第3の繰返しにおいて例外が発生する。この例外は、例外ハンドラ又は別のスレッドへのコンテキスト・スイッチをトリガし、再び戻るが、これは、
図14Cの方式と同じ方式で処理される。しかし、述語的ループに関して、ループ本体に復帰すると、遅延状態保護フラグ(状態アクセス可能性フラグ)を伴う命令は、アクティブにセットし、述語的ループ終了命令DLEPの復号は、現在のプロセスへのアクセス許可が、浮動小数点レジスタへのアクセスを許可しない場合、障害条件が引き起こされ、必要とされた許可を認めるようにオペレーティング・システムをトリガできるように、(ループ本体の中の初めの方の命令が浮動小数点コンテキストを必要としなかった場合)遅延状態保存動作をトリガし、浮動小数点制御レジスタへのアクセスもトリガする。したがって、述語的ループ終了命令に遭遇した後、浮動小数点コンテキストは利用可能になるので、ループ・カウンタのアップデートを制御するためにVE
widthパラメータを読み込むこと、及びループの最後の繰返しにおいて述語を制御するためのループ末端述語パラメータにアクセスすることが可能である。ループ中に2つ以上の例外が発生する場合、それぞれの例外は、
図14Dに示されたものに類似の方式で処理される。最終のループの繰返しにおいて、ループの中で処理された要素の総数が、ループ開始命令によって指定された数にマッチすることを保証するように未使用のベクトル・レーンのマスクを制御するために、ループ末端述語が適用される。最終のループの繰返しの終わりに、ループ制御回路1000は、遅延状態保存フラグが非アクティブであるので、浮動小数点コンテキストが既にアクセス可能であることを検出し、浮動小数点制御レジスタ内のVE
widthをベクトル・レジスタの幅にリセットして、ループ中に断定されたこれらのベクトル・レーンの処理の抑制をディスエーブルする。
【0095】
図14Eは、ループの最終の繰返しにおいて例外が発生する述語的ループの実例を示す。第1の繰返しにおいて、ループ開始命令/ループ終了命令DLSP及びDLEPは、
図14B又は
図14Dの方式と同じ方式で処理され、同様にそれぞれの繰返しにおけるループ・カウンタの減少は、同じ方式で処理される。しかし、ポイント*2で、最終の繰返しにおいて例外が発生し、これは、コンテキスト・スイッチをトリガする。(述語要素幅VE
widthを含む)以前の浮動小数点コンテキストは、メモリに保存され、例外が処理される。例外から復帰する際に、ループを動かすスレッドと関連付けられた整数コンテキストは復元されるが、浮動小数点コンテキストは復元されないので、遅延状態保存フラグはアクティブにセットされる。この実例において、例外からの復帰後に実行される第1の命令は、浮動小数点状態を必要としないスカラ命令SI
1なので、遅延状態保存をトリガしない。浮動小数点制御レジスタ内の述語要素幅VE
widthはアクセス不能であるが、これは、命令がスカラ命令であり、述語を必要としないので、問題ではない。第1のベクトル命令VI
2がポイント*3で遭遇されると、これは、浮動小数点コンテキストを必要とする命令とみなされる(浮動小数点制御レジスタから述語要素幅VE
widthを必要とすることを除いて、いくつかのアーキテクチャにおいて、ベクトル・レジスタは、浮動小数点レジスタと重複してよいので、遅延状態保存フラグがアクティブであるときのベクトル命令の実行は、ベクトル・レジスタをアクセス可能にするために、いずれにしても遅延状態保護を発生させる)。遅延状態保存フラグがアクティブなとき、ベクトル命令VI
2は遅延状態保存動作をトリガし、これは、ループの最終の繰返しの残りのために述語が再びイネーブルされるように、浮動小数点コンテキストをアクセス可能にし、VE
widthが復元されることを可能にする。
【0096】
いくつかの実施例において、遅延状態保護プロセスは、レジスタ内の浮動小数点コンテキストを保護するだけであり、遅延状態保護をトリガしたスレッドと関連付けられた浮動小数点コンテキストを復元させない。このような実施例において、オペレーティング・システムは、遅延状態保護をトリガすることに加えて、障害をトリガしたスレッドと関連付けられた浮動小数点コンテキストにオペレーティング・システムが応答して復元できる障害も、浮動小数点状態にアクセスしようとする試みがトリガするように、アクセス許可を構成する。
【0097】
図15は、いくつかの実例の実施例において、本明細書で説明された技法を実装するのに適した仮想マシンの実施例を概略的に示す。初めの方で説明された実施例は、当該の技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点から本発明を実装するが、ハードウェア・デバイスのいわゆる仮想マシンの実装形態を提供することも可能である。これらの仮想マシンの実装形態は、仮想マシン・プログラム510をサポートするホスト・オペレーティング・システム520を動かすホスト・プロセッサ530上で動く。典型的には、適度なスピードで実行する仮想マシンの実装形態を提供するために、大規模で強力なプロセッサが必要とされるが、このようなアプローチは、互換性又は再使用のために、別のプロセッサにネイティブなコードを動かすという要望があるときなど、一定の状況において正当化されることがある。仮想マシン・プログラム510は、仮想マシン・プログラム510によって模倣されるデバイスである本物のハードウェアによって提供されるアプリケーション・プログラム・インターフェースと同じアプリケーション・プログラム・インターフェースを、アプリケーション・プログラム500に提供する。したがって、上述のメモリ・アクセスの制御を含むプログラム命令は、仮想マシン・プログラム510を使用して仮想マシンのハードウェアとのプログラム命令の相互作用を模倣し、アプリケーション・プログラム500の内部から実行されてよい。
【0098】
例証的な実施例が、添付の図面を参照しながら本明細書で詳細に説明されたが、特許請求の範囲はこれらの正確な実施例に限定されないということ、並びに添付の特許請求の範囲の範囲及び精神から逸脱することなく、様々な変更、追加、及び修正が、当業者によってこれらの実施例の中で行われてよいということを理解されたい。例えば、従属請求項の特徴の様々な組合せが、独立請求項の特徴と共に行われてよい。