(57)【要約】  装置は、処理回路４と、複数の処理レーンがベクトル値の各データ要素に対して実行されるベクトル命令をサポートする命令デコーダ６とを備える。ベクトル述語命令に応答して、命令デコーダ６は、対応する要素が試験条件を通過するかまたは通過しないかを判定するための多数の要素比較演算のそれぞれの結果に基づいて制御情報を設定するように処理回路４を制御する。制御情報は、ベクトル述語命令の後の所定数の後続ベクトル命令の処理を制御する。所定数は、ベクトル述語命令によって固有とされるかまたは識別される。後続ベクトル命令のうちの１つに対して、所与のベクトル処理レーンの所与の部分に対する演算は、対応するデータ要素についての制御情報によって示される結果に基づいてマスクされる。
2019509573.tif 000002
【特許請求の範囲】
【請求項１】
データ処理を実行する処理回路と、
ベクトル値の各データ要素に対応する複数のベクトル処理レーンを実行するように前記処理回路を制御するためにベクトル命令をデコードする命令デコーダと
を備え、
ベクトル述語命令に応答して、前記命令デコーダが、複数の要素比較演算にそれぞれ応じて、目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかを判定するために、処理される命令のシーケンス内の前記ベクトル述語命令の後の所定数の後続ベクトル命令の処理を制御するための制御情報を設定するために前記処理回路を制御するように構成されており、前記所定数が前記ベクトル述語命令によって固有とされるかまたは識別され、
前記所定数の後続ベクトル命令のうちの１つに応答して、前記命令デコーダが、所与のベクトル処理レーンの所与の部分に対応する前記目標ベクトル値のデータ要素についての前記制御情報によって示される前記要素比較演算の結果に応じて、前記所与の部分に関連する演算をマスクするかどうかを判定するために前記処理回路を制御するように構成されており、
少なくとも１つの種類のベクトル命令に応答して、前記命令デコーダが、前記複数のベクトル処理レーンとは独立した追加演算を実行するために前記処理回路を制御するように構成されており、
前記処理回路が、前記所定数の後続ベクトル命令のうちの１つが前記少なくとも１つの種類のベクトル命令のうちの１つである場合に、前記制御情報とは独立した前記追加演算を実行するように構成されている、装置。
【請求項２】
前記ベクトル述語命令に応答して、前記命令デコーダが、前記複数の要素比較演算を実行するために前記処理回路を制御するように構成されている、請求項１に記載の装置。
【請求項３】
前記命令デコーダが、
各要素比較演算が前記ベクトル述語命令によって指定されたレジスタに保持されたさらなるベクトル値の対応する要素と前記目標ベクトル値の対応するデータ要素の比較に依存するベクトル比較ベクトル述語命令、
各要素比較演算が前記ベクトル述語命令によって指定されたレジスタに保持されたスカラー値と前記目標ベクトル値の対応するデータ要素の比較に依存するスカラー比較ベクトル述語命令、および、
各要素比較演算が所定の定数と前記目標ベクトル値の対応するデータ要素の比較に依存する定数比較ベクトル述語命令
のうちの少なくとも１つをサポートするように構成されている、請求項２に記載の装置。
【請求項４】
前記所定数の後続ベクトル命令のうちの少なくとも１つについて、前記ベクトル述語命令が、前記後続ベクトル命令がｔｈｅｎ条件ベクトル命令またはｅｌｓｅ条件ベクトル命令であるかどうかを識別し、
ｔｈｅｎ条件ベクトル命令として識別された前記後続ベクトル命令のうちの１つについて、前記処理回路が、前記試験条件が前記所与のベクトル処理レーンの所与の部分に対応する前記目標ベクトルの前記データ要素について通過しなかった場合、前記所与の部分に関連する演算をマスクするように構成されており、
ｅｌｓｅ条件ベクトル命令として識別された前記後続ベクトル命令のうちの１つについて、前記処理回路が、前記試験条件が前記所与のベクトル処理レーンの前記所与の部分に対応する前記目標ベクトルの前記データ要素について通過した場合、前記所与の部分に関連する演算をマスクするように構成されている、請求項１から３のうちいずれか一項に記載の装置。
【請求項５】
前記制御情報を記憶するための述語レジスタを備え、前記制御情報に応じて処理が制御されるべき前記所定数の後続ベクトル命令のうちの１つに応答して、少なくともいくつかの種類の後続ベクトル命令について、前記処理回路が、前記後続ベクトル命令の符号化とは無関係に前記同じ述語レジスタから前記制御情報を読み出すように構成されている、請求項１から４のうちいずれか一項に記載の装置。
【請求項６】
前記制御情報が、複数のビットフラグを含み、各ビットフラグが、前記目標ベクトル値の各部分に対応し、前記目標ベクトル値のその部分を含むデータ要素が前記試験条件を通過したかまたは通過しなかったかを示す、請求項１から５のうちいずれか一項に記載の装置。
【請求項７】
前記制御情報が、
前記複数の要素比較演算の結果を示す述語フィールドと、
どの後続ベクトル命令が前記述語フィールドに応じて処理されるべきかを制御するためのマスクフィールドと
を含む、請求項１から６のうちいずれか一項に記載の装置。
【請求項８】
前記ベクトル述語命令に応答して、前記命令デコーダが、前記所定数が前記マスクフィールドの所与の終端から所定のビット値を有する最遠位ビットのビット位置によって表される初期値に前記マスクフィールドを設定するように前記処理回路を制御するように構成されている、請求項７に記載の装置。
【請求項９】
前記初期値において、前記最遠位ビットと前記マスクフィールドの前記所与の終端との間のビットが、前記後続ベクトル命令が、
前記所与のベクトル処理レーンの前記所与の部分に対応する前記目標ベクトル値の前記データ要素について前記試験条件が通過しなかった場合、前記処理回路が前記所与の部分に関連する演算をマスクするように構成されたｔｈｅｎ条件ベクトル命令、または、
前記所与のベクトル処理レーンの前記所与の部分に対応する前記目標ベクトル値の前記データ要素について前記試験条件が通過した場合、前記処理回路が前記所与の部分に関連する演算をマスクするように構成されたｅｌｓｅ条件ベクトル命令
であるかどうかを示すビット値を有する、請求項８に記載の装置。
【請求項１０】
前記所定数の後続ベクトル命令のうちの１つに応答して、前記処理回路が、１ビット位置だけ前記マスクフィールドの前記所与の終端に向かって前記マスクフィールドをシフトするように構成されている、請求項８および９のうちいずれか一項に記載の装置。
【請求項１１】
前記処理回路が、前記マスクフィールドからシフトアウトされたビットが所定のビット値を有する場合、前記述語フィールドの少なくとも一部のビットを反転するように構成されている、請求項１０に記載の装置。
【請求項１２】
所与のベクトル命令に応答して、前記処理回路が、ベクトル値のセクションにそれぞれ対応する複数の処理のビートを実行するように構成されており、
前記制御情報が、前記所定数の後続ベクトル命令の処理の各ビートにそれぞれ対応する複数のマスクフィールドを含む、請求項７から１１のうちいずれか一項に記載の装置。
【請求項１３】
前記処理回路が、第１のベクトル命令のビートの第２のサブセットと並列に第２のベクトル命令のビートの第１のサブセットが実行される前記第１および第２のベクトル命令のオーバーラップされた実行をサポートするように構成されている、請求項１２に記載の装置。
【請求項１４】
前記ベクトル述語命令のビートの前記第１のサブセットまたは前記所定数の後続ベクトル命令のうちの１つを処理する場合、前記処理回路が、前記複数のマスクフィールドの第１のマスクフィールドを使用するように構成されており、
前記ベクトル述語命令のビートの前記第２のサブセットまたは前記所定数の後続ベクトル命令のうちの１つを処理する場合、前記処理回路が、前記複数のマスクフィールドの第２のマスクフィールドを使用するように構成されている、請求項１３に記載の装置。
【請求項１５】
前記処理回路が、ベクトル命令のループによって処理されるデータ要素の数およびベクトル値あたりのデータ要素の数に応じて、任意のベクトル処理レーンが前記ループの所与の反復中にマスクされるべきかどうかを判定するためのループ述語回路を備え、
前記所定数の後続ベクトル命令のうちの１つに応答して、前記命令デコーダが、ベクトル述語命令に応答して設定された前記制御情報とは独立して前記所与のレーンがマスクされるべきと前記ループ述語回路が判定した場合、前記所与のベクトル処理レーンの前記所与の部分に関連する演算をマスクする前記処理回路を制御するように構成されている、請求項１から１４のうちいずれか一項に記載の装置。
【請求項１６】
第１の種類のベクトル述語命令に応答して、前記命令デコーダが、前記制御情報によって示される以前の述語結果とは独立して、前記複数の要素比較演算の結果に応じて前記制御情報を設定するように前記処理回路を制御するように構成されている、請求項１から１５のうちいずれか一項に記載の装置。
【請求項１７】
第２の種類のベクトル述語命令に応答して、前記命令デコーダが、前記複数の要素比較演算の対応する１つの結果と前記制御情報によって示される以前の述語結果とに依存する、前記目標ベクトル値の所与のデータ要素に対する述語結果を示すために前記制御情報を設定するように前記処理回路を制御するように構成されており、
前記第２の種類のベクトル述語命令のうちの１つに続いて、前記所定数の後続ベクトル命令のうちの１つに応答して、前記命令デコーダが、前記所与のベクトル処理レーンの前記所与の部分に対応する前記目標ベクトル値のデータ要素についての前記制御情報によって示される前記述語結果に応じて、前記所与の部分に関連する演算をマスクするかどうかを制御するように前記処理回路を制御するように構成されている、請求項１から１６のうちいずれか一項に記載の装置。
【請求項１８】
前記命令デコーダが、
目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかをそれぞれ判定するための複数の要素比較演算、または、
前記制御情報の以前の値と、目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかをそれぞれ判定するための複数の要素比較演算
のうちの１つに応じて、前記制御情報を設定するように前記処理回路を制御するための制御信号を生成するようにベクトル比較命令をデコードするように構成されている、請求項１から１７のうちいずれか一項に記載の装置。
【請求項１９】
前記処理回路が、
前記所与のレーンの前記所与の部分に対応するデスティネーションベクトルレジスタの一部の更新を抑制すること、
前記所与のレーンの前記所与の部分に対応する前記デスティネーションベクトルレジスタの一部を所定値に設定すること、および、
前記所与のベクトル処理レーンを抑制すること
のうちの１つにより、所与のベクトル処理レーンの前記所与の部分に関連する前記演算をマスクするように構成されている、請求項１から１９のうちいずれか一項に記載の装置。
【請求項２０】
前記所定数の後続ベクトル命令のうちの１つに応答して、前記処理回路が、所与のレーンの各部分について別個に、その部分に対応する前記目標ベクトル値のデータ要素について示された前記制御情報に応じて、前記所与のベクトル処理レーンのその部分に関連する前記演算をマスクするかどうかを判定するように構成されている、前項のうちいずれか一項に記載の装置。
【請求項２１】
前記所定数の後続ベクトル命令のうちの１つに応答して、前記処理回路が、所与のベクトル処理レーンに対応する前記目標ベクトル値の１つのデータ要素について示された前記制御情報に応じて、前記所与のレーン全体に関連する演算をマスクするかどうかを判定するように構成されている、請求項１から１９のうちいずれか一項に記載の装置。
【請求項２２】
データ処理を実行する手段と、
ベクトル値の各データ要素に対応する複数のベクトル処理レーンを実行するために処理回路を制御するようにベクトル命令をデコードする手段と
を備え、
ベクトル述語命令に応答して、前記デコードする手段が、複数の要素比較演算にそれぞれ応じて、目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかを判定するために、処理される命令のシーケンス内の前記ベクトル述語命令の後の所定数の後続ベクトル命令の処理を制御するための制御情報を設定するために前記データ処理を実行する手段を制御するように構成されており、前記所定数がベクトル述語命令によって固有とされるかまたは識別され、
前記所定数の後続ベクトル命令のうちの１つに応答して、前記デコードする手段が、所与のベクトル処理レーンの所与の部分に対応する前記目標ベクトル値のデータ要素についての前記制御情報によって示される前記要素比較演算の結果に応じて、前記所与の部分に関連する演算をマスクするかどうかを判定するために前記処理を実行する手段を制御するように構成されており、
少なくとも１つの種類のベクトル命令に応答して、前記デコードする手段が、前記複数のベクトル処理レーンとは独立した追加演算を実行するために前記データ処理を実行する手段を制御するように構成されており、
前記データ処理を実行する手段が、前記所定数の後続ベクトル命令のうちの１つが前記少なくとも１つの種類のベクトル命令のうちの１つである場合に、前記制御情報とは独立した前記追加演算を実行するように構成されている、装置。
【請求項２３】
ベクトル値の各データ要素に対応する複数のベクトル処理レーンを実行するために処理回路を制御するようにベクトル命令を処理するためのデータ処理方法であって、
複数の要素比較演算にそれぞれ応じて、目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかを判定するために、処理される命令のシーケンス内の前記ベクトル述語命令の後の所定数の後続ベクトル命令の処理を制御するための制御情報を設定するために前記処理回路を制御するようにベクトル述語命令をデコードすることであって、前記所定数がベクトル述語命令によって固有とされるかまたは識別される、ベクトル述語命令をデコードすることと、
前記所定数の後続ベクトル命令のうちの１つに応答して、所与のベクトル処理レーンの所与の部分に対応する前記目標ベクトル値のデータ要素についての前記制御情報によって示される前記要素比較演算の結果に応じて、前記所与の部分に関連する演算をマスクするかどうかを判定するために前記処理回路を制御するように前記後続ベクトル命令をデコードすることと
を備え、
前記所定数の後続ベクトル命令のうちの１つが、前記処理回路が前記複数のベクトル処理レーンとは独立した追加演算を実行すべきベクトル命令の種類である場合に、前記処理回路が前記制御情報とは独立した前記追加演算を実行するように制御される、データ処理方法。
【請求項２４】
請求項１から２１のうちいずれか一項に記載の装置に対応する命令実行環境を提供するようにホストデータ処理装置を制御するためのプログラム命令を備える仮想マシンコンピュータプログラム。
【請求項２５】
請求項２４に記載の仮想マシンコンピュータプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。より具体的には、それは、ベクトル命令の処理に関する。
【背景技術】
【０００２】
いくつかのデータ処理システムは、命令のソースオペランドまたは結果値が複数のデータ要素を含むベクトルであるベクトル命令の処理をサポートする。単一の命令に応答して多数の別個のデータ要素の処理をサポートすることにより、コード密度を向上させることができ、命令のフェッチおよびデコードのオーバーヘッドを低減することができる。ベクトルオペランドの各要素にデータ値をロードし、単一のベクトル命令を使用して一度に複数の要素のデータ値を処理することによって処理されるデータ値の配列がより効率的に処理されることができる。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの例は、
データ処理を実行する処理回路と、
ベクトル値の各データ要素に対応する複数のベクトル処理レーンを実行するように処理回路を制御するためにベクトル命令をデコードする命令デコーダとを備え、
ベクトル述語命令に応答して、命令デコーダが、複数の要素比較演算にそれぞれ応じて、目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかを判定するために、処理される命令のシーケンス内の前記ベクトル述語命令の後の所定数の後続ベクトル命令の処理を制御するための制御情報を設定するために処理回路を制御するように構成されており、前記所定数がベクトル述語命令によって固有とされるかまたは識別され、
前記所定数の後続ベクトル命令のうちの１つに応答して、命令デコーダが、所与のベクトル処理レーンの所与の部分に対応する目標ベクトル値のデータ要素についての制御情報によって示される要素比較演算の結果に応じて、前記所与の部分に関連する演算をマスクするかどうかを判定するために処理回路を制御するように構成されており、
少なくとも１つの種類のベクトル命令に応答して、命令デコーダが、前記複数のベクトル処理レーンとは独立した追加演算を実行するために処理回路を制御するように構成されており、
処理回路が、前記所定数の後続ベクトル命令のうちの１つが前記少なくとも１つの種類のベクトル命令のうちの１つである場合に、制御情報とは独立した追加演算を実行するように構成されている、装置を提供する。
【０００４】
少なくともいくつかの例は、
データ処理を実行する手段と、
ベクトル値の各データ要素に対応する複数のベクトル処理レーンを実行するために処理回路を制御するようにベクトル命令をデコードする手段とを備え、
ベクトル述語命令に応答して、デコードする手段が、複数の要素比較演算にそれぞれ応じて、目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかを判定するために、処理される命令のシーケンス内の前記ベクトル述語命令の後の所定数の後続ベクトル命令の処理を制御するための制御情報を設定するためにデータ処理を実行する手段を制御するように構成されており、前記所定数がベクトル述語命令によって固有とされるかまたは識別され、
前記所定数の後続ベクトル命令のうちの１つに応答して、デコードする手段が、所与のベクトル処理レーンの所与の部分に対応する目標ベクトル値のデータ要素についての制御情報によって示される要素比較演算の結果に応じて、前記所与の部分に関連する演算をマスクするかどうかを判定するために処理を実行する手段を制御するように構成されており、
少なくとも１つの種類のベクトル命令に応答して、デコードする手段が、前記複数のベクトル処理レーンとは独立した追加演算を実行するためにデータ処理を実行する手段を制御するように構成されており、
データ処理を実行する手段が、前記所定数の後続ベクトル命令のうちの１つが前記少なくとも１つの種類のベクトル命令のうちの１つである場合に、制御情報とは独立した追加演算を実行するように構成されている、装置を提供する。
【０００５】
少なくともいくつかの例は、ベクトル値の各データ要素に対応する複数のベクトル処理レーンを実行するために処理回路を制御するようにベクトル命令を処理するためのデータ処理方法であって、
複数の要素比較演算にそれぞれ応じて、目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかを判定するために、処理される命令のシーケンス内の前記ベクトル述語命令の後の所定数の後続ベクトル命令の処理を制御するための制御情報を設定するために処理回路を制御するようにベクトル述語命令をデコードすることであって、前記所定数がベクトル述語命令によって固有とされるかまたは識別される、ベクトル述語命令をデコードすることと、
前記所定数の後続ベクトル命令のうちの１つに応答して、所与のベクトル処理レーンの所与の部分に対応する目標ベクトル値のデータ要素についての制御情報によって示される要素比較演算の結果に応じて、前記所与の部分に関連する演算をマスクするかどうかを判定するために処理回路を制御するように後続ベクトル命令をデコードすることとを備え、
前記所定数の後続ベクトル命令のうちの１つが、処理回路が前記複数のベクトル処理レーンとは独立した追加演算を実行すべきベクトル命令の種類である場合に、処理回路が制御情報とは独立した追加演算を実行するように制御される、データ処理方法を提供する。
【０００６】
少なくともいくつかの例は、上述した装置に対応する命令実行環境を提供するようにホストデータ処理装置を制御するためのプログラム命令を備える仮想マシンコンピュータプログラムを提供する。
【０００７】
仮想マシンコンピュータプログラムを記憶したコンピュータ読み取り可能な記憶媒体もまた提供されることができる。記憶媒体は、非一時的記憶媒体とすることができる。
【０００８】
本技術のさらなる態様、特徴および利点は、添付図面と併せて読まれるべき以下の例の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】ベクトル命令の実行をサポートするデータ処理装置の例を概略的に示している。
【図２】ベクトル述語命令の符号化の例を示している。
【図３】ベクトル述語命令を使用して、後続ベクトル命令に応答して実行される処理レーンの部分のマスクを制御する例を示している。
【図４】ベクトル述語命令の結果とは独立した後続ベクトル命令に応答してアドレスポインタを更新するための追加演算が実行される例を示している。
【図５】ベクトル述語命令の実行後の後続ベクトル命令に対するベクトル演算のマスク部分の異なる例を示している。
【図６】ベクトル述語命令の実行後の後続ベクトル命令に対するベクトル演算のマスク部分の異なる例を示している。
【図７】ベクトル述語命令の実行後の後続ベクトル命令に対するベクトル演算のマスク部分の異なる例を示している。
【図８】所定数の後続命令の演算を制御するためにベクトル述語命令に応答して設定される制御情報の例を示している。
【図９】どれだけ多くの後続ベクトル命令が述語命令によって影響を受けるかを制御するためのマスクフィールドの異なる符号化を示す表である。
【図１０】連続したベクトル命令の実行間において異なる量のオーバーラップをサポートするために複数のマスクフィールドを使用する例を示している。
【図１１】連続したベクトル命令の実行間において異なる量のオーバーラップをサポートするために複数のマスクフィールドを使用する例を示している。
【図１２】連続したベクトル命令の実行間において異なる量のオーバーラップをサポートするために複数のマスクフィールドを使用する例を示している。
【図１３】複数の比較を含むより複雑な条件の評価に基づく述語の例を示している。
【図１４】ベクトル命令のループ内で処理されるデータ要素数に応じて、ベクトル処理レーンをマスクする例を示している。
【図１５】ベクトル述語命令を処理する方法を示している。
【図１６】使用可能な仮想マシンの実装を示している。
【発明を実施するための形態】
【００１０】
いくつかの特定の例が以下に説明される。本発明は、これらの正確な例に限定されないことが理解される。
【００１１】
いくつかのプログラムアプリケーションでは、ベクトル処理のデータ依存制御フローが必要となることがあり、それらのレーンに対応する目標ベクトルの要素の値に応じて選択されたベクトル処理レーンに対してのみ所定のベクトル演算が適用される。したがって、目標ベクトルの要素を試験条件と比較するための命令サポートを提供し、目標ベクトルの対応する要素についての比較の結果に基づいてベクトルの一部に関連する演算をマスクするかどうかを選択することが有用であり得る。
【００１２】
これを行うための１つのアプローチは、要素比較の結果が比較命令によって書き込まれることができ、後続命令についてのいくつかのベクトル処理レーンの述語を制御するように後続命令によって参照されることができる、ハードウェアにおいて複数の述語レジスタのバンクを提供することである。しかしながら、このアプローチの問題は、述語レジスタのバンクがレジスタファイルの回路面積および消費電力を増加させるということであり、これは、電力効率が最も重要な基準のうちの１つである比較的単純なプロセッサにおいて重要である可能性があり、また、これは、プロセッサの複雑さを増加させる可能性がある例外を処理するときに保存または復元されるレジスタ状態の量を増加させる。また、命令セット内の符号化空間は、高品質である可能性があり、このアプローチは、一般に、全ての種類のベクトル命令に述語レジスタフィールドを追加する必要があり、したがって、必要とされる命令符号化幅を増加させ、ひいては命令のキャッシュ、フェッチ、デコードおよび処理を行う際の電力を増加させる。
【００１３】
代わりに、処理回路は、多数の後続ベクトル命令の述語を制御するために専用のベクトル述語命令のデコードをサポートする命令デコーダを備えることができる。ベクトル述語命令に応答して、デコーダは、多数の要素比較演算のそれぞれに応じて、目標ベクトル値の対応するデータ要素が試験条件を通過するかまたは通過しないかを判定するために、処理される命令のシーケンス内のベクトル述語命令の後の所定数の後続ベクトル命令の処理を制御するための制御情報を設定するように処理回路を制御する。後続ベクトル命令のうちの１つに応答して、命令デコーダは、ベクトル述語命令に応答して処理回路によって設定された制御情報に基づいて所与のベクトル処理レーンの所与の部分に関連する演算をマスクするかどうかを判定するように処理回路を制御する。所与のレーンの所与の部分に対するマスクは、その所与の部分に対応する目標ベクトル値のデータ要素についての制御情報によって示される要素比較演算の結果に応じて判定される。
【００１４】
したがって、要素比較演算に基づいて制御情報を設定し、所定数の後続ベクトル命令に対するベクトル処理の部分の選択的マスクを制御する専用のベクトル述語命令を提供することにより、後続命令がそれらの符号化において述語レジスタ指定子を指定する必要はない。後続ベクトル命令の符号化は、後続ベクトル命令が述語化されていない場合と全く同じにすることができる。したがって、全く同じ命令は、ベクトル述語命令にしたがえば、同じ命令がベクトル述語命令にしたがわないと思われる場合よりもプロセッサの異なる挙動をトリガすることができる。（例えば、異なるオペコードを使用する）特別なベクトル述語命令を割り当てることにより、これは、符号化空間が通常は高品質である後続ベクトル命令についての命令符号化サイズの増加を回避する。このアプローチはまた、複数セットの述語レジスタ状態を保存または復元する必要がなく、複数の述語レジスタをハードウェアに設ける必要がないため、例外処理を簡素化する。
【００１５】
いくつかの例では、制御情報に応じて制御される固定数の後続ベクトル命令が常に存在するように、ベクトル述語命令によって影響を受ける所定数の後続ベクトル命令が固有とされることができる。例えば、いくつかの例では、ベクトル述語命令に遭遇した場合に、直後の後続ベクトル命令が制御情報に応じて制御されるが、その後の命令がその後に制御情報とは独立して処理されるように、所定数は１に固定されることができる。
【００１６】
しかしながら、他の例では、所定数は、ベクトル述語命令によって識別されてもよい。したがって、ベクトル述語命令は、制御情報に応じてどのくらい多くの後続ベクトル命令が制御されるべきかを識別する制御パラメータを指定してもよい。例えば、アーキテクチャは、いくつかの最大数の命令まで、ベクトル述語命令によって指定される可変数の後続ベクトル命令をサポートすることができる。例えば、最大数は４または８個の命令とすることができる。複数の命令が単一のベクトル述語命令によって述語化されることができるようにすることにより、これは、異なるベクトル述語命令によって個々に異なる命令を述語化することと比較して、コード密度を向上させ、フェッチ／デコードのオーバーヘッドを低減する。
【００１７】
図１は、ベクトル命令の処理をサポートするデータ処理装置２の例を概略的に示している。これは、説明を容易にするための簡略化された図であり、実際には、装置は、簡潔性のために図１には示されていない多くの要素を有してもよいことが理解される。装置２は、命令デコーダ６によってデコードされた命令に応答してデータ処理を実行する処理回路４を備える。プログラム命令は、メモリシステム８からフェッチされ、アーキテクチャによって規定された方法で命令を処理するために処理回路４を制御する制御信号を生成するように命令デコーダによってデコードされる。例えば、デコーダ６は、処理回路４に適切なハードウェアユニットを起動させて算術演算、ロード／記憶演算、または論理演算などの演算を実行させる制御信号を生成するように、デコードされた命令のオペコードおよび命令の任意の追加制御フィールドを解釈することができる。この装置は、処理回路４によって処理されるデータ値および処理回路の動作を構成するための制御情報を記憶するためのレジスタ１０を有する。算術または論理命令に応答して、処理回路４は、レジスタ１０からオペランドを読み出し、命令の結果をレジスタ１０に書き戻す。ロード／記憶命令に応答して、データ値は、処理ロジックを介してレジスタ１０とメモリシステム８との間で転送される。メモリシステム８は、メインメモリと同様に１つ以上のレベルのキャッシュを含むことができる。
【００１８】
レジスタ１０は、単一のデータ要素を含むスカラー値を記憶するための多数のスカラーレジスタを含むスカラーレジスタファイル１２を含む。命令デコーダ６および処理回路４によってサポートされるいくつかの命令は、スカラーレジスタ１２から読み出されたスカラーオペランドを処理してスカラーレジスタに書き戻されるスカラー結果を生成するスカラー命令である。
【００１９】
レジスタ１０はまた、複数のデータ要素を含むベクトル値をそれぞれ記憶する多数のベクトルレジスタを含むベクトルレジスタファイル１４を含む。ベクトル命令に応答して、命令デコーダ６は、ベクトルレジスタ１４のうちの１つから読み出したベクトルオペランドの各要素に対して多数のベクトル処理レーンを実行し、スカラーレジスタ１２に書き込まれるスカラー結果またはベクトルレジスタ１４に書き込まれるさらなるベクトル結果のいずれかを生成するように処理回路４を制御する。いくつかのベクトル命令は、１つ以上のスカラーオペランドからベクトル結果を生成することができ、またはベクトルレジスタファイル１４から読み出したベクトルオペランドに対するベクトル処理レーンだけでなく、スカラーレジスタファイルにおけるスカラーオペランドに対して追加のスカラー演算を実行することができる。したがって、いくつかの命令は、命令の１つ以上のソースレジスタおよびデスティネーションレジスタのうちの少なくとも一方がベクトルレジスタ１４であり、１つ以上のソースレジスタおよびデスティネーションレジスタのうちの他方がスカラーレジスタ１２である混合スカラー・ベクトル命令とすることができる。ベクトル命令はまた、データ値をベクトルレジスタ１４とメモリシステム８内の位置との間で転送させるベクトルロード／記憶命令を含むことができる。ロード／記憶命令は、メモリ内の位置がアドレスの連続範囲に対応する連続ベクトルロード／記憶命令、または、多数の離散アドレスを指定し、それらのアドレスのそれぞれからのデータをベクトルレジスタの各要素にロードするかまたはベクトルレジスタの各要素からのデータを離散アドレスに記憶するように処理回路４を制御するスキャッタ／ギャザー型ベクトルロード／記憶命令を含むことができる。
【００２０】
処理回路４は、異なるデータ要素サイズの範囲を有するベクトルの処理をサポートすることができる。例えば、１２８ビットのベクトルレジスタ１４は、例えば１６個の８ビットデータ要素、８個の１６ビットデータ要素、４個の３２ビットデータ要素、または２個の６４ビットデータ要素に分割されることができる。レジスタバンク１０内の制御レジスタは、使用されている現在のデータ要素サイズを指定してもよく、あるいは、これは、実行される所与のベクトル命令のパラメータであってもよい。
【００２１】
レジスタバンク１０はまた、処理回路４の動作を制御するための制御情報を記憶するレジスタを含む。制御レジスタは、現在の実行点に対応する命令のアドレスを示すプログラムカウンタレジスタ、例外の処理時にレジスタ状態を保存／復元するためのスタックデータ構造のメモリシステム８内の位置のアドレスを示すスタックポインタレジスタ、および機能の実行後に処理が分岐されることになる関数戻りアドレスを記憶するリンクレジスタなどのレジスタを含むことができる。これらは、簡潔性のために図１には示されていない。
【００２２】
図１に示すように、レジスタはまた、ベクトル化されたループの進行を追跡するループカウンタ１６と、現在処理中のベクトルにおける各データ要素のビット数を示すパラメータを記憶する要素サイズレジスタ１８と、１つのベクトルレジスタにおける総ビット数を示すパラメータを記憶するベクトル幅レジスタ２０と、ベクトル演算の述語を制御するベクトル述語レジスタ２２とを含む。これらは、以下により詳細に説明される。いくつかの例では、ベクトル幅レジスタ２０は、所与の装置についてのベクトルレジスタ１４に実装された特定のベクトル幅に応じて装置の製造中に固有とされてもよい。あるいは、ベクトルレジスタファイル１４が異なるベクトル幅を有する異なる構成をサポートする場合、ベクトル幅レジスタ２０は、使用されている現在の幅を示すようにプログラミング可能である。同様に、要素サイズレジスタ１８は、特定の要素サイズが常に所与の装置に使用される場合には固有とされることができ、または装置が異なるデータ要素サイズのベクトルによって処理をサポートする場合には可変とすることができる。いくつかの例では、例えば各ベクトル命令がその命令に使用される要素サイズを指定する場合、要素サイズレジスタ１８は省略されてもよい。ループカウンタ１６は、専用の制御レジスタとして示されているが、他の例では、ベクトル化されたループの進行を追跡するために汎用スカラーレジスタ１２のうちの１つを使用してもよい。
【００２３】
図２は、所定数の後続ベクトル命令の述語を制御するためのベクトル述語命令（ＶＰＴ命令）の例を示している。ベクトル述語命令は、以下を含む複数のフィールドを指定する：
・この命令がＶＰＴ命令であることを識別するオペコード３０；
・ＶＰＴ命令によって処理される目標ベクトルのデータ要素のサイズを指定する要素サイズフィールド３２；
・ベクトル述語命令によって適用される試験条件を指定する条件フィールド３４。例えば、試験条件は、ＥＱ（等価）、ＮＥ（等しくない）、ＧＴ（よりも大きい）、ＧＥ（よりも大きいか等しい）、ＬＴ（よりも小さい）、ＬＥ（よりも小さいか等しい）のうちの１つとして指定されることができる；
・どのくらい多くの後続ベクトル命令がベクトル述語命令によって述語化されるかを制御するためのマスク値を指定するマスクフィールド３６。マスクフィールドはまた、後続ベクトル命令のうちの少なくとも１つがｔｈｅｎ条件ベクトル命令（「Ｔ命令」）またはｅｌｓｅ条件ベクトル命令（「Ｅ命令」）として扱われるべきかどうかを識別することもできる。Ｔ命令の場合、ＶＰＴ命令によって試験された目標ベクトルの対応する要素がその試験条件を通過しなかった場合にはベクトルの所与の部分に対して演算がマスクされる。Ｅ命令の場合、ＶＰＴ命令によって試験された目標ベクトルの対応する要素がその試験条件を通過した場合にはベクトルの所与の部分に対して演算がマスクされる。
・試験条件が要素毎に適用される目標ベクトル値を記憶するベクトルレジスタＱａを指定する目標ベクトルレジスタフィールド３８；
・目標ベクトルと比較するための基準値を指定する比較値フィールド４０；および、
・ベクトル述語レジスタ２２における述語条件が、目標ベクトルの各要素が試験条件を満たすかどうかを判定するための比較演算の結果に設定されるべきかどうか、またはベクトル述語レジスタ２２における述語条件が、ベクトル述語レジスタ２２における述語条件の以前の値と組み合わされた比較演算の結果に設定されるべきであるかどうかを指定する結合フラグフィールド４１。
【００２４】
図２は、ＶＰＴ命令の可能な符号化の例を示しているに過ぎないことが理解される。命令符号化のどの特定のビットが各フィールドに割り当てられるかは、特定の実装のための任意の設計上の選択である。
【００２５】
ＶＰＴ命令は、目標ベクトルの各要素にそれぞれ対応する一連の要素比較演算をトリガする。異なる形式のＶＰＴ命令が提供されてもよく（異なるオペコードによってまたは比較の種類を識別する命令のさらなるフィールドによって識別される）、それぞれ以下の異なる種類の比較を提供する：
・ベクトル比較ＶＰＴ命令の場合、比較値フィールド４０は、さらなるベクトル値を記憶する第２のベクトルレジスタＱｂを指定し、各要素比較演算は、レジスタＱａにおける目標ベクトルの所与の要素をレジスタＱｂにおけるさらなるベクトルの対応する要素と比較する。
・スカラー比較ＶＰＴ命令の場合、比較値フィールド４０は、スカラー値を記憶するスカラーレジスタＲｂを指定し、各要素比較は、レジスタＱａにおける目標ベクトルの対応する要素をレジスタＲｂにおける同じスカラー値と比較する。
・定数比較ＶＰＴ命令の場合、各要素比較は、レジスタＱａにおける目標ベクトルの対応するデータ要素を所定の定数と比較する。定数は、比較値フィールド４０における即値として識別されることができ、または定数比較ＶＰＴ命令を識別するオペコードから暗黙的に所定値（例えば０）とすることができる。
【００２６】
図３は、ＶＰＴ命令に応答して実行される動作の例を概略的に示している。この例では、ＶＰＴ命令は、ベクトル比較形式であるため、第２のレジスタフィールド４０は、ベクトルレジスタＱｂを指定する。この場合、条件フィールド３４は、ＧＴ条件を指定するため、ＶＰＴ命令に応答して、命令デコーダ６は、ベクトルＱａの要素ＱａｉがベクトルＱｂの対応する要素Ｑｂｉよりも大きいかどうかを判定するためにベクトルＱａおよびＱｂの対応するデータ要素Ｑａｉ、Ｑｂｉを比較する各要素比較演算によって多数の要素比較演算を実行するように処理回路４を制御する制御信号を生成する（ここで、ｉはこの例では０から３である）。ＶＰＴ命令に応答して、処理回路４は、各要素比較演算の結果を示すベクトル述語レジスタ（ＶＰＲ）２２に制御情報を設定する。この例では、レーン０、１および３については、ベクトルＱａにおける対応する要素は、ベクトルＱｂにおける対応する要素よりも大きかったため、試験条件が通過した。一方、レーン２については、Ｑａ２≦Ｑｂ２であるため、ＧＴ試験条件は通過しなかった。
【００２７】
図３の例に示すベクトル乗算加算（ＶＭＬＡ）命令などのＶＰＴ命令に続く所定数の後続ベクトル命令のうちの１つを実行するとき、処理回路４は、ＶＰＲ２２に設定された制御情報を読み出し、ＶＰＴ命令によって比較された目標ベクトルの対応する要素についての制御情報によって示される比較演算の結果に基づいて、所与のベクトル処理レーンの所与の部分に関連する演算がマスクされるかどうかを制御する。この例では、データ要素サイズは、ＶＰＴ命令の場合と同様にＶＭＬＡ命令の場合と同じであるため、ＶＭＬＡ命令についての処理の各レーンは、ＶＰＴ命令の単一の要素に対応し、対応する要素比較演算の結果に応じてマスクされるかまたはマスクされない。したがって、レーン０、１および３について、ＶＭＬＡ命令は、ベクトルＱａ、Ｑｃの対応する要素を乗算し、これらの乗算の積をスカラーレジスタＲｎに累積する。レーン２では試験条件が通過しなかったため、このレーンに関連する演算はマスクされ、したがって、積Ｑａ２＊Ｑｃ２は、スカラーレジスタＲｎの値に影響しない。
【００２８】
レーン２における演算をマスクすることは、異なる方法で行うことができる。例えば、レーン２における要素の乗算は、完全に抑制されることができる。あるいは、乗算は依然として実行されることができるが、その結果のデスティネーションレジスタへの加算が抑制される。一般に、マスクは、ベクトルのマスクされた部分に対するベクトル処理が命令の結果に影響しないことを確実にする何らかの方法で実行されることができる。例えば、その部分の結果がデスティネーションレジスタに書き込まれるかどうかを制御するイネーブル信号がベクトルの各部分に対して提供されてもよい。
【００２９】
図３は、先行ＶＰＴ命令によって述語化された単一の命令の例を示しているが、ＶＰＴ命令は、複数の後続命令（ある最大数まで）を述語化してもよく、マスクフィールド３６は、どのくらい多くの命令が制御情報に応じて制御されるべきかを指定してもよい。これは、以下により詳細に説明される。
【００３０】
図４は、ＶＰＴ命令の使用の第２の例を示している。今回、ＶＰＴ命令は、スカラー比較ＶＰＴ命令であり、したがって、目標ベクトルＱａの各データ要素は、レジスタＲｎからの同じスカラー値と比較される。今回、適用された試験条件はＧＥであり、レーン０において通過し、レーン１から３においては通過しなかった。この例における後続ベクトル命令は、ベクトル処理の各レーンがスカラーレジスタＲｎにおけるポインタアドレスに基づいて計算されたメモリ内の位置にベクトルオペランドＱａの対応する要素を記憶するための記憶演算を含むベクトル記憶（ＶＳＴＲ）命令である。しかしながら、ＶＰＴ命令は、レーン１から３についての試験条件に通過しなかったため、この場合、レーン０についての記憶演算のみが実行され、レーン１から３についての記憶演算はマスクされる（したがって、記憶要求は、レーン１から３における要素についてはメモリシステム８に送信されない）。
【００３１】
図３の例とは異なり、図４の記憶命令の場合、命令デコーダ６は、記憶命令をデコードして処理回路４を制御し、各ベクトル処理レーン自体に対応する記憶演算に加えて、ベクトル処理レーンとは独立した追加のポインタ更新動作を実行する（一部の記憶演算は、記憶のために使用されるアドレスを計算する前にポインタを更新することができ、他の形態は、その後にポインタを更新することができる）。ポインタの前記憶または後記憶のインクリメントが使用されるかどうかにかかわらず、スカラーレジスタＲｎに即値を追加するために図４の下部に示されているポインタ更新動作は、ＶＰＴ命令が各レーンにおける各試験条件を通過したかまたは通過しなかったかにかかわらず実行されることができる。すなわち、ポインタデータ演算は、ＶＰＴ命令によって設定された制御情報とは独立して実行される追加演算とすることができる。したがって、ＶＰＴ命令の結果にかかわらず、ポインタ更新演算はとにかく進行する。この述語化は、後続命令についてのベクトル処理レーンに影響するが、スカラーレジスタ更新などのベクトル処理レーンとは独立した後続命令のうちの１つによってトリガされる他の非ベクトル演算は、レーンマスクによって影響を受けない。追加の非ベクトル演算は、たとえＶＰＴ命令がマスクされる所与のベクトル命令の全てのレーンをもたらすとしても実行される。
【００３２】
上述したＶＰＴ命令は、データ依存制御フローを有するループのベクトル化を可能にするために有用であり得る。データ依存演算を含むループを有する高水準プログラムコードの例が以下に示される：
ｆｏｒ（ｉｎｔ  ｉ＝０；ｉ＜ＬＥＮ；ｉ＋＋）｛
ｉｆ（ｄａｔａ［ｉ］＞＝ＴＨＲＥＳＨＯＬＤ）｛
ｄａｔａ［ｉ］＝０；
｝
｝
したがって、処理される長さＬＥＮの要素の配列ｄａｔａ［］があり、配列の各要素ｄａｔａ［ｉ］について、要素は、閾値と比較され、閾値未満であればゼロに設定されることになる。純粋なスカラー命令の場合、配列の各要素は、実行されるいくつかの命令（１つはメモリからデータをロードするもの、１つは閾値と比較するもの、および他のものはデータ値が閾値未満の場合に０の値をメモリに書き戻すもの）を必要とする。
【００３３】
これがベクトル命令を使用してアセンブリコードにコンパイルされると、以下のシーケンスが提供されることができる：
ＶＭＯＶ  Ｑ７，＃０
ＤＬＳＴＰ．３２  ＬＲ，Ｒ４，ｌｏｏｐＥｎｄ  ／／Ｒ４＝ＬＥＮ
ｌｏｏｐＳｔａｒｔ：
ＶＬＤＲ．３２  Ｑ０，［Ｒ２］                ／／Ｒ２＝データポインタ
ＶＰＴ．３２  ＧＥ，Ｑ０，Ｒ０                ／／Ｒ０＝ＴＨＲＥＳＨＯＬＤ
ＶＳＴＲ．３２  Ｑ７，［Ｒ２］，＃１６        ／／ＶＰＩに基づくＶＳＴＲＳのレーン述語化
ＤＬＥ  ｌｏｏｐＳｔａｒｔ
ｌｏｏｐＥｎｄ：
【００３４】
したがって、ループの各反復が配列の複数の要素を処理するためのベクトル命令を含む場合にループが実行される。ロード命令ＶＬＤＲは、メモリ内の配列からのデータ値のブロックをベクトルレジスタＱ０にロードする。ＶＰＴ命令は、これらの各要素をレジスタＲ０におけるスカラー閾値と比較し、各要素比較の結果に基づいて制御情報を設定する。後続の記憶命令ＶＳＴＲは、以前のデータ値が閾値以上であるとＶＰＴ命令が判定した配列の要素に値＃０のみを記憶するように、要素毎に述語化される。（上記図４について説明したように）全てのレーンがＶＰＴ命令によってマスクされていたとしても、記憶命令ＶＳＴＲについてのポインタ更新が進行するのを可能にすることにより、これは、ループの次の反復がメモリ内の配列から次のデータのチャンクにアクセスするように、データポインタＲ２がインクリメントされるのを可能にすることに留意されたい。したがって、この種のＶＰＴ述語は、ベクトル化されたループをサポートするために非常に有用である。
【００３５】
このアプローチは、どの述語情報が使用されるべきかを識別する符号化に情報を含めるための記憶命令自体の必要性を回避し、特定のベクトル命令によって参照されることができる専用の述語レジスタのバンクを提供する必要性を回避する。代わりに、アセンブリコードにおけるＶＰＴ命令に続く多数の命令は、それらの符号化にかかわらずＶＰＴ命令によって影響を受けると単純に仮定される。これはまた、保存および復元される状態の量を削減することによって例外処理を簡素化する。
【００３６】
図５〜図７は、ＶＰＴ命令を先行させることによってベクトル演算の実行を制御する３つのさらなる例を示している。図３および図４の例では、ＶＰＴ命令のデータ要素サイズは、述語化される後続ベクトル命令のデータ要素サイズと同じであるが、これは必須ではなく、図５〜図７は、要素サイズが異なる場合の３つの例を示している。図５の例では、ＶＰＴ命令は、述語に基づいて制御される後続ベクトル加算（ＶＡＤＤ）命令よりも小さいデータ要素サイズを指定する。この場合、ＶＰＴ命令は、１６ビット要素の粒度で試験条件の通過または不通過の結果を指定する制御情報の設定をもたらすことができるが、ＶＰＴ命令によって述語化される後続ベクトル加算命令は、示されているように様々な合計結果ｓｕｍ０、ｓｕｍ１、ｓｕｍ２、ｓｕｍ３を提供するように、２つの入力ベクトルのそれぞれ３２ビット要素を追加することができる。
【００３７】
図５に示すように、１つのアプローチでは、ＶＰＴによって設定される制御情報は、ベクトルレジスタの対応する部分について設定された一連のイネーブルビット４５（「述語ビット」としても知られる）を含むことができ、各イネーブルビット４５は、ベクトルレジスタの対応する部分への要素マッピングのための要素比較演算がＶＰＴ命令に対して通過または不通過となったかどうかを示す。したがって、図５に示すＶＰＴ命令は、試験条件が通過した場合に１６ビットレーンに対応する部分について設定される「１」に等しいイネーブルビットと、試験条件が通過しなかった場合に他のレーンについて設定される「０」のイネーブルビットとをもたらすことができる。この例では、イネーブルビット４５は、それぞれ、目標ベクトルの８ビット部分に対応する。したがって、ＶＰＴ命令のデータ要素サイズが８ビットよりも大きい場合（例えば、この例では１６ビット）、目標ベクトルの対応する要素が試験条件を通過したかまたは通過しなかったかどうかに応じて、複数の隣接するイネーブルビット４５のブロックが同じ値（１または０）に設定される。
【００３８】
後続のＶＡＤＤ命令を実行するとき、デスティネーションレジスタＱｒの所与の部分の書き込みは、その部分に対応するイネーブルビットがＶＰＲ２２においてゼロである場合に抑制される。したがって、ＶＡＤＤ命令のデータ要素サイズがＶＰＴ命令のデータ要素サイズよりも大きい場合、これは、ＶＡＤＤ命令のレーンの結果の一部のみがデスティネーションレジスタＱｒに書き込まれることをもたらすことができる（例えば、ＶＰＴ命令によって試験されたベクトルの対応する部分において、要素Ｅ４が試験条件を通過したが、要素Ｅ５が通過しなかったことから、レーン結果ｓｕｍ２の下位部分のみがデスティネーションレジスタＱｒに書き込まれる図５におけるレーン２を参照）。したがって、要素サイズの不一致のためにイネーブルビットが所与のレーンに対して部分的にしか設定されない場合、レーンの結果のビットの全てがデスティネーションレジスタに出力されるわけではない。
【００３９】
あるいは、図７に示すように、他のアプローチは、レーンが全体としてしかマスクされることができるかまたはマスクされることができないように、各レーンのマスクがそのレーンに対応するイネーブルビットのうちの１つに基づいて制御されてもよい。例えば、レーン２において、レジスタＱｒへの合計値ｓｕｍ２の書き込みは、そのレーンに対応する最下位イネーブルビット４７に依存することができる（この場合、要素Ｅ５が通過しなかったかどうかにかかわらず、ＶＰＴ命令の目標ベクトルの対応する部分における最下位要素Ｅ４がその試験条件を通過したことから、レーン２はマスクされない）。このアプローチは、データワードの一部のみのロード／記憶を実行することが望ましくないかまたは実行不可能なことがあるロード／記憶命令などのいくつかの種類のベクトル命令にとって好ましい場合がある。
【００４０】
いくつかのシステムは、制御レジスタにおけるプログラミング可能なパラメータセットを用いてまたはどのオプションが使用されるべきかを指定するＶＰＴ命令の符号化において、図５および図７に示すアプローチの双方をサポートすることができる。他のハードウェアの実施形態は、図５または図７に示す技術のうちの１つまたは他のものをサポートすることができる。実際には、図５に示すアプローチは、後続ベクトル命令に使用される特定のデータ要素サイズにかかわらず、ベクトルの所与の部分とその部分のマスクを制御するために使用される特定のイネーブルビット４５との間に固定マッピングが存在するため、ハードウェアで実装することがより簡単であり得る。
【００４１】
図６に示すように、後続ベクトル命令がＶＰＴ命令よりも小さいデータ要素サイズを有することも可能である。この場合、ＶＰＴ命令において試験された目標ベクトルの同じデータ要素に対応する全てのバイトイネーブルビット４５は、１または０のいずれかの同じ値に設定され、この後続ベクトル命令におけるより小さいデータ要素の制御グループは、対応する要素比較の結果に応じて、マスクされるかまたはマスクされない。
【００４２】
したがって、要約すると、ＶＰＴ命令の要素と後続ベクトル命令において処理される要素との間に１対１、１対多または多対１のマッピングが存在する可能性がある。図５に示すように、２つの命令のデータ要素においてサイズの不一致がある場合、所与のレーンの一部のみを部分的に抑制することも可能であるため、後続命令における処理レーン全体がマスクされることは必須ではない。一般に、後続ベクトル命令の場合、制御情報は、ＶＰＴ命令を受けた目標ベクトルにおける対応する要素に対して実行された要素比較演算の結果に応じて、所与のレーンの所与の部分がマスクされるかどうかを制御する。
【００４３】
また、図５に示すように、データ要素の所与の部分において演算をマスクする方法にとって異なるオプションがある。レーン０に示すように、１つのオプションは、演算がマスクされるデスティネーションレジスタの部分を所定値に設定することである。あるいは、デスティネーションレジスタのマスクされた部分は、マスクされていないレーンの追加命令の新たな結果が、マスクされたレーンについての同じデスティネーションレジスタに以前に記憶された古い結果とマージするように、それらの以前の値を保持することができる。したがって、場合によっては、ＶＰＴ命令は、（そのオペコードまたは別の制御パラメータを介して）マージまたはゼロ化述語が使用されるべきかどうかを指定することができる。あるいは、述語化された命令（例えば、図５〜図７の例におけるＶＡＤＤ）は、マージまたはゼロ化述語が適用されるべきかどうかを示すことができ、同様に、これは、オペコードまたは別の制御パラメータを介して行うことができる。
【００４４】
マスクのための他のオプションは、例えば、ベクトルレーンの所与の部分に対して実行される算術演算を抑制するために、ベクトルのマスクされた部分に対するベクトル演算の実行を全て不可能にすることである。
【００４５】
図８は、ＶＰＴ命令に応答してＶＰＲ２２に記憶される制御情報の例を示している。ＶＰＲ２２は、各要素比較演算の結果を示す述語フィールド５０と、述語フィールドに応じてどの後続ベクトル命令が処理されるべきかを制御する１つ以上のマスクフィールド５２とを含む。この例では、後述するように、ベクトル命令のオーバーラップされた実行をサポートするための複数のマスクフィールド５２があるが、単一のマスクフィールド５２のみを使用してＶＰＲ２２を実装することが可能である。
【００４６】
述語フィールド５０は、上述したイネーブルビット４５を指定することができる。各イネーブルビットは、システムによってサポートされる最小要素サイズに対応するベクトルレジスタのチャンクに対応する。例えば、ベクトル幅が１２８ビットであり且つサポートされる最小要素サイズが８ビットである場合、述語レジスタは、ベクトルの８ビットチャンク（１バイト）にそれぞれ対応する１６バイトのイネーブルビットを含むことができる。以下の例では、バイトイネーブルビットは、ベクトルの対応する８ビットチャンクについての対応する演算が許可される場合には１に設定され、演算がマスクされる場合にはゼロに設定される。他のシステムは、イネーブルビットの解釈を反転し、対応するイネーブルビットが１である場合に演算をマスクすることができることが理解される。
【００４７】
以下の例に示すように、Ｔ／Ｅ命令の処理のために述語フィールド５０のビットを反転することが可能であり、述語フィールド５０は、ＶＰＴ命令によって実行される要素比較の実際の結果を常に明示的に示すわけではないことに留意されたい（Ｅ命令が処理されている場合には逆の結果を示すことがある）。代替実施形態では、要素比較演算の実際の結果を識別する情報を保持することが重要である場合、「１」または「０」のイネーブルビットがベクトルの対応する部分に対するベクトル演算のマスクをトリガすべきであるかどうかを示すために、追加のｔｈｅｎ／ｅｌｓｅビットがＶＰＲ２２に設けられることができる。これは、ＶＰＴに続く命令の「ｔｈｅｎ」および「ｅｌｓｅ」ブロックが、述語フィールド５０の状態を反転する必要なくサポートされることを可能にする。ｔｈｅｎ／ｅｌｓｅビットは、ＶＰＲレジスタからそれらを読み出してマスクを制御する場合に述語フィールド５０が変更されないかまたは反転されて使用されるかどうかを制御する。
【００４８】
マスクフィールド５２は、述語フィールド５０の内容に基づいて、どのくらい多くの残っているベクトル命令がマスクされるべきかを追跡する。ＶＰＴ命令を実行するとき、各マスクフィールド５２は、図９の表に示すように符号化された初期値に設定される。所与のＶＰＴ命令に使用される初期マスク値は、ＶＰＴ命令自体のマスクフィールド３６によって指定されてもよく、またはＶＰＴ命令において符号化された他の情報からいくつかの論理回路によって導出されることができる。しかしながら、命令における初期マスク値を直接符号化するのが最も簡単であり得る。異なるＶＰＴ命令構文ＶＰＴ、ＶＰＴＴ、ＶＰＴＥ、ＶＰＴＴＴＥなどは、後続命令がＶＰＴ命令によって影響を受けることを簡単に理解するために使用され、述語化される４つまでの後続命令Ｉ０、Ｉ１、Ｉ２、Ｉ３のパターンは、ＶＰＴ命令構文の最後に文字ＴおよびＥの集合によって示される。ここで、「Ｔ」は、その試験条件を通過しない要素に対応するベクトルの部分にマスクが適用される「ｔｈｅｎ−条件」命令を表し、「Ｅ」は、その試験条件を通過する要素に対応するベクトルの部分にマスクが適用される「ｅｌｓｅ−条件」命令を表す。
【００４９】
４ビットマスク値は、１から４の間とすることができるＶＰＴ命令によって述語化されるべき後続ベクトル命令の数を識別する。述語化されるべき後続ベクトル命令の数は、マスク値における最下位「１」ビットのビット位置によって表される。最下位ビット「１」が最上位ビット（０ｂ１０００）にある場合、１つの後続命令Ｉ０のみが述語化される。最下位「１」ビットが上位２番目のビット（０ｂｘ１００、ここで、ｘは０または１のいずれかである）にある場合、２つの後続命令Ｉ０およびＩ１が述語化される。最下位「１」ビットが上位３番目のビット（０ｂｘｘ１０）にある場合、３つの後続命令Ｉ０、Ｉ１、Ｉ２が述語化される。最下位「１」ビットが最下位ビット位置（０ｂｘｘｘ１）にある場合、４つ全ての後続命令Ｉ０、Ｉ１、Ｉ２、Ｉ３が述語化される。
【００５０】
ＶＰＴ命令に続く第１の命令Ｉ０は、常にＴ命令として扱われる。述語化されるべき後続ベクトル命令の数が１よりも大きい符号化では、（マスク値の最下位「１」ビットと最上位終端との間のビット位置にある）上記示される「ｘ」ビット値は、述語化されるべきＴおよびＥ命令のパターンを示す。一般に、マスクの最下位１ビットと最上位終端との間のマスクのこの部分における１に等しい各ビット値は、Ｔ命令からＥ命令への状態の変化、またはその逆があることを示す。例えば、０ｂ０００１を符号化するマスクは、上位３ビットに「１」ビットがなく、したがって、後続命令のいずれも先行命令に対してＴ／Ｅ状態を変更しないことから、４つ全ての後続命令Ｉ０−Ｉ３がＴであることを示す。一方、例えば０ｂ０１１０を符号化するマスクは、Ｉ１がＩ０（双方のＴ）と同じＴ／Ｅ状態であることを最初の「０」が示すことから、３つの後続命令Ｉ０−Ｉ２がそれぞれＴ、Ｔ、Ｅとして述語化されるべきであることを表す一方で、次のビット「１」は、Ｉ２がＩ１と比較して逆のＴ／Ｅ状態である、すなわちＩ２はＥ命令であることを示す。同様に、マスクビットの他のパターンは、図９に示す方法で解釈されることができる。
【００５１】
図１０〜図１２は、この初期値にマスク値を設定する方法が、後続命令がＴおよびＥ命令の正しい述語化結果および所望のパターンにしたがって処理されることを可能にする３つの例を示している。
【００５２】
ベクトル命令の実行は、「ビート」と呼ばれる部分に分割され、各ビートは、所定サイズのベクトルのセクションの処理に対応する。ビートは、完全に実行されるかまたは全く実行されないベクトル命令のアトミック部分であり、部分的に実行することはできない。１つのビートで処理されるベクトルのセクションのサイズは、アーキテクチャによって定義され、ベクトルの任意の部分とすることができる。図１０〜図１２の例では、ビートは、ベクトル命令あたり４ビートが存在するように、ベクトル幅の４分の１に対応する処理として定義される。明らかに、これは、ほんの一例に過ぎず、他の例では、例えば２または８などの異なる数のビートを使用することができる。１つのビートに対応するベクトルのセクションは、処理されるベクトルのデータ要素サイズと同じサイズ、より大きいまたはより小さくすることができる。したがって、要素サイズが実装毎に変化する場合であっても、または異なる命令間の実行時に変化する場合であっても、ビートは、ベクトル処理の一定の固定幅である。１つのビート内で処理されるベクトルのセクションが複数のデータ要素を含む場合、各要素が独立して処理されることを確実にするために、各要素間の境界においてキャリー信号が無効化されることができる。１つのビートで処理されるベクトルのセクションが要素の一部のみに対応し、ハードウェアが複数のビートを並列に計算するには不十分である場合、処理の１つのビート間に生成されたキャリー出力は、２つのビートの結果が一体にデータ要素を形成するように処理の後続ビートに対してキャリー入力として入力されることができる。
【００５３】
処理回路４の異なるハードウェア実装は、抽象的なアーキテクチャクロックの１つの「チック（ｔｉｃｋ）」において異なる数のビートを実行することができる。ここで、「チック」は、アーキテクチャ状態の進歩の単位に対応する（例えば、単純なアーキテクチャでは、各チックは、次の命令までのポイントにプログラムカウンタを更新することを含む、命令を実行することに関連する全てのアーキテクチャ状態を更新するインスタンスに対応することができる）。パイプライン化などの公知のマイクロアーキテクチャ技術は、単一のチックがハードウェアレベルで実行するために複数のクロックサイクルを必要とすることがあり、実際にハードウェアレベルで単一のクロックサイクルが複数の命令の複数の部分を処理することができることを意味することができることが当業者によって理解される。しかしながら、そのようなマイクロアーキテクチャ技術は、チックがアーキテクチャレベルではアトミックであるため、ソフトウェアには見えない。簡潔性のために、そのようなマイクロアーキテクチャは、本開示のさらなる詳細な説明において無視される。
【００５４】
図１０に示すように、いくつかの処理回路４は、各チックにおいて４つのビートが実行されるように、所与のベクトル命令の全てのビートを並列に実行するのに十分なハードウェアを有することができる。これは、命令全体が１チックで完了することができるため、アーキテクチャレベルで異なる命令の実行をオーバーラップさせる必要がないことを意味する。図１０に示すように、ベクトル述語命令および多数の後続命令Ｉ０からＩ４を含むベクトル命令のシーケンスがある場合、前の命令が終了するまで１つの命令の処理は開始されない。
【００５５】
図１０の下部は、命令のシーケンスを制御するときにＶＰＲ２２に設定された制御情報の例を示している。行１から５は、それぞれチック１から５の終端に設定されたＶＰＲ制御情報（すなわち、それぞれチック２から６における命令Ｉ０からＩ４の処理を制御するために使用される制御情報）を示す。この例では、ＶＰＴ命令は、ＶＰＴＴＴＥとして指定されているため、ＶＰＴ命令に応答して、図９に示す符号化にしたがって、マスク値００１１は、ＶＰＲ２２の各マスクフィールド５２に書き込まれる。この例のＶＰＴ命令は、３２ビットのデータ要素サイズを指定するため、ＶＰＴ命令の処理の各ビートは、３２ビット要素の対応する要素比較をトリガする（この例では、データ要素サイズは、１ビートで処理される処理単位に一致するが、これは必須ではない）。ＶＰＴ命令の目標ベクトルのレーン０および３は、それらの試験条件を通過しないが、レーン１および２は通過するため、ＶＰＲ２２の述語フィールド５０は、「１」に等しいレーン１および２に対応するバイトイネーブルビットおよび「０」に等しいレーン０および３に対応するバイトイネーブルビットによって設定される。
【００５６】
後続ベクトル命令を処理するとき、マスクフィールドが非ゼロである場合、フィールド５０の述語ビットに基づいて述語化が適用される。マスクフィールドが「０」に設定された全てのビットを有する場合、述語化は適用されない。したがって、チック１の終端において、マスクフィールドは、００１１に設定されているため、チック２では、後続ベクトル命令Ｉ０が述語レジスタ５０におけるバイト述語ビットに基づいて述語化され、述語ビットがゼロであるベクトルの位置に関連する演算がマスクされる。ＶＰＴ命令が試験条件を通過しなかったベクトルの部分にマスクが適用されていることから、命令Ｉ０はＴ命令である。
【００５７】
チック２の終端において命令Ｉ０からＩ１に切り替えると、図１０の行２に示すように、更新されたマスク値を生成するために、マスクフィールドのそれぞれが１ビット位置だけ左にシフトされる。このポイントでマスクフィールドからシフトアウトされた上位ビットは、０のビット値を有するため、命令Ｉ１もまたＴ命令として扱われるように、述語フィールド５０は反転せず、同じままである。同様に、マスクフィールドは、チック３の間は非ゼロであるため、命令Ｉ１は、述語フィールド５０に基づいて選択的にマスクされる。
【００５８】
チック３と４との間で、命令Ｉ１からＩ２に切り替えると、マスクフィールドは、同様に１ビット位置だけ左にシフトされ、同様にマスクからシフトアウトされた上位ビットはゼロになり、したがって、述語フィールドの反転はない。したがって、命令Ｉ２もまた、Ｔ命令として扱われる。図１０の行３は、命令ｉ２に使用されるＶＰＲ値を示している。
【００５９】
しかしながら、命令Ｉ２から命令Ｉ３へと切り替えると、マスクフィールドの左シフトは、マスクからシフトアウトされた１のビット値をもたらし、これは、図１０の行４に示すように「１」および「０」の反転値となるように、述語フィールド５０の反転をトリガする。行４は、チック５において命令Ｉ３に使用される制御情報を示している。述語ビットは、反転されているため、Ｉ３は、元のＶＰＴ命令が試験条件を通過したベクトルの部分にそのマスクが適用されることからＥ命令であり、今回は元のＶＰＴ命令がその試験条件を通過しなかったベクトルの部分はマスクされない。これは、元のＶＰＴ命令によって指定されたＴＴＥとしての命令Ｉ１−Ｉ３の指定と一致する。
【００６０】
最後に、チック５の終端において命令Ｉ３からＩ４に切り替えると、左シフトが同様に各マスクフィールドに適用され、これは、マスク値がここでは全てゼロになるように、シフトアウトされたマスクの最後の「１」ビットをもたらす。これは、ＶＰＴ命令の結果に対して条件付けされないようにチック６において処理される後続命令Ｉ４が述語フィールド５０の内容とは独立して処理されることを意味する。したがって、最下位「１」ビットが所定数の後続の命令の後にマスクからシフトアウトされるように配置される値にマスク値を設定することにより、これは、どれだけ多くの命令がＶＰＴ命令に応答して設定された述語値によって影響を受けるかを制御することがわかる。この場合、「１」は、マスクの最下位ビットに配置されていたため、それをシフトアウトするように４回の後続シフトを要し、したがって、これは、４つの後続命令Ｉ０からＩ３がＶＰＴ命令によって述語化されることを意味する。
【００６１】
チック５の終端においてシフトアウトされた上マスクフィールドは「１」であるため、マスクが全てゼロになるときでさえも、チック６の準備ができている述語フィールド５０のビットを反転するために他の反転が適用され、述語ビットは、とにかく命令Ｉ４の結果に影響を与えないことに留意されたい。第１に、これは、シフトアウトされた上位ビットが１であるときに述語フィールドのビットが単純に反転されることができるため、ハードウェアをより簡単にする（この場合、マスクフィールドが全てゼロになったときに特別なケースを検出するための追加の回路を必要とせず、反転を抑制する）。また、命令のＶＰＴブロックの終端において述語ビットを反転させることは、図１３に関して以下に説明されるように、試験条件のより複雑な組み合わせを評価するためにＶＰＴ命令の「ＡＮＤ」形式によってその後に使用されることができる値に述語ビット５０を設定するのに有用であり得る。
【００６２】
図１０は、マスクフィールド５２のそれぞれが同一値に設定され、各ベクトル命令の適切なビートを処理するときに読み取られる例を示している。異なるベクトル命令の実行間に重複がない場合の代替アプローチは、ＶＰＴ命令がマスクフィールドのうちの１つ（例えばマスクフィールド０）に書き込むだけであり、ベクトル処理の各ビットが後続命令を述語化するときに同じマスクフィールドを参照することである。プロセッサが図１０に示す形式のオーバーラップしていない実行のみをサポートしていた場合、単一のマスクフィールドのみを提供すれば十分である。あるいは、そのような場合の他のアプローチは、単一のマスクフィールド（ＭＡＳＫ０）に関連付けられたデータストレージを実装するだけであるが、そのマスクフィールドの値を他の全てのマスクフィールドに複製することである。このアプローチは、命令がオーバーラップしているか否かにかかわらず、ソフトウェアに対する処理回路の一貫したビューを提供する。プロセッサがそのような複製スキームを実装した場合、通常、複製マスクフィールドＭＡＳＫ１からＭＡＳＫ３への書き込みは無視される。
【００６３】
しかしながら、より小型でエネルギ効率の高いプロセッサでは、所与のベクトル命令の全てのビートを並列に処理するのに十分なハードウェアリソースがない場合がある。例えば、ベクトル処理単位の幅は、例えばベクトルレジスタの全体の幅の半分など、より狭くすることができ、この場合、所与のベクトル命令の処理は、図１１に示すように、最初の２つのビートを処理するための一方および第２の２つのビートを処理するための他方であるアーキテクチャクロックの２つのチックを必要とする。そのような場合、第１の命令が完了すると第２の命令が開始されるように何らオーバーラップさせることなくベクトル命令をさらに実行することは可能であるが、これは、利用可能なハードウェア資源を非効率的に使用することにつながることができる。一方ではメモリシステム８と相互作用するロード／記憶命令および他方では乗算などの算術命令など、異なる種類のベクトル命令の比較的均等な混合があるためにベクトル命令を使用するアプリケーションでは比較的一般的である。処理がロード／記憶命令と乗算命令との間で交替する場合、オーバーラップなしで命令を実行すると、比較的高価なハードウェアブロック（乗算累積ユニットまたはロード／記憶ユニットなど）のうちの１つが未使用のままである場合、比較的長期間につながり、性能を低減してより多くの電力を消費する可能性がある。
【００６４】
図１１に示すように、第２のベクトル命令のビートの第１のサブセットが第１の命令のビートの第２のサブセットと並列に実行されるように、処理が異なるベクトル命令の実行とオーバーラップすることができる場合には、資源のより効率的な使用が達成されることができる。図１１の例では、命令Ｉ０のビート０および１は、ＶＰＴ命令のビート２および３と並列に実行され、命令Ｉ０／Ｉ１およびＩ１／Ｉ２は、同様の方法でオーバーラップされる。このオーバーラップした実行は、必ずしも可能ではないことがあるが（例えば、命令間の依存性が存在することがあるか、または２つの連続する命令が同じハードウェアユニットを必要とする場合、第２のものは、第１のものが完了するのを待つ必要がある場合がある）、多くの場合、異なるハードウェアユニットを使用するベクトル命令は、多くのベクトル演算が同じレーン内に大部分とどまるため、異なるレーン間に何ら依存性を有しないことがある。例えば、所与のベクトル命令Ｉ１のレーン０は、先行命令Ｉ０のレーン０の結果に依存することがあるが、Ｉ１のレーン０は、Ｉ０のレーン１、２、３に依存する可能性が低いため、Ｉ１のレーン０は、Ｉ０のレーン０が完了すると開始することができる（そして、連続するベクトル命令の他のペアについても同様に）。図１１に示す方法で命令のいくつかのビートの実行をオーバーラップさせることにより、処理性能を高めるように所与のハードウェアユニットの利用率が改善されることができる。これはまた、乗算累積ユニットなどの比較的高価なハードウェアブロックがアクティブなままにしなければならない時間を短縮することによって電力を節約するのにも役立つことができる。
【００６５】
図１１は、このようにして実行がオーバーラップした場合にＶＰＴ命令についてのＶＰＲ２２における制御情報を設定する例を示している。図１１の行１から４は、それぞれ、チック１から４の終端において設定されたＶＰＲの内容を示している（すなわち、チック２から５における処理のビートの演算をそれぞれ制御するためのＶＰＲ内容）。マスクフィールド０および１は、所与の命令のビート０および１の間に設定／読み出され、マスクフィールド２および３は、所与の命令のビート２および３の間に設定／読み出される。同様に、述語フィールドは、ビート０および１または２および３にそれぞれ対応するように効果的に分割される。
【００６６】
チック１では、ＶＰＴ命令のビート０および１が実行される。今回、ＶＰＴ命令は、ＶＰＴ命令に続く２つの後続命令が述語化されることを示すＶＰＴＴとして指定され、それらは双方ともｔｈｅｎ命令（Ｔ）として扱われるべきである。したがって、図９の符号化にしたがって、ＶＰＴ命令のビート０／１は、フィールド０／１をマスクするようにマスク値０１００の書き込みを制御する。マスクフィールド２および３は、最近のＶＰＴ命令がない場合には通常００００であるそれらの前の値を保持する。今回は、要素サイズが１６ビット、すなわち１ビートの半分であるため、ビート０および１は、１６ビット要素に対して４つの要素比較演算をともに実行し、これらの要素比較の結果は、述語フィールド５０の下位半分に書き込まれる。述語ビットは、ベクトルの８ビットチャンクの粒度で指定されるため、１６ビット要素比較演算あたり２ビットが存在し、したがって、各要素の比較の結果に応じてビット対は０または１に設定される。
【００６７】
チック２では、ベクトル命令Ｉ０の最初の２つのビートは、マスクフィールド０および１が非ゼロであることから、述語フィールド５０の下位チャンクの述語値に基づいて制御される。ＶＰＴ命令によって設定されてから述語フィールドの下位半分の反転がないため、Ｉ０はＴ命令である。また、チック２の間、ＶＰＴ命令のビート２および３もまた実行され、これは、目標ベクトルの上位４つの１６ビット要素に対して実行されるさらなる要素比較をもたらす。処理回路４は、各要素比較の結果を示すバイト述語ビットを指定するために述語フィールドの上位半分を設定する。同様に、ＶＰＴ命令がＶＰＴＴとして指定されているため、初期マスク値は、マスクフィールド２および３において０１００に設定される。ＶＰＴ命令は、チック２の間にフィールド２および３をマスクするために書き込まれていることから、これらのマスクフィールドは、チック２の終端においてシフトされたままではない。しかしながら、チック２の終端において、マスクフィールド０、１は、（ＶＰＴ命令は、このチックにおいてこれらのフィールドを更新しないことから）後続命令Ｉ１のビート０および１を制御するためのマスクを生成するように１ビット位置だけシフトされたままにされる。この段階で、マスクフィールド０、１からシフトアウトされたビットは０に等しく、したがって、述語フィールドの下位半分の反転はない。したがって、チック３の開始時に、ＶＰＲ２２は、図１１の行２に示されているとおりである。
【００６８】
チック３では、全てのマスクフィールドが非ゼロである。命令Ｉ１のビート０および１は、マスクフィールド０および１に基づいて制御され、述語フィールド５０の下位半分に基づいて述語化され、命令Ｉ０のビート２および３は、マスクフィールド２および３に基づいて制御され、述語フィールド５０の上位半分に基づいて述語化される。
【００６９】
チック３の終端において、マスクフィールドの全てが１ビット位置だけ左シフトされる。マスクフィールド２／３の場合、これは、チック２の終端においてマスクフィールド０／１に対して起こったのと同じシフトをもたらし、同様に、シフトアウトされたビットはゼロであるため、述語フィールド５０の上位半分の反転はない。しかしながら、マスクフィールド０／１の場合、左シフトは、ここではマスクフィールドからシフトアウトされた最後の「１」ビット値をもたらし、これらのマスクフィールドは全てゼロになり、これは、チック４の間に命令Ｉ２のビート０および１が述語とは独立して実行されることを意味する。これは、ＶＰＴＴ命令が次の２つのベクトル命令にのみ影響し、Ｉ２は述語に依存してはならないため正しい処理である。マスクフィールド０および１からシフトアウトされた上位ビットが「１」であるため、述語フィールド５０の下位半分は、チック３および４の間の遷移時に反転される。しかしながら、マスクフィールド２および３は、チック４において依然として非ゼロであるため（図１１の行３を参照）、チック４の間に実行される命令Ｉ１のビート２および３は、依然として述語フィールド５０の上位半分に依存する。
【００７０】
最後に、チック４の終端において、他の左シフトが各マスクフィールドに適用され、これは、マスクフィールド２／３もまた全てゼロになることをもたらすため、命令Ｉ２のビート２および３は、チック５の間に述語値５０とは独立して実行される。同様に、マスクフィールド２および３からシフトアウトされた上位ビットは「１」であるため、述語フィールド５０の上位半分は、チック４および５の間の遷移時に反転される。
【００７１】
要約すると、後続ベクトル命令の各ビートの処理は、実行されるベクトル命令のビートに対応するマスクフィールドおよび述語フィールドの部分によって独立して制御される。同様に、チックの終端において述語フィールドの一部が反転されるかどうかは、その部分に対応するマスクフィールドからシフトアウトされたビットが１または０であるかどうかに依存する。
【００７２】
図１２は、連続する命令間でより大きな程度のオーバーラップが実行される他の例を示している。処理回路４は、チックあたりに１ビートの処理しかサポートしない処理ハードウェアを有することができ、したがって、所与のベクトル命令の処理は、４チックにわたって広げる必要があり得る。この場合、ハードウェアユニットの使用率をより高く維持するために、図１２の上部の図に示すように第２の命令のビート０が先行命令のビート１と並列に開始するように、可能な異なるベクトル命令が実行時に互い違いにされることができる。
【００７３】
この場合、マスクフィールド０−３の対応する１つからそれぞれ設定または読み取られる所与の命令についてのビート０−３、および述語フィールド５０はまた、四半分に分割され、各四半分は、ＶＰＴ命令の処理の対応するビートに続いて設定される。図１２の行１から７は、それぞれチック１から７の終端におけるＶＰＲ２２の内容（すなわち、それぞれチック２から８において実行される処理のビートを制御するための制御情報）を示している。今回、ＶＰＴ命令はＶＰＴＥＥとして指定され、データ要素サイズは８ビットであるため、各ビートは４つの要素に対応し、述語フィールド５０の各バイト述語ビットは、ＶＰＴ命令によって指定された目標ベクトルの対応する８ビット要素の要素比較の結果に応じた他のビットから独立して設定される。
【００７４】
チック１では、ＶＰＴ命令のビート０が実行され、マスクフィールド０は、ＶＰＴＥＥ命令を示すために１０１０に設定される。述語ビットは、対応する要素比較の結果に応じて、述語フィールド５０の下位半分に書き込まれる。
【００７５】
チック２では、図１２の行１に示すＶＰＲの内容は、述語フィールド５０の下位四半分の述語ビットに基づいて述語化されるように、命令Ｉ０のビートゼロの処理に使用される。また、チック２では、ＶＰＴ命令のビート１が実行され、マスクフィールド１に初期値１０１０を書き込み、対応する要素比較の結果に基づいて述語フィールドの第２の四半分において述語ビットを更新する。チック２の終端において、マスクフィールド０の左シフトがあり、シフトアウトされたマスクフィールドの上位ビットは「１」であるため、チック３の始端において、ＶＰＲ２２の内容が図１２の行２に示すものであるように、述語フィールドの下位四半分の反転がある。述語フィールドの下位四半分が反転されたため、これは、チック３の間、試験条件がＶＰＴ命令によって通過された部分に対応するベクトルの部分においてその演算がマスクされるため、命令Ｉ１のビート０が「ｅｌｓｅ」命令を表すことを意味する。
【００７６】
同様に、図１２の残りの行に示すように、ＶＰＴ命令の異なるビートが実行されると、対応する要素比較の結果に基づいて述語フィールド５０の対応する部分が生成され、各連続マスクフィールドが連続チックの初期値に設定される。各チックの終端において、全てのマスクフィールドが１ビット位置だけ左シフトされ、シフトアウトされたビットが「１」に等しい任意のマスクフィールドについて、述語フィールドの対応する部分の反転が存在する。最終的に、各マスクフィールドは、全ての「１」ビットがシフトアウトされると全てゼロになり、これは、命令Ｉ３の対応するビートが処理されることになるチックの時間において所与のマスクフィールドが全てゼロになるように（Ｉ３は述語とは独立に処理される最初の命令であるため）、異なるマスクフィールドについて互い違いになる。同様に、述語フィールドの各四半分の反転は、対応するＴＥＥ命令Ｉ０、Ｉ１、Ｉ２の互い違いの実行に一致するように互い違いにされる。
【００７７】
要約すると、複数のマスクフィールドを提供することにより、これは、利用可能な電力割当量および回路面積、ならびに所与の用途に求められる性能およびエネルギ効率のトレードオフに応じて、異なるハードウェア設計を実装するための柔軟性をマイクロアーキテクチャ設計者に与える。高性能システムは、全てのビートを並列処理することを可能にするために図１０のアプローチを使用することができるが、低電力システムでは図１１または図１２のアプローチを使用することができる。アーキテクチャ内に複数のマスクフィールドを定義することにより、これは、アーキテクチャが電力および性能ポイントの範囲全体で使用されることを可能にするどのような特定の形式の実行資源が提供されるべきかの制約を回避する。
【００７８】
図９〜図１２は、ＶＰＴ命令によって述語化される残りの命令の数を示すために最下位「１」ビットのビット位置を使用し、他の命令が処理されるたびにマスクフィールドを左シフトし、他の実施形態では、残りの命令の数を表す「１」に設定された最上位ビットと各後続命令に応答して適用される右シフトとによってマスクフィールドが反対方向に符号化されることができる、マスクフィールド符号化を示している。また、述語化される命令数を識別するために「１」ビットを使用し、「１」がシフトアウトされたときに述語フィールド５０の反転をトリガする代わりに、「０」に等しいビットを使用してこれを行うことができる。したがって、より一般的には、ＶＰＴ命令によって述語化される所定数の命令は、所定ビット値を有するマスクフィールドの所与の終端から最遠位ビットのビット位置によって表されることができ（ここで、所定ビット値は、「０」または「１」）、各後続ベクトル命令に応答して、マスクフィールドは、１ビット位置だけ所与の終端に向かってシフトされることができる。シフトアウトされたビットが所定ビット値を有する場合、そのマスクフィールドに対応する述語フィールドの少なくとも一部が反転される。
【００７９】
また、１または０に等しい最小位／最上位ビットのビット位置を使用して述語化される残りのベクトル命令の数を表すことは必須ではない。この技法は、マスクフィールドの残りのビットを使用して比較的効率的にＴ／Ｅ命令のパターンを符号化することができることから有用であるが、後続ベクトル命令を処理する方法を示すために他の技法が使用されることができる。例えば、マスクフィールド５０は、述語化される残りのベクトル命令の数を示す２進数値を単に指定することができ、これは、ＶＰＴ命令に応答して所定数に設定された後、ゼロに到達するまでその後に続く各後続命令がデクリメントされ、この時点で次のベクトル命令は、述語フィールド５０から独立して処理される。Ｔ／Ｅ命令のパターンは、図９に示されるように単一の符号化値を使用するのではなく、述語化される残りの命令の数を示す値とは別のフィールドによって示されることができる。
【００８０】
ＶＰＲ２２の内容は、例外事象が発生した場合にスタックに保存されることができ、例外の処理後に、例外によって中断された時点から処理を再開することができるように、保存されたＶＰＲ値がスタックからＶＰＲに復元されることができる。これは、例外からの復帰後にＶＰＴ命令の処理を繰り返す必要性を回避する。
【００８１】
図１０〜図１２に示す例は、ＶＰＴ命令の後に続く命令の各々がベクトル命令である場合を示している。しかしながら、時には、後続命令のうちの１つは、スカラー命令または他の種類の非ベクトル命令とすることができる。この場合、スカラーまたは非ベクトル命令は、その機能がベクトル述語にかかわらず実行されるように、ＶＰＲの内容とは独立して動作することができる。それにもかかわらず、スカラー命令の実行は、処理されるべき残りの命令をさらにカウントダウンするように、シフトされるべきＶＰＲ２２のマスクフィールドをさらにトリガすることができる。したがって、ＶＰＴ命令は、それらがベクトル命令である場合に、述語化される所定数の後続命令スロットを指定するが、全てのスロットが実際にベクトル命令であるとは限らない。あるいは、非ベクトル命令に遭遇したときにマスクレジスタをシフトさせないことも可能であり、この場合、ＶＰＴ命令によって実際に影響を受けるベクトル命令の数は、任意の介在する非ベクトル命令があるかどうかに依存しない。
【００８２】
また、時には、プログラマまたはコンパイラは、第１のＶＰＴ命令によって述語化される後続命令のブロック内の他のＶＰＴ命令とともに１つのＶＰＴ命令に続くことができる。この場合、第２のＶＰＴ命令は、ＶＰＲ２２の対応するマスクフィールドを初期マスク値にリセットすることができ、ＶＰＴブロック内の残りの命令の数のカウントを効果的に再開することができる。したがって、第２のベクトル述語命令を含むことはまた、ＶＰＴブロックを破壊し、以前のＶＰＴ命令によって述語化された十分な数の命令を停止させることもできる。実際には、プログラマまたはコンパイラが第１のＶＰＴ命令の直後に第２のＶＰＴ命令を含める場合、それらは、述語化された後の命令が少なくなるように例えばマスク初期値を選択することによってＶＰＴブロックが第２のＶＰＴ命令が現れる前に終了するように、通常は第１のＶＰＴ命令を符号化する。
【００８３】
命令デコーダは、以下のようにＶＰＴ命令のいくつかの変形をサポートすることができる：
・ＶＰＴ：制御情報によって示された任意の以前の述語結果とは独立して、目標ベクトルに対して実行される要素比較演算の結果に応じて、ＶＰＲ２２の制御情報を設定するように処理回路４を制御する上述した基本ＶＰＴ命令。したがって、ＶＰＴ命令は、対応する要素比較演算から判定されたイネーブルビット値４５に述語フィールド５０をリセットする。ＶＰＴ命令はまた、上述した方法でマスクフィールド５２を設定し、どの後続ベクトル命令が述語フィールド５０に応じて制御されるかを制御する。
・ＶＰＴＡ：ＶＰＴ命令のＡＮＤ形式であり、ＶＰＴ命令に応答して実行される要素比較演算から得られるイネーブルビット４５が述語フィールド５０内の対応するビットとＡＮＤ演算され、結果が述語フィールド５０に書き込まれる。マスクフィールド５２は、ＶＰＴ命令と同様に設定される。したがって、後続ベクトル命令のうちの１つがＶＰＴＡ命令に続いて実行されるとき、ベクトル演算のマスクは、ＶＰＴＡ命令によって実行される比較だけでなく、述語フィールド５０を設定するために使用された以前の比較の結果にも依存する。
・ＶＣＭＰ：目標ベクトル上で多数の要素比較演算をトリガする比較命令であり、（制御情報によって示される以前の述語結果とは無関係に）比較の結果を示すように述語フィールド５０を設定するが、マスクフィールド５２を設定しないか、またはマスクフィールド５２を全てゼロに設定するので、後続のベクトル命令が述語に依存して制御されることはない。
・ＶＣＭＰＡ：目標ベクトルに対して実行された要素比較演算から得られたイネーブルビット４５が述語フィールド５０によって以前に示された対応するビット、および（ＶＰＴＡ命令と同様に）述語フィールド５０に書き込まれたＡＮＤ演算の結果とＡＮＤ演算されるＶＣＭＰ命令のＡＮＤ形式であり、マスクフィールド５２を設定しないかまたはマスクフィールド５２を全てゼロに設定し、したがって、述語に応じて後続ベクトル命令を制御しない。
特に指定のない限り、上記説明におけるＶＰＴ命令への参照はまた、ＶＰＴＡにも適用される。上記示されたＶＣＭＰおよびＶＣＭＰＡ命令は、条件状態の範囲が決定されることができる条件状態を示す複数ビット条件コードではなく、試験条件が通過しなかったかどうかを示す比較毎に単一のブール結果を生成する。ＶＣＭＰまたはＶＣＭＰＡによって実行される要素比較の幅が単一バイトよりも大きい場合、比較毎に生成される単一のブール結果は、述語フィールド５０内の同じ値を有する複数バイトの述語ビットに記憶されることができることが理解される。ＶＣＭＰ命令がマスクフィールド５２を単独で残すか、またはそれらを全てゼロにクリアするかどうかは、いくつかの実装についてはハードウェアで固定されることができ、またはＶＣＭＰ命令によって指定されるパラメータに応じて選択されることができる。いくつかの実施形態では、ＶＣＭＰおよびＶＣＭＰＡ命令は、述語化された所定数の後続命令がゼロであるようにゼロに設定されたマスクフィールドをそれぞれ有するＶＰＴおよびＶＰＴＡ命令として実装されることができる（したがって、ＶＣＭＰおよびＶＣＭＰＡ命令を示すための別個のオペコードの必要性はない）。
【００８４】
これらの命令バリエーションをサポートすることにより、これは、一連の命令を使用して構築されるように単一の命令によって評価されることができないより複雑な論理条件を可能にする。例えば以下のとおりである：
高レベルコード：
ｆｏｒ（ｉｎｔ  ｉ＝０；ｉ＜ＬＥＮ；ｉ＋＋）｛
ｉｆ（（ｄａｔａ［ｉ］＜ＴＨＲＥＳＨＯＬＤ）＆＆（ｄａｔａ［ｉ］＞−ＴＨＲＥＳＨＯＬＤ））｛
ｄａｔａ［ｉ］＝０；
｝
｝
アセンブリコード：
ＶＭＯＶ  Ｑ７，＃０
ＲＳＢ  Ｒ１，Ｒ０，＃０                      ／／Ｒ０＝ＴＨＲＥＳＨＯＬＤ，Ｒ１＝−ＴＨＲＥＳＨＯＬＤ
ＤＬＳＴＰ．１６  ＬＲ，Ｒ４，ｌｏｏｐＥｎｄ  ／／Ｒ４＝ＬＥＮ
ｌｏｏｐＳｔａｒｔ：
ＶＬＤＲ．１６  Ｑ０，［Ｒ２］，＃２          ／／Ｒ２＝データポインタ
ＶＣＭＰ．１６  ＬＴ，Ｑ０，Ｒ０
ＶＰＴＡ．１６  ＧＴ，Ｑ０，Ｒ１              ／／上記ＬＴ比較と組み合わせたＧＴ比較
ＶＳＴＲ．１６  Ｑ７，［Ｒ２］！，＃２        ／／上記ＶＰＩに基づくＶＳＴＲＳのレーン述語
ＤＬＥ  ｌｏｏｐＳｔａｒｔ
ｌｏｏｐＥｎｄ：
【００８５】
図１３は、後続のＶＳＴＲ命令の演算を制御するためにＶＣＭＰおよびＶＰＴＡ命令に応答してバイト述語ビット４５を設定する例を示している。したがって、この例では、ＶＣＭＰ命令は、（高レベルコードにおける「ｄａｔａ［ｉ］＜ＴＨＲＥＳＨＯＬＤ」に対応する）ＬＴ条件を使用して目標ベクトルＱ０の各データ要素をスカラー閾値Ｒ０と比較し、この比較の結果を示すためにＶＰＲ２２の述語フィールド５０に述語ビット４５を設定する。後続のＶＰＴＡ命令は、これらの基準が双方とも満たされるそれらの要素（この例では、ベクトルＱ０の要素２、４および５）についてイネーブルビットが１であることを最終結果がもたらすように、（高レベルコードにおける「ｄａｔａ［ｉ］＞−ＴＨＲＥＳＨＯＬＤ」に対応する）ＧＴ条件に基づいて、これらのイネーブルビットを目標ベクトルＱ０の要素とレジスタＲ１との対応する比較の結果とＡＮＤ演算する。そして、後続の記憶命令ＶＳＴＲは、イネーブルビットがゼロであるレーンに関連する記憶演算をマスクする。この例では、記憶命令は、連続したベクトル記憶命令であり、マスクされていない各記憶演算のアドレスは、レジスタＲ２のベースアドレスをインクリメント値（ｉｎｃ）のｎ倍に加算することによって計算され、ｎは、関連レーンのデータ要素位置である（例えば、レーン２の記憶は、Ｒ２＋２＊ｉｎｃに記憶される）。他の例では、マスクされていない各記憶演算が、ベクトルレジスタのうちの１つにおいて指定されたアドレスベクトルの対応する要素に基づいて決定された目標アドレスを使用する、非連続（分散）記憶命令を使用することができることが理解される。
【００８６】
ＶＰＴおよびＶＣＭＰ命令のＡＮＤ形式が上述されたが、前記複数の要素比較演算の対応する１つの結果および前記制御情報によって示される以前の述語結果に依存する目標ベクトル値の所与のデータ要素に対する述語結果を示すように制御情報が設定される他の種類の命令を定義することも可能である。例えば、以前の述語結果および新たな要素比較の述語結果は、ＯＲ、ＮＡＮＤ、ＸＯＲなどの他の論理演算によって結合されることができる。
【００８７】
上述したように、対応するマスクフィールド５２からシフトアウトされた上位ビットが「１」であるときに述語フィールド５０の関連部分のビットを反転して図１０から図１２に示す技術が使用される場合、これは、（マスクの最後の「１」ビットがシフトアウトされて次のチックについてマスクフィールドを全てゼロとして残すことから）ＶＰＴブロックの終端に到達したときに反転される述語ビットをもたらす。以下の命令が述語化されていないときに述語ビットを反転することは無意味に見えるかもしれないが、これは、後続のＶＰＴＡまたはＶＣＭＰＡ命令に適切な述語条件を設定するのに有用であり得る。例えば、以下の命令を考える：
ＶＰＴＡ  ＡＬ、Ｑａ、Ｑｂ
ＶＮＯＰ
ＶＰＴＡ命令は、その結果をそれらとＡＮＤ演算することによって述語フラグの以前の値と結合する。これは、試験条件がＡＬ（常に満たされている）として指定されているために以前の述語フラグが全て「１」とＡＮＤ演算されていることから、述語値を実際には変更しない。ＶＮＯＰ命令は、ＶＰＴブロックにおける唯一の命令であり、通常はデータレジスタ状態のいかなる変更もトリガしないノーオペ（演算なし）命令である。しかしながら、マスクからシフトアウトされた最上位ビットが１であるときに、ハードウェアが述語ビット５０を反転させるため、ＶＰＴＡおよびＶＮＯＰ命令の効果は、いかなる他の副次的効果もなくＶＰＲ２２の述語条件を反転させることである。したがって、これは、ＶＰＲ２２の述語フィールド上で「ＮＯＴ」論理演算を評価する方法を提供する。デ・モルガンの法則は、いかなる「ＯＲ」ベースの条件もＡＮＤおよびＮＯＴの組み合わせの観点で表されることを可能にし、したがって、ＶＰＴブロックの終端におけるこの反転動作は、ＡＮＤ形式のＶＰＴＡおよびＶＣＭＰＡ命令の提供とともに、命令の後続ブロックの述語化を制御するためにいかなる複雑な一連の条件も評価されることができることを意味する。
【００８８】
上記の例では、ＶＰＴ／ＶＰＴＡ命令は、処理回路４を制御して目標ベクトルの各要素に対する要素比較演算を実行する。しかしながら、これは必須ではなく、いくつかの実装では、ベクトル述語命令は、（上述したＶＣＭＰまたはＶＣＭＰＡ命令などの）以前の命令によって実行された比較に基づいて所定数の後続ベクトル命令の処理を制御するための制御情報を設定することができる。したがって、ベクトル比較命令自体に応答して要素比較演算を実行することは必須ではない。しかしながら、実際には、単一の命令に応答して後続ベクトル命令を制御するための要素比較および制御情報の設定の双方を実行することは、実行される必要がある命令の数を削減し、メモリにおけるプログラムの記憶、実行されるべき命令のキャッシュ、命令のフェッチおよびデコードにおけるオーバーヘッドを低減するため、より効果的である。
【００８９】
図１４に示すように、ＶＰＴ命令の後に適用される述語は、使用される唯一の述語形式ではない場合がある。上述したように、ベクトル命令の一般的な使用は、演算の特定シーケンスがメモリに記憶された配列８０の各要素ａ０、ａ１などに適用される必要があるベクトル化ループにある。高レベルコードにおける要素あたりに１回反復するループは、反復回数が少ないループを含むベクトル化コードにコンパイルされ、各ループは、ベクトルレジスタに要素のブロックをロードし、一連のベクトル命令を使用して要素を処理し、各処理レーンの結果をメモリに記憶し直す。したがって、各反復は、１つのベクトルレジスタにおけるデータ要素数に対応する要素のブロックを処理することができる。処理されるべき配列内の要素の総数がＮＥであり、１つのベクトルにおけるデータ要素数がＮＶ（データ要素サイズＥＳによって除算したベクトル幅ＶＷに等しい）である場合、配列全体は、ＮＥ／ＮＶ反復の最小値で処理されることができる。しかしながら、多くの場合、要素の総数ＮＥは、１つのベクトルにおける要素数ＮＶの正確な倍数ではないことがあり、したがって、ループの最後の反復では、ベクトルの要素の全てが処理されるべき実際値によって満たされるわけではない。満たされていないレーンにおける処理がマスクされずに進行することが許可されている場合、これは、エラーを引き起こす可能性がある。例えば、配列８０の終端を越えたメモリアドレス空間は、ページテーブルにマッピングされていないことがあり、そのため、配列の末尾を処理する最後の反復における「未使用」レーンのうちの１つについてロード／記憶演算が実行された場合に、メモリアクセス障害または配列に隣接するデータの破損がある可能性がある。
【００９０】
したがって、ループの最後の反復において未使用のレーンにおける演算をマスクすることが望ましい可能性がある。図１に示すように、処理回路４には、所与のベクトル化されたループのレーンがイネーブル化またはマスクされるかを制御するループ述語回路９０が設けられてもよい。ベクトル化されたループを開始すると、ループカウンタ１６は、ループ内で処理される要素の総数ＮＥを指定する値に設定される。例えば、ループ開始命令は、要素数を指定することができる（例えば、配列長さＬＥＮを記憶するレジスタＲ４を参照する上記例におけるループ開始命令ＤＬＳＴＰを参照）。ループの各反復の終端において、１つのベクトルの要素数ＮＶがループカウンタ１６から減算され、処理される残りの要素数ＮＥｒｅｍを計算する。所与のループ反復を開始すると、ＮＥｒｅｍ＜ＮＶの場合、ループ述語回路９０は、例えば、ベクトル処理レーン自体を抑制する（例えば、ロード／記憶要求が発行されることを防止する）ことにより、および／またはマスクされたレーンにおける処理の結果の書き込みを無効にすることにより、処理回路４を制御してベクトル処理の上部ＮＶ−ＮＥｒｅｍレーンに関連する演算をマスクする。
【００９１】
いくつかのレーンがマスクされるべきであるとループ述語回路９０が判定したときにＶＰＴまたはＶＰＴＡ命令が反復実行された場合、それらのレーンは、ＶＰＴ命令の結果にかかわらず、ＶＰＴ命令に続く後続ベクトル命令に対してマスクされる。例えば、ループ述語回路９０によって提供される制御信号は、ＶＰＲ２２における述語イネーブルビットから生じる任意のマスク制御信号とＡＮＤ演算されることができ、特定のレーンがマスクされるべきかどうかを全体的に判定することができる。一方、ループ述語回路９０によってマスクされる必要がない他のレーンについては、ＶＰＴ／ＶＰＴＡ命令によって設定された述語ビットは、それらのレーンの一部に関連する演算が上述したのと同じ方法でマスクされるかどうかを制御する。
【００９２】
図１５は、ベクトル述語を処理する方法を示している。ステップ１００において、命令デコーダ６は、デコードされる命令がベクトル述語命令であるかどうかを判定する。そうでない場合、命令は、関連する命令の機能性に応じてデコードされる。ベクトル述語命令に遭遇すると、ステップ１０２において、命令デコーダ６は、ベクトル述語命令によって指定された目標ベクトル値の各要素に対して実行される要素比較演算に応じてＶＰＲ２２に制御情報を設定するために処理回路を制御するように制御信号を生成する。ステップ１０４において、命令デコーダ６は、ベクトル述語命令に続く制御情報によって示される目標ベクトルの対応する要素についての対応する要素比較演算の結果に応じて制御される所与のレーンの一部の所与の部分に関連する演算をマスクして、所定数の後続命令を処理するように処理回路を制御する。
【００９３】
図１６は、使用可能な仮想マシン実装を示している。前述した実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実装したが、ハードウェア装置のいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム１３０をサポートするホストオペレーティングシステム１４０を実行するホストプロセッサ１５０上で実行される。通常、大規模なプロセッサは、妥当な速度で実行する仮想マシン実装を提供する必要があるが、そのようなアプローチは、互換性または再利用のために他のプロセッサに対してネイティブなコードを実行したいという要望がある場合などの特定の状況において正当化されることができる。仮想マシンプログラム１３０は、仮想マシンプログラム１３０によってモデル化される装置である実際のハードウェアによって提供されるハードウェアインターフェースと同一のゲストプログラム１２０に対する仮想ハードウェアインターフェースを提供する。したがって、上述したメモリアクセスの制御を含むプログラム命令は、仮想マシンハードウェアとの相互作用をモデル化するために、仮想マシンプログラム１３０を使用してゲストプログラム１２０内から実行されることができる。ゲストプログラム１２０は、ベアメタルプログラムであってもよく、あるいはホストＯＳ１４０が仮想マシンアプリケーション１３０を実行する方法と同様の方法でアプリケーションを実行するゲストオペレーティングシステムであってもよい。異なる種類の仮想マシンが存在し、いくつかの種類では、仮想マシンは、ホストＯＳ１４０を必要とせずにホストハードウェア１５０上で直接実行されることも理解される。
【００９４】
本出願において、「・・・ように構成された（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ・・・）」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成（ｃｏｎｆｉｇｕｒａｔｉｏｎ）」は、ハードウェアまたはソフトウェアの相互接続の構成または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサもしくは他の処理装置は、機能を実行するようにプログラミングされてもよい。「ように構成された（Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ）」は、定義された動作を提供するために装置要素が何らかの方法で変更される必要があることを意味しない。
【００９５】
本発明の例示的な実施形態が添付図面を参照して詳細に説明されたが、本発明は、これらの厳密な実施形態に限定されるものではなく、添付の特許請求の範囲によって定義される本発明の範囲および精神から逸脱することなく、様々な変形および変更が当業者によって実施されることができることが理解されるべきである。
【図１】
2019509573.tif 000003
【図２】
2019509573.tif 000004
【図３】
2019509573.tif 000005
【図４】
2019509573.tif 000006
【図５】
2019509573.tif 000007
【図６】
2019509573.tif 000008
【図７】
2019509573.tif 000009
【図８】
2019509573.tif 000010
【図９】
2019509573.tif 000011
【図１０】
2019509573.tif 000012
【図１１】
2019509573.tif 000013
【図１２】
2019509573.tif 000014
【図１３】
2019509573.tif 000015
【図１４】
2019509573.tif 000016
【図１５】
2019509573.tif 000017
【図１６】
2019509573.tif 000018
【国際調査報告】
2019509573.tif 000019
2019509573.tif 000020