(57)【要約】  処理回路３０および３５は、少なくとも第１の入力ベクトルを指定する第１のタイプのベクトル演算命令をサポートする。所定のシーケンス内の第１の入力ベクトルの第１のアクティブデータ要素に対して実行された算術演算に対して少なくとも１つの例外条件が検出された場合、処理回路３０および３５は少なくとも１つの応答動作を実行する。所定のシーケンス中の第１のアクティブデータ要素以外の特定のアクティブデータ要素について少なくとも１つの例外条件が検出された場合、処理回路３０および３５は少なくとも１つの応答動作を抑制し、どのデータ要素が、例外条件をトリガした特定のアクティブデータ要素であるかを識別する要素識別情報を格納する。これは、例外条件の発生を追跡するため、および／またはベクトル命令の投機的実行をサポートするためのハードウェアリソースの量を削減するのに役立つ。
2018531467.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ要素を含む少なくとも第１の入力ベクトルを指定する第１のタイプのベクトル演算命令に応答して、前記第１の入力ベクトルの少なくとも１つのアクティブデータ要素の算術演算を実行する処理回路を含む装置であって、
前記第１の入力ベクトルの前記データ要素は所定のシーケンスを有し、
前記所定のシーケンスにおいて第１のアクティブデータ要素に対して実行される前記算術演算に対して、少なくとも１つの例外条件が検出されたとき、前記処理回路は少なくとも１つの応答動作を実行するように構成され、
前記少なくとも１つの例外条件が、前記所定のシーケンスにおける前記第１のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された前記算術演算に対して検出された場合、前記処理回路は、前記少なくとも１つの応答動作を抑制し、前記第１の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するように構成される
装置。
【請求項２】
前記少なくとも１つの応答動作が、前記少なくとも１つの例外条件が前記第１のアクティブデータ要素に対して検出されたことを示すために状態レジスタを更新することを含む、請求項１に記載の装置。
【請求項３】
前記状態レジスタが、１つまたは複数の対応するタイプの例外条件の発生を示すための１つまたは複数の例外条件表示ビットの組を含み、例外条件表示ビットの前記組が、例外条件のタイプ毎に単一のビットを含む、請求項２に記載の装置。
【請求項４】
前記少なくとも１つの応答動作が、例外処理ルーチンの実行をトリガすることを含む、請求項１〜請求項３のいずれか一項に記載の装置。
【請求項５】
１つまたは複数のタイプの例外条件に対して前記例外処理ルーチンの実行をトリガするか否かを指定する構成情報を格納するコンフィギュレーションレジスタと、
前記コンフィギュレーション情報が、前記例外処理ルーチンを前記検出された例外条件タイプに対してトリガすべきであることを指定するとき、前記例外処理ルーチンの実行をトリガすることを含む前記少なくとも１つの応答動作と
を含む、請求項４に記載の装置。
【請求項６】
前記処理回路が、前記１つまたは複数のアクティブデータ要素が処理されるべきか否かを決定するための関連する条件が解決される前に、前記第１の入力ベクトルの１つまたは複数のアクティブデータ要素に対して前記算術演算を実行するように構成される、請求項１〜請求項５のいずれか一項に記載の装置。
【請求項７】
前記第１の入力ベクトルが、前記第１の入力ベクトルのどのデータ要素がアクティブデータ要素であるかを示すマスクに関連付けられている、請求項１〜請求項６のいずれか一項に記載の装置。
【請求項８】
前記処理回路が、第１のタイプのベクトル演算命令を実行する後続の試みのための新しい第１の入力ベクトルおよび新たなマスクの少なくとも１つを、前記要素識別情報に基づいて生成するための少なくとも１つのさらなる命令に応答する、請求項７に記載の装置。
【請求項９】
前記処理回路が、前記少なくとも１つのさらなる命令に応答して、前記所定のシーケンス内の前記第１のアクティブデータ要素として示される前記特定のアクティブデータ要素を有する前記新たなマスクを生成する、請求項８に記載の装置。
【請求項１０】
前記処理回路が、前記少なくとも１つのさらなる命令に応答して、前記第１の入力ベクトルの前記特定のアクティブデータ要素と同じ値を有する前記新たな第１の入力ベクトルの前記第１のアクティブデータ要素を有する前記新たな第１の入力ベクトルを生成する、請求項８に記載の装置。
【請求項１１】
前記要素識別情報が、前記所定のシーケンス内の特定のアクティブデータ要素に先行する少なくとも１つのデータ要素の第１の値を有する１つまたは複数の表示と、前記特定のアクティブデータ要素および前記所定のシーケンス内の後続の任意のアクティブデータ要素に対する第２の値を有する１つまたは複数の表示とを含む要素識別マスクを含む、請求項１〜請求項１０のいずれか一項に記載の装置。
【請求項１２】
前記所定のシーケンス内の前記第１のアクティブデータ要素が、前記第１の入力ベクトルの最下位アクティブデータ要素を含む、請求項１〜請求項１１のいずれか一項に記載の装置。
【請求項１３】
第２のタイプのベクトル演算命令に応答して、前記処理回路が、前記第１の入力ベクトルの任意のアクティブデータ要素に対して実行された前記算術演算の前記少なくとも１つの例外条件の検出に応答して、前記少なくとも１つの応答動作を実行するように構成される、請求項１〜請求項１２に記載の装置。
【請求項１４】
前記第１および第２のタイプのベクトル演算命令が、異なる演算コードを含むか、または前記ベクトル命令が前記第１のタイプまたは第２のタイプのいずれであるかを指定するフィールドを含む、請求項１３に記載の装置。
【請求項１５】
前記第１のタイプのベクトル演算命令が前記処理回路の第１のモードで実行されるベクトル演算命令を含み、
前記第２のタイプのベクトル命令が前記処理回路の第２のモードで実行されるベクトル演算命令を含む、請求項１３に記載の装置。
【請求項１６】
前記第２のタイプのベクトル演算命令に応答して、前記少なくとも１つの応答動作が、前記第１の入力ベクトルの任意のアクティブデータ要素に対して実行された前記算術演算に対して検出された１つまたは複数のタイプの例外条件の表示を提供するために状態レジスタを更新することを含む、請求項１３〜請求項１５のいずれか一項に記載の装置。
【請求項１７】
前記算術演算が、浮動小数点演算と、前記少なくとも１つの例外条件であって、
前記算術演算で生成された浮動小数点値のオーバーフローと、
前記算術演算で生成された浮動小数点値のアンダーフローと、
前記演算で生成された不正確な浮動小数点値と、
無効な演算に対応する前記算術演算と、
ゼロによる除算を含む前記算術演算と、
非正規である前記算術演算への入力と
の少なくとも１つを含む、前記少なくとも１つの例外条件とを含む、請求項１〜請求項１６のいずれか一項に記載の装置。
【請求項１８】
前記算術演算が、飽和演算を含み、前記少なくとも１つの例外条件が、前記飽和演算で生成された値の飽和を含む、請求項１〜請求項１７のいずれか一項に記載の装置。
【請求項１９】
複数のデータ要素を含む少なくとも第１の入力ベクトルを指定する第１のタイプのベクトル演算命令に応答して、前記第１の入力ベクトルの少なくとも１つのアクティブデータ要素の算術演算を実行する手段を含む装置であって、
前記第１の入力ベクトルの前記データ要素は所定のシーケンスを有し、
前記所定のシーケンスにおいて第１のアクティブデータ要素に対して実行される前記算術演算に対して、少なくとも１つの例外条件が検出されたとき、実行する前記手段は少なくとも１つの応答動作を実行するように構成され、
前記少なくとも１つの例外条件が、前記所定のシーケンスにおける前記第１のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された前記算術演算に対して検出された場合、実行する前記手段は、前記少なくとも１つの応答動作を抑制し、前記第１の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するように構成される装置。
【請求項２０】
複数のデータ要素を含む少なくとも第１の入力ベクトルを指定する第１のタイプのベクトル演算命令に応答して、前記第１の入力ベクトルの少なくとも１つのアクティブデータ要素の算術演算を実行するステップを含むデータ処理方法であって、前記第１の入力ベクトルの前記データ要素が所定のシーケンスを有する、ステップと、
前記所定のシーケンスにおいて第１のアクティブデータ要素に対して実行される前記算術演算に対して、少なくとも１つの例外条件が検出されたとき、少なくとも１つの応答動作を実行するステップと、
前記少なくとも１つの例外条件が、前記所定のシーケンスにおける前記第１のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された前記算術演算に対して検出されたとき、前記少なくとも１つの応答動作を抑制し、前記第１の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するステップと
を含む、データ処理方法。
【請求項２１】
コンピュータ可読記憶媒体に格納されたコンピュータプログラムであって、データ処理装置によって実行されると、請求項１〜請求項１８のいずれか一項に記載の装置に対応する命令実行環境を提供する仮想マシンを提供する、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。より詳細には、本技術はベクトル演算命令の処理に関する。
【背景技術】
【０００２】
いくつかのデータ処理装置は、ベクトルの各データ要素に対して特定の処理操作を実行して、結果ベクトルの対応するデータ要素を生成するベクトル処理をサポートすることができる。これにより、多数の異なるデータ値を単一の命令で処理することが可能になり、与えられた数のデータ値を処理するのに必要なプログラム命令の数を減らすことができる。ベクトル処理は、ＳＩＭＤ（単一命令、複数データ：Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ、Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）処理とも呼ばれる。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの例は、
複数のデータ要素を含む少なくとも第１の入力ベクトルを指定する第１のタイプのベクトル演算命令に応答して、前記第１の入力ベクトルの少なくとも１つのアクティブデータ要素の算術演算を実行する処理回路を含む装置を提供し、
ここで、第１の入力ベクトルのデータ要素は所定のシーケンスを有し、
所定のシーケンスにおいて第１のアクティブデータ要素に対して実行される算術演算に対して、少なくとも１つの例外条件が検出されたとき、処理回路は少なくとも１つの応答動作を実行するように構成され、
前記少なくとも１つの例外条件が、前記所定のシーケンスにおける前記第１のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された算術演算に対して検出された場合、処理回路は、前記少なくとも１つの応答動作を抑制し、第１の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するように構成される。
【０００４】
少なくともいくつかの例は、
複数のデータ要素を含む少なくとも第１の入力ベクトルを指定する第１のタイプのベクトル演算命令に応答して、前記第１の入力ベクトルの少なくとも１つのアクティブデータ要素の算術演算を実行する手段を含む装置を提供し、
ここで、第１の入力ベクトルのデータ要素は所定のシーケンスを有し、
所定のシーケンスにおいて第１のアクティブデータ要素に対して実行される算術演算に対して、少なくとも１つの例外条件が検出されたとき、実行する手段は少なくとも１つの応答動作を実行するように構成され、
前記少なくとも１つの例外条件が、前記所定のシーケンスにおける前記第１のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された算術演算に対して検出された場合、実行する手段は、前記少なくとも１つの応答動作を抑制し、第１の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するように構成される。
【０００５】
少なくともいくつかの例は、
複数のデータ要素を含む少なくとも第１の入力ベクトルを指定する第１のタイプのベクトル演算命令に応答して、前記第１の入力ベクトルの少なくとも１つのアクティブデータ要素の算術演算を実行することを含むデータ処理方法を提供し、ここで、第１の入力ベクトルのデータ要素は所定のシーケンスを有し、
所定のシーケンスにおいて第１のアクティブデータ要素に対して実行される算術演算に対して、少なくとも１つの例外条件が検出されたとき、少なくとも１つの応答動作を実行し、
前記少なくとも１つの例外条件が、前記所定のシーケンスにおける前記第１のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された算術演算に対して検出されたとき、前記少なくとも１つの応答動作を抑制し、第１の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納する。
【０００６】
少なくともいくつかの例は、データ処理装置によって実行されると、上記のような装置に対応する命令実行環境を提供する仮想マシンを提供するコンピュータ可読記憶媒体に格納されたコンピュータプログラムを提供する。
【０００７】
本技術のさらなる態様、特徴および利点は、添付の図面と併せて読まれる以下の実施例の説明から明らかになるであろう。
【図面の簡単な説明】
【０００８】
【図１】図１は、ベクトル処理をサポートするデータ処理装置の一例を概略的に示す図である。
【図２】図２は、浮動小数点状態レジスタおよび浮動小数点制御レジスタの例を示す図である。
【図３】図３は、ベクトル演算命令のｎｏｎ−ｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式の例を示す。
【図４】図４は、ベクトルの第１のアクティブ要素に対して例外条件が発生するベクトル演算命令のｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式の例を示す。
【図５】図５は、第１のアクティブ要素ではない要素に対して例外条件が発生するベクトル演算命令のｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式の例を示す。
【図６】図６は、ｆｉｒｓｔ−ｆａｕｌｔｉｎｇベクトル演算命令を実行する後続の試みのための新しいマスクを生成する例を示す。
【図７】図７は、ｆｉｒｓｔ−ｆａｕｌｔｉｎｇベクトル演算命令を実行する後続の試みのための新しい入力ベクトルを生成する例を示す。
【図８】図８は、ベクトル演算命令の非投機的実行（ｎｏｎ−ｓｐｅｃｕｌａｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）のための擬似コードの例を示す。
【図９】図９は、ベクトル演算命令の投機的実行（ｓｐｅｃｕｌａｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）のための擬似コードの例を示す。
【図１０】図１０は、すべてのアクティブ要素が処理されるまで、ベクトル演算命令を複数回実行するためのループの例を示す。
【図１１】図１１は、ベクトル演算命令を処理する方法を示すフロー図である。
【図１２】図１２は、浮動小数点状態レジスタの代替レイアウトを示す。
【図１３】図１３は、図１２の状態レジスタレイアウトを使用したベクトル演算命令の投機的実行を処理する技術を示す。
【図１４】図１４は、仮想マシン実装を示す。
【発明を実施するための形態】
【０００９】
いくつかの特定の例を以下に説明する。本発明はこれらの特定の例に限定されないことが理解される。
【００１０】
処理回路は、複数のデータ要素を含む少なくとも第１の入力ベクトルを指定する少なくとも第１のタイプのベクトル演算命令をサポートすることができる。第１のタイプのベクトル演算命令に応答して、処理回路は、第１の入力ベクトルの少なくとも１つのアクティブデータ要素の算術演算を実行することができる。場合によっては、第１の入力ベクトルの１つまたは複数のアクティブデータ要素に対して実行された算術演算に対して例外条件が検出されることがある。例えば、例外条件は、結果が結果値によって表現できる範囲外になったこと、またはエラーが発生したことを示すことができる。
【００１１】
第１の入力ベクトルのデータ要素は、所定のシーケンスを有すると考えられる。シーケンス内の第１のアクティブデータ要素に対して実行された算術演算について少なくとも１つの例外条件が検出された場合、処理回路は少なくとも１つの応答動作を実行することができる。しかしながら、シーケンス中の第１のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された算術演算に対して少なくとも１つの例外条件が検出された場合、処理回路は少なくとも１つの応答動作を抑制し、第１の入力ベクトルのどのデータ要素が、例外条件が検出された特定のアクティブデータ要素であるかを識別する要素識別情報を格納できる。
【００１２】
このアプローチにはいくつかの利点がある。第１に、検出された例外条件を追跡し、必要に応じて少なくとも１つの応答動作を実行すると、処理回路に一定のリソースを提供する必要がある。実行されるベクトル処理の各レーンに対してこのようなリソースを別々に提供することは、回路面積およびそのようなリソースを管理する間接費の点で高価になる可能性がある。実際には、例外条件は比較的稀であり、この間接費が正当化されない可能性がある。シーケンス内の第１のアクティブデータ要素に対して例外条件が実行されたときに応答動作を実行するが、他のデータ要素が例外条件をトリガする場合にはそれを抑制して、例外条件処理は、ベクトルの各データ要素に対してこれらのリソースを複製する必要なく単一のデータ要素に対応する単一の組のリソースで効率的に管理できる。
【００１３】
シーケンス内の後の要素が例外条件をトリガするとき、要素識別情報を使用して、ベクトル演算命令の実行を再開することができ、故障していた要素は、ここで第１のアクティブデータ要素になる。このようにして、演算命令の実行の繰り返される反復は、ベクトルの要素を介して徐々に前進することができ、各パス上の第１のアクティブデータ要素に対して単一の組のリソースを使用して任意の例外条件が追跡され、ベクトルレーン毎の複数のリソースの組の必要を省く。
【００１４】
例えば、第１のアクティブデータ要素について例外条件が検出された場合、少なくとも１つの応答動作は、状態レジスタを更新してどの例外条件が発生したかを示すことを含むことができる。例えば、状態レジスタは、異なるタイプの例外条件を示すビットの組を含むことができ、応答は、例外条件の検出されたタイプに対して適切なビットを設定することを含むことができる。第１のアクティブデータ要素に対する応答を実行するが、例外条件をトリガする他の要素に対する応答は実行しないことにより、ベクトル全体のデータ要素間で単一の組の例外条件表示ビットを共有することができ（例外条件のタイプ毎に１ビット）、全データ要素に対して発生した例外条件を追跡するために複数のレーン毎のステータスビットの組を提供する必要はない。これは、より小さい状態レジスタの使用を可能にするだけでなく、処理回路内のデータ経路に沿って運ばれる状態フラグの数を減らすことにおいても、ハードウェアの複雑さを大幅に低減することができる。
【００１５】
また、応答動作は、例外処理ルーチンの実行をトリガすることを含むことができる。例えば、特定の例外条件が発生した場合、これはオペレーティングシステムまたは他の制御プログラムへのトラップをトリガし、例外条件を処理するための処置をとることができる。したがって、他の要素についてではなく、シーケンス内の第１のアクティブデータ要素について例外条件が検出された場合、例外処理ルーチンが実行される。
【００１６】
いくつかの実装では、一定の例外条件がシーケンス内の第１のアクティブデータ要素について検出された場合、例外処理ルーチンを常にトリガすることができる。あるいは、異なるタイプの例外条件に対して例外処理ルーチンの実行をトリガするか否かを示す構成情報を指定するためのコンフィギュレーションレジスタを提供することができる。この場合、応答は、コンフィギュレーションレジスタ内のコンフィギュレーション情報が、例外処理ルーチンを検出された例外条件タイプに対してトリガすべきであることを指定する場合のみ、例外処理ルーチンの実行をトリガすることを含むことができる。
【００１７】
いくつかのシステムは、ベクトル演算の投機的実行をサポートすることができ、特定の条件がベクトルの特定の要素を処理する必要があるか否かを制御するが、ベクトル命令は関連する条件が実際に解決される前に実行することができる。場合によっては、関連する条件は、他の要素を実際に処理すべきか否かを決定するために、ベクトルのいくつかの要素に対してベクトル命令を実行した結果に、依存することもできる。このような投機的実行を可能にすると、命令を実行する前にどの要素が処理されるかを正確に知る必要のあるシステムと比較して、コードのベクトル化がより効率的または実用的になる可能性がある。例えば、これは、同じプログラムループの異なる反復を並列処理するためにベクトル処理が使用され、ベクトルオペランドの異なる要素が、同じループの異なる反復で使用または生成される値に対応する場合に、有用であることが多い。
【００１８】
しかしながら、ベクトル演算命令の投機的実行が可能である場合、第１の入力ベクトルのデータ要素のいくつかは投機的に処理され、関連する条件が解消された後で、処理すべきではなかったことが後で判明する結果となることもある。これらの要素によって例外条件が検出された場合、実際には、この動作がそもそも実行すべきではなかったとき（例えば、状態レジスタの更新または例外処理ルーチンの実行）、この応答動作は実行された可能性がある。ベクトル処理の間違って投機されたレーンに起因するこのような副作用を引き起こすことは望ましくない。
【００１９】
１つのアプローチは状態レジスタの２つの異なるバージョンを維持でき、１つの投機的バージョンと、１つの非投機的バージョンであり、投機的に実行されるレーンの処理がコミットされた後に、投機的バージョンに基づいて非投機的バージョンを更新する。しかしながら、状態レジスタの投機的および非投機的バージョンを追跡するために追加のレジスタが必要となるだけでなく、一旦投機が解決されると、ステータス表示のコミットされたバージョンを解決するために、実行される追加の命令を必要とするため、ハードウェアの点でより高価になる可能性がある。上述の技術を使用することにより、一般にシーケンス内の第１のアクティブデータ要素は処理の非投機的実行レーンにあり、この要素に対して検出された例外条件に応答して応答動作を実行することは安全であるため、この追加の間接費は回避できる。入力ベクトルの他の要素については、たとえこれらの要素が例外条件を生成しても、これは応答動作をトリガしないので、後でこれらの処理レーンが誤投機であることが分かった場合でも、生成された有害な副作用はない。したがって、上述の技術はさらに、ベクトル演算の投機的実行の処理をより効率的にするのに役立つ。
【００２０】
入力ベクトルのアクティブ要素は、様々な方法で決定することができる。場合によっては、入力ベクトルのすべての要素がアクティブな要素と考えられることがあるので、どのデータ要素がアクティブであるか、または非アクティブであるかを定義するデータが存在しないことがある。つまり、入力ベクトルは述語付きでないベクトルである可能性がある。この場合、第１のアクティブ要素は、単にベクトルの第１の要素であってもよい（例えば、所定のシーケンスが最下位要素から最上位要素まで延びるものとして扱われる場合、最下位要素）。
【００２１】
しかしながら、より柔軟な技法は、どのデータ要素がアクティブデータ要素または非アクティブデータ要素であるかを示すマスクに入力ベクトルを関連付けることであり得る。この場合、第１のアクティブデータ要素は、入力ベクトルの第１の要素以外の要素であってもよい。
【００２２】
シーケンス内の第１のアクティブデータ要素以外の特定のアクティブデータ要素について例外条件が検出された場合、要素識別情報を使用して、後続の試みのためにベクトル演算命令に関連するマスクを修正し、命令を実行し、または後続の試みのために入力ベクトル自体を変更することができる。例外条件をトリガした特定の要素が、シーケンス内の第１のアクティブデータ要素になるようにマスクを更新することができる（例えば、前の要素を非アクティブとして示すことができる）か、または第１の入力ベクトル内の要素の位置は、新たな第１の入力ベクトルの第１のアクティブデータ要素が、命令を実行する前の試みに対する第１の入力ベクトル内の特定のアクティブデータ要素と同じ値を有するように変更される。プログラマは、例えば、ベクトル演算命令を囲むループ内に、ベクトル演算命令を実行する１回の試みによって生成された要素識別情報を調べて、すべての要素がうまく処理されたか否かを調べる１つまたは複数の命令を含むことができ、要素識別情報が、特定のアクティブデータ要素が例外条件をトリガしたことを識別する場合、マスクまたは入力ベクトルは、別の試みのためにループバックする前に変更することができる。後続の試みで、特定のアクティブデータ要素が今第１のアクティブデータ要素になることができ、例外条件がまだ発生する場合、応答動作をとることができ、例外的な条件が処理されることを可能にする。したがって、命令は、例外条件を処理するためにリソースの単一組のみを使用して、段階的に入力ベクトルの要素を先に進めることができる。
【００２３】
要素識別情報に基づいて第１の入力ベクトルを更新する場合、これは、特定のアクティブデータ要素が第１のアクティブデータ要素になるように、第１の入力ベクトルを移動することによって達成される（および特定のアクティブデータ要素に続く任意の要素も、特定のアクティブデータ要素に対応する要素内の位置に沿って移動する）。あるいは、ベクトル演算命令が、キャッシュまたはメモリからロードされたデータで第１の入力ベクトル（または第１の入力ベクトルを生成するために使用される以前のベクトル）を満たす以前のベクトルロード命令に続く場合、第１の入力ベクトルは、要素識別情報によって示されるように元のベクトル内の特定のアクティブデータ要素の位置に対応する量だけ、ベクトルロード命令のアドレスを調整し、ベクトルロード命令およびベクトル演算命令自体を繰り返すことによって、効率的に更新できる。このようにして、ベクトル演算命令が次回実行されるとき、ベクトルロード命令は、以前の障害データ要素に対応するデータを、第１のアクティブ要素に対応するベクトル内の位置にロードしている。
【００２４】
要素識別情報は、様々な方法で表現することができる。場合によっては、単に、例外条件をトリガした特定のアクティブデータ要素の要素番号の表示である場合もある。しかしながら、特に有用な表現は、シーケンス内の特定のアクティブデータ要素に先行する少なくとも１つのデータ要素の第１の値を有する１つまたは複数の表示と、特定のアクティブデータ要素およびシーケンス内の後続の任意のアクティブデータ要素に対する第２の値を有する１つまたは複数の表示とを含む要素識別マスクを提供することであり得る。したがって、要素識別マスクは、本質的に、障害なしに既に処理された部分と、依然として障害を引き起こす可能性のある部分とにベクトルを分割することができる。このような要素識別マスクは、命令を実行する後続の試みのための新しいマスクが、より効率的に生成されることを可能にすることができる。また、このタイプの要素識別マスクは、一連のデータ処理動作を実施するために実行されるいくつかの適切な命令が存在する可能性があるため有用であり得、これらの命令のいずれか１つが特定の要素の例外条件に遭遇した場合、次の命令で実行される処理の対応するレーンを停止するのに望ましい。したがって、上述したタイプの要素識別マスクは、後続の命令のためのマスクを生成するのにも有用であり得る。
【００２５】
入力ベクトルの要素の所定のシーケンスは、任意のシーケンスであり得る。しかしながら、しばしば、シーケンス内の第１のアクティブデータ要素が、第１の入力ベクトルの最下位のアクティブデータ要素であると都合がよい場合がある。次いで、シーケンス内の後続の要素は、重要度が最上位アクティブデータ要素まで上がる入力ベクトルのデータ要素に対応することができる。このアプローチは、ベクトル化されたコードが実際に書かれている方法に最もよくマップできる。それにもかかわらず、最上位アクティブデータ要素で始まり、最下位要素で終わるような他のシーケンスを使用することができる。
【００２６】
シーケンス内の第１のアクティブデータ要素以外の複数のアクティブデータ要素が例外条件に遭遇した場合、場合によっては、要素識別情報がこれらの各要素を識別することができる。あるいは、要素識別情報は、例外条件をトリガするシーケンス内の次の要素（第１のアクティブデータ要素の後）のみを識別することができ、後の要素も例外条件を引き起こしても他の要素を識別することができない。
【００２７】
いくつかの実装では、処理回路は、上述のようにベクトル演算命令を常に処理することができ、第１のアクティブデータ要素が例外条件をトリガする場合にのみ応答動作が行われる。
【００２８】
しかしながら、他の実装は、例外条件が第１のアクティブ要素または後続の要素に対して検出されたか否かにかかわらず、処理回路が、ベクトルの任意のアクティブデータ要素に対する例外条件を検出することに応答して少なくとも１つの応答動作を実行する第２のタイプのベクトル演算命令もサポートすることができる。第１および第２のタイプのベクトル演算命令は、全く異なる命令（例えば、異なる演算コードを有する）であってもよく、または命令が第１のタイプであるか第２のタイプであるかを指定する命令符号化におけるフィールドを有する共通命令演算コードに対応してもよい。あるいは、第１および第２の種類のベクトル演算命令は同じ符号化を有することができるが、第１のタイプのベクトル演算命令は処理回路の第１のモードで実行されるベクトル演算命令であり、第２のタイプのベクトル命令は処理回路の第２のモードで実行されるベクトル演算命令であってもよい。例えば、処理回路が現在第１または第２のモードにあるか否かを指定する制御レジスタが存在することができる。
【００２９】
第１タイプのベクトル演算命令が第１のアクティブ要素が例外条件に遭遇したときのみ応答動作をトリガし、第２のタイプが任意のアクティブ要素に対して応答動作をトリガすることができる、ベクトル演算命令の第１および第２のタイプの両方を提供することは、プログラマが、実行されるコードの特性に応じて、代替のタイプの命令の間で選択することを可能にするのに有用である。例えば、コードが上記のようにベクトル演算の投機的実行を必要とする場合、第１のタイプを選択して、いずれにせよ実行される必要のなかったベクトルレーンに応答して不注意に副作用をトリガするのを避けることができる。一方、非投機的コードでは、第２のタイプのベクトル演算命令は、ベクトルの各要素を介して進行するのに複数の反復を必要とする可能性が低い可能性があり、第２のタイプのベクトル演算命令を選択して性能を向上させることができる。したがって、両方のタイプの命令を提供することにより、正しい挙動と性能とのより良いバランスを提供することができる。
【００３０】
いくつかの実装では、第２のタイプのベクトル演算命令の場合、第１の入力ベクトルの任意の要素に対して検出される例外条件に対する応答は、どの要素が例外条件をトリガしたか、およびどのタイプの例外が検出されたかについての正確な表示を記録することを含む。しかしながら、これはかなりの間接費を必要とする。実際には、例外条件は稀であり、この間接費が正当化されない可能性がある。代わりに、第２の種類のベクトル演算命令は、どの特定の要素がどの特定のタイプの例外的条件をトリガしたかを区別せずに、入力ベクトルの任意のアクティブデータ要素に対して発生した任意のタイプの例外条件の表示を提供するために、状態レジスタを更新することを含む応答動作をトリガしてもよい。多くの場合、これは例外処理ルーチン（例えば、オペレーティングシステムなど）が例外条件をどのように解決するかを決定するのを可能にするのに十分であり得る。
【００３１】
例外条件は、さらに調査する必要があるかもしれない異常な結果または特性を示す算術演算によってトリガされる任意のタイプの条件であってもよい。本技法は、算術演算が浮動小数点演算を含む命令の場合に特に有用である。浮動小数点演算のためのＩＥＥＥ  ７５４規格は、浮動小数点演算のために追跡すべき多数の例外条件を規定している。例えば、これらの例外条件には、オーバーフロー、アンダーフロー、不正確、無効な演算、ゼロ除算のうちの１つまたは複数が含まれてもよい。浮動小数点演算のために追跡することができる別の種類の例外条件は、特定の算術演算への入力が非正規であるか否かであってもよい（すなわち、その有効数字は、通常の浮動小数点値ように１で始まるのではなく、少なくとも１つの先頭のゼロで始まる）。比較的多数の例外条件が追跡されるので、これらをベクトルの全レーンについて記録することは非常に高価であり、上述の技術は、単一の組のビットを可能にすることによってハードウェアリソースを大幅に節約し、例外条件の各タイプについて１つが、ベクトルレーン間で共有される。
【００３２】
本技術は、非浮動小数点演算にも使用することができる。例えば、整数演算の場合、いくつかの命令は飽和演算を実行でき、算術演算の結果が一定の最小および最大限界内に収まるようにする。この場合、飽和演算で生成された値の飽和が発生すると、例外条件が発生する可能性がある。すなわち、算術演算が、飽和の最大限界よりも大きい、または最小限界よりも小さい結果をもたらす場合、例外条件がトリガされる可能性がある。
【００３３】
例えば、ベクトル演算命令に応答して実行される算術演算は、加算、減算、乗算、除算、乗算−加算、乗算−減算、平方根などであり得る。算術演算はまた、異なる精度の浮動小数点値間の変換、または浮動小数点値と整数値間の変換など、特定のデータ値の表現を別の形式に変換する変換処理でもあり得る。変換命令のようないくつかの命令では、第１の入力ベクトルは命令の唯一の入力ベクトルであってもよい。加算、減算または乗算命令のような他の命令の場合、第１の入力ベクトルのデータ要素と結合される第２の入力ベクトルがあってもよい。命令によっては、さらに３つ以上の入力ベクトル（例えば、乗算−加算）を満たすこともできる。
【００３４】
本技術は、仮想マシンを使用して実現することもできる。仮想マシンは、ホスト装置によって実行されたときに命令を実行するための命令実行環境を提供するプログラムであってもよく、その結果、ホスト装置は、あたかも前述の回路を有するかのようにプログラマの観点から現れる。ホストプロセッサは、実際にその回路を有する必要はなく、代わりに仮想マシンのコードは、そのような回路が設けられているかのように命令を実行するようにホストハードウェアを制御する。例えば、仮想マシンは、記憶媒体に記憶されたコンピュータプログラムであってもよい。記憶媒体は非一時的であってもよい。
【００３５】
図１は、説明された実施形態の技術が採用され得るシステムのブロック図である。図１に示す例では、システムはパイプラインプロセッサの形式をとる。命令はフェッチ回路１０によって、命令キャッシュ１５（通常はレベル２キャッシュ５０のような１つまたは複数のレベルのキャッシュを介してメモリ５５に結合されている）からフェッチされ、ここから命令は、命令によって要求される動作を実行するためにパイプラインプロセッサ内の下流実行リソースを制御するための適切な制御信号を生成するために、各命令を復号する復号回路２０を通る。復号された命令を形成する制御信号は、パイプラインプロセッサ内の１つまたは複数の実行パイプライン３０、３５、４０および８０に発行するための発行段回路２５に渡される。実行パイプライン３０、３５、４０および８０は、集合的に、処理回路を形成すると見なすことができる。
【００３６】
発行段回路２５は、動作が必要とするデータ値が格納され得るレジスタ６０へのアクセスを有する。特に、ベクトル演算のソースオペランドはベクトルレジスタ６５内に格納でき、スカラ演算のソースオペランドはスカラレジスタ７５に格納できる。さらに、１つまたは複数の述語（マスク）は、特定のベクトル演算を実行するときに処理されるベクトルオペランドのデータ要素のための制御情報として使用するために、述語レジスタ７０に格納されてもよい。スカラレジスタの１つまたは複数はまた、特定のベクトル演算の実行中に使用するためにそのような制御情報を得るために使用されるデータ値を格納するために使用されてもよい。
【００３７】
レジスタ６０はまた、処理パイプラインの動作を制御するための構成情報、または処理の間に生じる状態もしくは命令の結果の特性を示す状態情報などの様々な制御情報を提供するための多数の制御レジスタ７６を含むことができる。例えば、制御レジスタ７６は、浮動小数点コンフィギュレーションレジスタ（ＦＰＣＲ：Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｒｅｇｉｓｔｅｒ）７７、浮動小数点状態レジスタ（ＦＰＳＲ：Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ）７８、およびｆｉｒｓｔ−ｆａｕｌｔｉｎｇレジスタ（ＦＦＲ：Ｆｉｒｓｔ−Ｆａｕｌｔｉｎｇ  Ｒｅｇｉｓｔｅｒ）７９を含むことができ、以下により詳細に述べる。
【００３８】
ソースオペランドおよび任意の関連する制御情報は、経路４７を介して発行段回路２５に送られ、復号された各命令を実現するために実行される動作を識別する制御信号と共に適切な実行ユニットにディスパッチすることができる。図１に示された様々な実行ユニット３０、３５、４０および８０は、ベクトルオペランド上で動作するためのベクトル処理ユニットであると仮定されているが、別個の実行ユニット（図示せず）が、装置によってサポートされる任意のスカラ演算を処理するために、必要であれば提供できる。
【００３９】
様々なベクトル演算を考慮して、これらのソースオペランドに対して算術または論理演算が実行されることを可能にするために、算術演算は、例えば算術論理演算ユニット（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）３０に必要なソースオペランド（および述語のような任意の制御情報）と共に転送され、結果値は、典型的には、ベクトル・レジスタ・バンク６５の指定されたレジスタに格納するためのデスティネーションオペランドとして出力される。
【００４０】
ＡＬＵ３０に加えて、浮動小数点ユニット（ＦＰＵ：Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｕｎｉｔ）３５は、復号された浮動小数点命令に応答して浮動小数点演算を実行するために提供され、ベクトル置換ユニット８０は、ベクトルオペランドに対して特定の置換演算を実行するために提供され得る。さらに、ロード／ストアユニット（ＬＳＵ：Ｌｏａｄ／Ｓｔｏｒｅ  Ｕｎｉｔ）４０は、データ値をメモリ５５から（データキャッシュ４５およびレベル２キャッシュ５０のような介在する他のレベルのキャッシュを介して）レジスタ組６０内の指定したレジスタにロードするためにロード動作を実行するため、およびこれらのレジスタからのデータ値をメモリ５５に戻して格納するためにストア動作を実行するために使用される。図１に示されていない他のタイプの実行ユニットも提供され得ることが理解されるであろう。
【００４１】
図１に示すシステムは、命令のシーケンスがプログラム順序で実行されるインオーダ処理システムであってもよいし、あるいは、パフォーマンスを向上させるために様々な命令を並べ替えるように実行される順番が可能になるアウトオブオーダシステムであってもよい。当業者には理解されるように、アウト・オブ・オーダ・システムでは、追加の構造（図１には明示されていない）が提供されてもよく、例えば、命令によって指定されたアーキテクチャレジスタを、レジスタバンク６０内の物理レジスタのプール（物理レジスタのプールは典型的にはアーキテクチャレジスタの数よりも多い）からの物理レジスタにマップするためのレジスタリネーミング回路を使用することにより、特定の危険を除去し、アウト・オブ・オーダ処理の使用を促進する。さらに、アウト・オブ・オーダ実行の追跡を維持し、様々な命令の実行の結果が順番にコミットできるように、典型的にはリオーダバッファを設けることができる。
【００４２】
記載された実施形態では、図１の回路は、ベクトルレジスタ６５に格納されたベクトルオペランドに対してベクトル演算を実行するように構成され、ここでベクトルオペランドは複数のデータ要素を含んでいる。このようなベクトルオペランドに対して実行される特定のベクトル演算（算術演算など）では、要求された演算はベクトルオペランド内の様々なデータ要素に並列（または反復）で適用できる。述語情報（マスクとも呼ばれる）は、ベクトル内のどのデータ要素が特定のベクトル演算のためのアクティブデータ要素であり、したがって演算が適用されるべきデータ要素であるかを識別するために使用される。
【００４３】
図２は、ＦＰＣＲ７７およびＦＰＳＲ７８の一例をより詳細に示す。図２に示すように、ＦＰＳＲ７８は、異なるタイプの例外条件にそれぞれ対応し、対応するタイプの少なくとも１つの例外条件がそのビット８５が最後にクリアされたため発生したことを示す、多数の例外表示ビット８５を含むことができる。この例では、ＦＰＳＲ７８に示されている例外条件は、
・ＱＣ：整数飽和は、飽和した整数演算の結果が飽和の最大限界を超えるか、または最小限界よりも小さい場合に発生する。
・ＩＤＣ：入力非正規は、浮動小数点演算への入力値が非正規である場合に発生する。
・ＩＸＣ：不正確は、浮動小数点演算の結果が、出力に指定された浮動小数点形式を使用して正確に表現できない場合に発生する。
・ＵＦＣ：アンダーフローは、浮動小数点演算の結果が、出力に指定された浮動小数点形式を使用して表現できるものよりも小さい場合に発生する。
・ＯＦＣ：オーバーフローは、浮動小数点演算の結果が出力に指定された浮動小数点形式を使用して表現できるものより大きい場合に発生する。
・ＤＺＣ：ゼロによる除算は、ゼロで除算しようとすると発生する。
・ＩＯＣ：無効な操作は、無効な操作を実行しようとすると発生する。
【００４４】
他のタイプの例外条件も示すことができることは理解されよう。例外表示ビット８５は、一度設定されると、ＦＰＳＲ７８のビットまたはＦＰＳＲ全体が処理パイプラインによって実行される命令によって明示的にクリアされるまで設定されたままであるという意味で累積される。したがって、例外条件が発生すると対応するビットが設定されるが、例外条件をトリガしない命令は、対応するビットをクリアしない。
【００４５】
ＦＰＣＲ７７は、ＦＰＳＲ７８に示された例外条件のタイプの１つにそれぞれ対応する多数の例外マスクビット８７を含む。例外マスキングビットは、ＦＰＳＲ７８内の例外条件の各タイプが例外のタイプを処理するためにオペレーティングシステムへのトラップをトリガするか否かを制御する。例えば、図２の場合、システムは現在、ゼロによる除算または無効な演算例外条件が、オペレーティングシステムへのトラップをトリガするが、他の種類の例外条件はトリガしないように構成されている。図２に示されていない他の情報も、ＦＰＣＲおよびＦＰＳＲ７８に格納することができることが理解されよう。
【００４６】
この実施形態では、例外の種類毎に単一の例外表示ビット８５を有する単一のＦＰＳＲ７８が提供され、特定のベクトル演算のためのすべてのベクトルレーン間で共有される。したがって、ＦＰＳＲ７８は実質的にスカラＦＰＳＲであり、各ベクトル要素に対して別々に例外を示すレーン毎のビットを含まない。
【００４７】
図３は、浮動小数点ユニット３５によってサポートされるベクトル演算命令のｎｏｎ−ｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式の例を示す。この例では、実行される算術演算は浮動小数点加算演算である。この命令は、ベクトルレジスタ６５に格納されたベクトルＺａおよびＺｂと、述語レジスタ７０に格納された述語Ｐｇの対を入力として取り込み、これは入力ベクトルＺａおよびＺｂのどの要素がアクティブであるかを識別する述語値（またはマスク）を提供する。図３の例では、マスクは、ＺａおよびＺｂの要素０〜３がアクティブであり、要素４〜７が非アクティブであることを示している。したがって、ベクトル演算命令に応答して、浮動小数点ユニット３５は、レジスタＺａおよびＺｂのレーン０〜３における対応する要素ＸおよびＹの浮動小数点加算を実行し、対応する結果要素Ｚ０〜Ｚ３を結果レジスタＺｒに生成する。他方、結果レジスタの非アクティブレーンの要素Ｚ４〜Ｚ７は、加算の結果とは独立しているか、またはそれらのレーンに対して実行される値をとる。例えば、Ｚ４〜Ｚ７は、ゼロのような所定の値に設定することができるか、ＺａおよびＺｂの対応するレーンの入力値の１つに直接マッピングすることができるか、または結果レジスタＺａの対応する部分に前に格納された値を保持することができる。したがって、アクティブレーンのみが、入力の対応する要素に対して実行された算術演算の結果に依存する値に設定される。
【００４８】
ベクトル演算命令のｎｏｎ−ｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式の場合、ベクトルのアクティブレーンのいずれかに例外条件が発生した場合、ＦＰＳＲ７８において対応するビットが設定される。効果的には、アクティブレーンの各々によってトリガされる例外条件の表示は、ＦＰＳＲ７８をそれに応じて設定するためにＯＲ演算を使用して組み合わせることができる。例えば、図３の要素Ｚ０は、不正確な例外ＩＸＣをトリガし、要素Ｚ３は、オーバーフロー例外ＯＦＣをトリガし、したがって、これらのタイプの例外に対応するビット８５が、ＦＰＳＲ７８に設定される。ＦＰＣＲ７７が、これらのタイプの例外がオペレーティングシステムへのトラップをトリガすべきであることを示す場合、トラップが実行され、オペレーティングシステムはこれらのタイプの例外に対処する例外処理ルーチンを実行することができる。図３に示す命令のｎｏｎ−ｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式では、ＦＰＳＲは例外条件をトリガした特定の要素を区別しないことに注意されたい。
【００４９】
図４は、ベクトル演算命令の異なるｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式を示す。算術演算自体は図３と同じであり、入力ベクトルＺａおよびＺｂにおける対応する要素の浮動小数点加算は、述語レジスタＰｇのマスクの対応するビットが１であるレーン毎に実行される。今回は、マスクのすべての要素が１であるため、この例ではすべての要素がアクティブである。この例では、図４に示す命令のｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式は、図３に示す命令のｎｏｎ  ｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式と比較して、異なる演算コードを有する。あるいは、異なる形式の命令は、同じ演算コードを共有することができるが、命令のどの形式が実行されているかを指定するフィールドを含むことができる。また、ある場合には、命令のｎｏｎ  ｆｉｒｓｔ  ｆａｕｌｔｉｎｇおよびｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式の符号化は完全に同一であり得るが、命令が第１の形式または第２の形式であると考えられるか否かは、処理回路の現在の動作モードに依存してもよい。例えば、ＦＰＣＲ７７の１ビットまたは、ベクトル算術演算が図３のｎｏｎ  ｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式または図４のｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式に従って実行されるべきか否かを示すためのプロセッサのモードを設定する他の制御レジスタ７６の１つがあり得る。
【００５０】
図４に示す命令のｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式の場合、例外条件は図３のｎｏｎ  ｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式とは異なる方法で処理される。図４に示すように、ベクトルの第１のアクティブ要素（この例では最下位要素Ｘ０、Ｙ０、Ｚ０）で実行される算術演算に対して例外条件が発生すると、適切な例外処理応答がとられる。例えば、これは、ＦＰＳＲ７８内の対応するビットを設定するステップと、ＦＰＣＲがその種の例外のトラッピングをイネーブルにしたか否かに応じて、必要に応じてオペレーティングシステムにトラッピングするステップを含むことができる。例外的条件がベクトルの他の要素の１つに対して検出されても、これに対する応答はとられず、ＦＰＳＲ７８は、ベクトルの第１のアクティブ要素以外の任意の要素に対して発生した例外条件に基づいて更新されない。例えば、図４では、対応する要素Ｘ３、Ｙ３およびＺ３を含むレーンに対してオーバーフローが検出されたが、ＦＰＳＲ７８のオーバーフロービットは設定されない。
【００５１】
他方、図５に示すように、命令のｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式の場合、第１のアクティブ要素が例外条件をトリガしない場合、障害処理応答は抑制される。したがって、ＦＰＳＲ７８は修正されず、オペレーティングシステムへのトラッピングはない。しかしながら、ベクトル内の第１のアクティブ要素ではない要素の算術演算が例外条件をトリガする場合、図５に示すように、ｆｉｒｓｔ  ｆａｕｌｔｉｎｇレジスタ７９が更新されて例外をトリガした要素を記録する。図５に示すように、ｆｉｒｓｔ  ｆａｕｌｔｉｎｇレジスタは障害マスクに応答してもよく、障害をトリガした要素３よりも下位の要素０〜２が１のビット値で示され、ＦＦＲ７９のマスクビットが障害をトリガした要素３および後続の任意の要素については０である。
【００５２】
ＦＦＲ７９は、必要に応じて、ベクトル演算命令を実行する別の試みのためにマスクまたは入力ベクトルのいずれかを設定するために後続の命令によって使用され得る情報を提供する。例えば、図６に示すように、ＦＦＲ７９を前のマスクＰｇと組み合わせて、まだ処理されていない例外条件を依然として引き起こし得る残りの要素を表す新しいマスクＰｇ’を生成することができる。例えば、これは、ＦＦＲ７９の対応するビットも１である１に等しい元のマスクＰｇの任意のビットをクリアすることによって決定することができる。元のマスクＰｇがすべて１である場合、新しいマスクを生成する別の方法は、元のマスクＰｇからＦＦＲ７９を減算することであってもよい。
【００５３】
あるいは、図７に示すように、ＦＦＲ７９を使用して、ベクトル演算命令の入力ベクトルＺａを修正し、ＦＦＲ７９内のゼロで示される要素Ｘ３〜Ｘ７を入力ベクトルの第１のアクティブ要素に対応するベクトル位置０〜４にリロードすることができる。他の任意の入力ベクトルＺｂについても同様の演算を行うことができ、次にベクトル演算命令を繰り返すことにより、要素Ｘ３が第１のアクティブ要素となり、これにより例外条件がトリガされた場合、これをＦＰＳＲに記録して必要であればトラップすることができる。
【００５４】
したがって、ベクトル演算命令を使用するソフトウェアは、例外条件なしでどの要素が正しく実行されたかを示し、必要であれば例外条件を以前にトリガしたアクティブ要素から開始して命令を繰り返すためにＦＦＲ７９をチェックするベクトル演算命令の回りにループを提供してもよい。このようなループの例を下の図９に示す。
【００５５】
このアプローチにはいくつかの利点がある。第１に、この技法は、ベクトルの各要素について発生した例外条件の正確な記録を可能にし、例外条件をトリガした特定の要素を追跡することを含み、ＦＰＳＲ７８内の例外表示ビットの単一の組のみを使用して、各ベクトルレーンに対してビット８５の別個のコピーを提供する必要を回避するが、これはより大きいＦＰＳＲ７８が要求されるだけでなくベクトルが大きくなるときに非常に高価になる可能性があり、さらにパイプラインを通過する浮動小数点例外フラグの複数のコピーを必要とする可能性がある。
【００５６】
また、命令からのｆｉｒｓｔ  ｆａｕｌｔｉｎｇは、ベクトル演算の投機的実行をサポートするのに役立つ。これは、図８および図９に関してより詳細に説明される。図８は、特定のベクトル演算命令の非投機的実行（ｎｏｎ−ｓｐｅｃｕｌａｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）の例を示し、図９は、命令の投機的実行（ｓｐｅｃｕｌａｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）の例を示す。
【００５７】
ベクトル命令は、アレイの各値に対して対応する結果を生成するために、データ値のアレイ内の各値に所定の一組の処理動作を適用する必要がある場合に特に便利である。典型的には、処理する多数のデータ値をメモリからベクトルレジスタにロードするベクトルロード命令、さらに、結果値をメモリに戻すためにベクトルストア命令を実行する前に、ロードされたベクトルの各データ要素を処理し、何らかの方法で結果を生成する１つまたは複数のベクトル演算命令を提供することによってコードをベクトル化することができる。しかしながら、多くの場合、処理されるデータ値の総数は、処理回路によってサポートされるベクトル長の正確な倍数でない場合がある。典型的には、ベクトル化されたコードは、ベクトルロード命令および多数のベクトル演算命令を含む一組の命令を通じて繰り返し反復するループを含み、各ループ反復はベクトル長に対応するデータ値の特定のブロックを処理する。多くの場合、何らかの種類の停止条件がループ内で定義され、必要なデータ値のすべてが処理されたか否かをチェックし、そうである場合はループを中断することができる。停止条件は、現在処理されているベクトルの各要素に対して別々にチェックされてもよく、要素の１つがストップ条件を満たすと判定された場合、そのベクトルの後の要素は実際に処理する必要がないことを示してもよい。
【００５８】
いくつかのベクトル命令の場合、停止条件は、そのベクトル命令の結果とは独立していてもよい。図８に示すように、入力ベクトルＺａおよびＺｂに基づいて結果ベクトルＺｒを生成する特定のベクトル加算命令に対して、対応する停止条件は、他のベクトルＺｃに依存するので、加算の結果とは独立している。この場合、ベクトル加算命令は、要素が条件の結果に関係なく処理されるべきであることが知られているので、非投機的であると考えることができる。
【００５９】
他方、図９に示すように、他の例では、停止条件は、ベクトル加算命令の結果に依存することがあり、例えば、この場合、停止条件は、ベクトル加算命令によって生成された結果ベクトルの任意の要素ｊが何らかの条件を満たすか否かチェックし、そうである場合、ループは中断する。結果ベクトルＺｒの要素ｊの１つが条件を満たす場合、これは、任意の後続の要素ｊ＋１、ｊ＋２などが処理されてはならなかったことを示す。別のアプローチは、実際にベクトル演算を非投機的に実行する前にＺｒの値が何であるかをチェックする命令をさらに実行することであるが、これは追加の命令を必要とし、コードのベクトル化を複雑にする。すべての要素が実際に必要とされるか否かが分かる前に、ベクトル加算命令を投機的に実行できるようにすることによって、性能を向上させることができる。しかしながら、このことは、ｎｏｎ−ｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式の命令が実行された場合、ＦＰＳＲ７８は、ベクトル処理の投機的レーンに対して生じる例外条件に基づいて更新することができ、これは後で必要でないことが分かる状況を招く可能性がある。この場合、投機的実行は、偽の例外を示したり、不必要にオペレーティングシステムにトラップしたりするという望ましくない副作用を引き起こす可能性がある。
【００６０】
これは、図４および図５に関して説明したように、命令のｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式を代わりに実行することによって回避することができる。ベクトルの第１のアクティブ要素は、要素が停止条件を満たすとしても依然として有効な結果であるため、一般に非投機的要素である。したがって、第１のアクティブ要素に対してトリガされた例外条件に応答して、故障処理応答をトリガすることに問題はない。任意の後続の要素も例外条件をトリガする場合、これは応答をトリガしないため、これらの要素が誤投機であると分かった場合に望ましくない副作用につながることはない。停止条件が満たされていないときに命令を正しく進行させるために、図９に示すように、ベクトルの他の要素に対して任意の残りの動作があることをＦＦＲ７９が示す場合、命令を再び試みるために、ベクトル演算命令の周りにループを設定する。例えば、命令１００は、ベクトル加算命令１０２を実行しようとする前に、ＦＦＲのすべてのビットを設定することができる。条件を解決し、必要に応じてループを中断した後（命令１０４）、条件が満たされない場合、命令１０６は、ベクトル演算命令１０２によって使用されるマスクＰｋを変更し、例外をトリガした要素から開始して残りの要素をアクティブとして示す。これは、図６の例のように、前のマスク７０およびＦＦＲ  ７９に基づいて決定される。ブランチ命令１０８は、処理されるべき少なくとも１つの残りの要素がある場合、すなわち新しいマスクがすべてのビットがゼロである値以外の値を有する場合、命令１００に分岐して戻る。
【００６１】
図１０は、このようにベクトル演算命令の複数回の反復の周りのループの例を示す。最初の反復では、第１のアクティブ要素に対して例外は発生せず、これはこの例ではベクトルインデックス［１］であるが、ベクトルインデックス［２］で次のアクティブ要素に対して例外が検出される。要素［２］は第１のアクティブデータ要素ではないので、例外応答はとられず、代わりにＦＦＲ７９は要素［２］と要素［３］に対応するビットをクリアするように更新される。その後、第２のループ周り反復のために新しい述語を生成するためにＦＦＲ７９が使用され、ここで今度は第１のアクティブ要素がレーン［２］であり、今回は、例外がＦＰＳＲ７８内のフラグの設定、およびＦＰＣＲ７７によって要求される場合オペレーティングシステムへのトラップをトリガする。同様に、シーケンスの後の要素でさらに例外を処理する必要がある場合は、命令のさらなる反復を実行できる。
【００６２】
実際には、浮動小数点例外は稀であり、汎用ソフトウェアは浮動小数点状態フラグの値にほとんど依存しないため、浮動小数点例外が発生したときに直列化を導入するソリューションは、パフォーマンスの点で完全に許容される。プログラマは、ベクトル処理の投機的実行が必要な場合、またはベクトルのどの特定の要素が例外条件をトリガしたかを正確に追跡することが重要な場合、ｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式の命令を選択できる。この場合、命令の複数のループを反復して、連続するアクティブ要素上で発生する例外を段階的に処理することにより、正確な例外処理が可能となり、誤投機的レーンによってトリガされる擬似例外処理を回避することができる。
【００６３】
他方、ベクトル演算が、すべてのアクティブ要素を処理する必要があることが既に分かっているときに非投機的に実行されている場合、性能を向上させ、ベクトル命令を囲むループを提供する追加の命令の必要を回避するために命令のｎｏｎ−ｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式を選択することができる。同様に、どの特定のレーンが例外をトリガしたかを正確に識別する必要がない場合、例外をトリガした特定のレーンを記録することなく、任意のレーンに対してどの例外タイプが生じたかを単にＦＰＳＲ７８に記録するためにｎｏｎ  ｆｉｒｓｔ  ｆａｕｌｔｉｎｇ形式の命令を選択できる。
【００６４】
上記の例は、ベクトル演算命令が加算命令である場合を示しているが、浮動小数点演算および整数演算を含む様々な種類の算術演算の範囲に対して同様の技術を実行することができることが理解されよう。
【００６５】
図１１は、ベクトル演算命令の処理例を示すフロー図である。ステップ２００で、処理パイプラインは、現在の命令がベクトル演算命令であるか否かを検出し、そうでない場合、何らかの他の方法で命令を処理する。ベクトル演算命令が実行されると、ステップ２０２において、パイプラインが命令のタイプを決定する。命令が第１のタイプ（命令のｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式）である場合、ステップ２０４において、対応する算術演算が入力ベクトルの各アクティブ要素に対して実行され、結果ベクトルの対応する結果要素を生成する。ステップ２０６では、ベクトルの第１のアクティブ要素について例外条件が検出されたか否かが判定される。そうである場合、ステップ２０８において、ＦＰＳＲ７８は、どの例外条件が発生したかを示すように更新され、ステップ２１０において、ＦＰＣＲ７７は、検出された例外条件に対して現在オペレーティングシステムへのトラッピングが可能であるか否かを判断するためにチェックされ、そうである場合、トラップがトリガされる。他方、第１のアクティブ要素に対して例外条件が発生しなかった場合、ステップ２１２において、処理回路は、第１のアクティブ要素ではない別のアクティブ要素に対して例外条件が発生したか否かを判定する。そうである場合、ステップ２１４において、例外条件および任意の後続の要素をトリガしたアクティブ要素に対してＦＦＲ７９の１つまたは複数のビットがクリアされる。他方、いずれの要素に対しても例外条件が発生しなかった場合、ステップ２１４はスキップされる。そして、現在のベクトル演算命令の処理を終了する。上述のように、さらなる命令は、ＦＦＲ７９を使用して、ベクトル算術演算命令へのマスクまたは入力ベクトルを変更することができ、すべての要素がまだ処理されているわけではなく、例外条件が十分に処理されていない場合、ベクトル算術命令を再び試みるために分岐して戻る。
【００６６】
他方、現在のベクトル演算命令が第２のタイプ（命令のｎｏｎ−ｆｉｒｓｔ−ｆａｕｌｔｉｎｇ形式）である場合、ステップ２２０において、算術演算が各アクティブ要素に対して実行され、結果のベクトルの対応する結果の要素を生成する。ステップ２２２において、ＦＰＳＲ７８は、ベクトルの任意のアクティブ要素に対して発生した任意の例外条件を示すように更新される。これは、例外を引き起こした特定の要素を区別しない。ステップ２２４で、処理回路は再びＦＰＣＲをチェックして、発生した任意の例外条件に対してオペレーティングシステムへのトラップが必要か否かを判定し、必要に応じてオペレーティングシステムにトラップする。命令の処理は終了する。
【００６７】
図１２および図１３は、浮動小数点例外フラグへの投機的更新を処理する別の手法を示す。上述のようにベクトル演算命令の第１および第２の形式を提供する代わりに、ベクトル命令の投機的処理に対応するＦＰＳＲ、ＦＰＳＲ１  ７８−１の第１のバージョンにある任意のベクトルレーンに対して発生した例外条件を記録する１つのタイプのベクトル演算命令を提供することができる。投機が正しかったか否かを制御する関連条件が解決されると、コミット命令を実行して、正しく投機されたレーンの浮動小数点例外フラグを浮動小数点状態レジスタＦＰＳＲ２  ７８−２の第２のバージョンにコピーすることができ、これはＦＰＳＲの非投機的な状態（またはコミットされたバージョン）を表現する（図１３を参照）。例えば、コミット命令は、ＦＰＳＲ１  ７８−１とＦＰＳＲ２の前の値とをＯＲ演算で組み合わせて、ＦＰＳＲ２の更新状態を生成することができる。必要な場合、結合命令を使用して、状態フラグのベクトル化したビューをＦＰＳＲ７８の伝統的なスカラビューに変換し、例外のタイプ毎に単一フラグがベクトル全体の間で共有され、どの例外が全体としてのベクトルに生じたかを示すことができる。例えば、結合命令は、ＦＰＳＲ２  ７８−２の各レーンで特定の例外に対する対応するフラグをＯＲして、そのタイプの例外がベクトル全体として発生したか否かを示す全体的なフラグを生成することができる。
【００６８】
図１２は、浮動小数点例外または整数飽和を引き起こす任意のデータ要素の最下位バイトと整列するバイト幅フラグ要素の浮動小数点および整数飽和状態を捕捉するためのＦＰＳＲ１  ７８−１およびＦＰＳＲ２  ７８−２のレイアウト例を示す。最小浮動小数点要素は通常３２ビット幅であり、整数要素は８ビットであってもよいため、浮動小数点状態フラグ８５は４の倍数であるフラグ要素番号にのみ現れ、整数飽和フラグＱＣは各バイトにおいて発生する。未使用のビットは、ハードウェアによって格納される必要はなく、読み込み時にゼロを返す。レジスタ内のビットは、アクティブなベクトル要素にＳｈｏｊｉ浮動小数点または飽和整数演算の副作用の１つを受け入れてもよい。ＦＰＳＲ１およびＦＰＳＲ２の最下位３２ビットを図１２に示すが、これは最大ベクトル長まで繰り返すことができる。
【００６９】
図１４は、使用可能な仮想マシンの実装を示す。前述の実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム５１０をサポートするホストオペレーティングシステム５２０を実行するホストプロセッサ５３０上で実行する。通常、処理能力の高い大規模なプロセッサは、妥当な速度で実行する仮想マシンの実装を提供する必要があるが、そのようなアプローチは、互換性や再利用のために別のプロセッサにコードをネイティブに実行したいという要望がある場合などの特定の環境において正当化することができる。仮想マシンプログラム５１０は、仮想マシンプログラム５１０によってモデル化されている実際のハードウェアによって提供されるアプリケーション・プログラム・インターフェースと同じアプリケーションプログラム５００にアプリケーション・プログラム・インターフェースを提供する。したがって、上述したメモリアクセスの制御を含むプログラム命令は、仮想マシンハードウェアとの相互作用をモデル化するために、仮想マシンプログラム５１０を使用してアプリケーションプログラム５００内から実行することができる。
【００７０】
本出願において、「〜ように構成される」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサもしくは他の処理装置が機能を実行するようにプログラムされてもよい。「〜ように構成される」は、定義された動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
【００７１】
本発明の例示的な実施形態を添付の図面を参照して詳細に説明したが、本発明はこれらの厳密な実施形態に限定されず、様々な変更および修正が添付の特許請求の範囲によって規定される本発明の範囲および趣旨から逸脱することなく、当業者により本発明の範囲内において行うことができる。
【図１】
2018531467.tif 000003
【図２】
2018531467.tif 000004
【図３】
2018531467.tif 000005
【図４】
2018531467.tif 000006
【図５】
2018531467.tif 000007
【図６】
2018531467.tif 000008
【図７】
2018531467.tif 000009
【図８】
2018531467.tif 000010
【図９】
2018531467.tif 000011
【図１０】
2018531467.tif 000012
【図１１】
2018531467.tif 000013
【図１２】
2018531467.tif 000014
【図１３】
2018531467.tif 000015
【図１４】
2018531467.tif 000016
【国際調査報告】
2018531467.tif 000017
2018531467.tif 000018