JP2018531467A6 - ベクトル演算命令の例外条件処理 - Google Patents

ベクトル演算命令の例外条件処理 Download PDF

Info

Publication number
JP2018531467A6
JP2018531467A6 JP2018519476A JP2018519476A JP2018531467A6 JP 2018531467 A6 JP2018531467 A6 JP 2018531467A6 JP 2018519476 A JP2018519476 A JP 2018519476A JP 2018519476 A JP2018519476 A JP 2018519476A JP 2018531467 A6 JP2018531467 A6 JP 2018531467A6
Authority
JP
Japan
Prior art keywords
vector
data element
active data
exception
input vector
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018519476A
Other languages
English (en)
Other versions
JP2018531467A (ja
JP6942298B2 (ja
Inventor
ガブリエッリ、ジャコモ
ジョン スティーブンズ、ナイジェル
Original Assignee
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from GB1518735.4A external-priority patent/GB2543554B/en
Application filed by エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2018531467A publication Critical patent/JP2018531467A/ja
Publication of JP2018531467A6 publication Critical patent/JP2018531467A6/ja
Application granted granted Critical
Publication of JP6942298B2 publication Critical patent/JP6942298B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

処理回路30および35は、少なくとも第1の入力ベクトルを指定する第1のタイプのベクトル演算命令をサポートする。所定のシーケンス内の第1の入力ベクトルの第1のアクティブデータ要素に対して実行された算術演算に対して少なくとも1つの例外条件が検出された場合、処理回路30および35は少なくとも1つの応答動作を実行する。所定のシーケンス中の第1のアクティブデータ要素以外の特定のアクティブデータ要素について少なくとも1つの例外条件が検出された場合、処理回路30および35は少なくとも1つの応答動作を抑制し、どのデータ要素が、例外条件をトリガした特定のアクティブデータ要素であるかを識別する要素識別情報を格納する。これは、例外条件の発生を追跡するため、および/またはベクトル命令の投機的実行をサポートするためのハードウェアリソースの量を削減するのに役立つ。

Description

本技術は、データ処理の分野に関する。より詳細には、本技術はベクトル演算命令の処理に関する。
いくつかのデータ処理装置は、ベクトルの各データ要素に対して特定の処理操作を実行して、結果ベクトルの対応するデータ要素を生成するベクトル処理をサポートすることができる。これにより、多数の異なるデータ値を単一の命令で処理することが可能になり、与えられた数のデータ値を処理するのに必要なプログラム命令の数を減らすことができる。ベクトル処理は、SIMD(単一命令、複数データ:Single Instruction、Multiple Data)処理とも呼ばれる。
少なくともいくつかの例は、
複数のデータ要素を含む少なくとも第1の入力ベクトルを指定する第1のタイプのベクトル演算命令に応答して、前記第1の入力ベクトルの少なくとも1つのアクティブデータ要素の算術演算を実行する処理回路を含む装置を提供し、
ここで、第1の入力ベクトルのデータ要素は所定のシーケンスを有し、
所定のシーケンスにおいて第1のアクティブデータ要素に対して実行される算術演算に対して、少なくとも1つの例外条件が検出されたとき、処理回路は少なくとも1つの応答動作を実行するように構成され、
前記少なくとも1つの例外条件が、前記所定のシーケンスにおける前記第1のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された算術演算に対して検出された場合、処理回路は、前記少なくとも1つの応答動作を抑制し、第1の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するように構成される。
少なくともいくつかの例は、
複数のデータ要素を含む少なくとも第1の入力ベクトルを指定する第1のタイプのベクトル演算命令に応答して、前記第1の入力ベクトルの少なくとも1つのアクティブデータ要素の算術演算を実行する手段を含む装置を提供し、
ここで、第1の入力ベクトルのデータ要素は所定のシーケンスを有し、
所定のシーケンスにおいて第1のアクティブデータ要素に対して実行される算術演算に対して、少なくとも1つの例外条件が検出されたとき、実行する手段は少なくとも1つの応答動作を実行するように構成され、
前記少なくとも1つの例外条件が、前記所定のシーケンスにおける前記第1のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された算術演算に対して検出された場合、実行する手段は、前記少なくとも1つの応答動作を抑制し、第1の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するように構成される。
少なくともいくつかの例は、
複数のデータ要素を含む少なくとも第1の入力ベクトルを指定する第1のタイプのベクトル演算命令に応答して、前記第1の入力ベクトルの少なくとも1つのアクティブデータ要素の算術演算を実行することを含むデータ処理方法を提供し、ここで、第1の入力ベクトルのデータ要素は所定のシーケンスを有し、
所定のシーケンスにおいて第1のアクティブデータ要素に対して実行される算術演算に対して、少なくとも1つの例外条件が検出されたとき、少なくとも1つの応答動作を実行し、
前記少なくとも1つの例外条件が、前記所定のシーケンスにおける前記第1のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された算術演算に対して検出されたとき、前記少なくとも1つの応答動作を抑制し、第1の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納する。
少なくともいくつかの例は、データ処理装置によって実行されると、上記のような装置に対応する命令実行環境を提供する仮想マシンを提供するコンピュータ可読記憶媒体に格納されたコンピュータプログラムを提供する。
本技術のさらなる態様、特徴および利点は、添付の図面と併せて読まれる以下の実施例の説明から明らかになるであろう。
図1は、ベクトル処理をサポートするデータ処理装置の一例を概略的に示す図である。 図2は、浮動小数点状態レジスタおよび浮動小数点制御レジスタの例を示す図である。 図3は、ベクトル演算命令のnon−first−faulting形式の例を示す。 図4は、ベクトルの第1のアクティブ要素に対して例外条件が発生するベクトル演算命令のfirst−faulting形式の例を示す。 図5は、第1のアクティブ要素ではない要素に対して例外条件が発生するベクトル演算命令のfirst faulting形式の例を示す。 図6は、first−faultingベクトル演算命令を実行する後続の試みのための新しいマスクを生成する例を示す。 図7は、first−faultingベクトル演算命令を実行する後続の試みのための新しい入力ベクトルを生成する例を示す。 図8は、ベクトル演算命令の非投機的実行(non−speculative execution)のための擬似コードの例を示す。 図9は、ベクトル演算命令の投機的実行(speculative execution)のための擬似コードの例を示す。 図10は、すべてのアクティブ要素が処理されるまで、ベクトル演算命令を複数回実行するためのループの例を示す。 図11は、ベクトル演算命令を処理する方法を示すフロー図である。 図12は、浮動小数点状態レジスタの代替レイアウトを示す。 図13は、図12の状態レジスタレイアウトを使用したベクトル演算命令の投機的実行を処理する技術を示す。 図14は、仮想マシン実装を示す。
いくつかの特定の例を以下に説明する。本発明はこれらの特定の例に限定されないことが理解される。
処理回路は、複数のデータ要素を含む少なくとも第1の入力ベクトルを指定する少なくとも第1のタイプのベクトル演算命令をサポートすることができる。第1のタイプのベクトル演算命令に応答して、処理回路は、第1の入力ベクトルの少なくとも1つのアクティブデータ要素の算術演算を実行することができる。場合によっては、第1の入力ベクトルの1つまたは複数のアクティブデータ要素に対して実行された算術演算に対して例外条件が検出されることがある。例えば、例外条件は、結果が結果値によって表現できる範囲外になったこと、またはエラーが発生したことを示すことができる。
第1の入力ベクトルのデータ要素は、所定のシーケンスを有すると考えられる。シーケンス内の第1のアクティブデータ要素に対して実行された算術演算について少なくとも1つの例外条件が検出された場合、処理回路は少なくとも1つの応答動作を実行することができる。しかしながら、シーケンス中の第1のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された算術演算に対して少なくとも1つの例外条件が検出された場合、処理回路は少なくとも1つの応答動作を抑制し、第1の入力ベクトルのどのデータ要素が、例外条件が検出された特定のアクティブデータ要素であるかを識別する要素識別情報を格納できる。
このアプローチにはいくつかの利点がある。第1に、検出された例外条件を追跡し、必要に応じて少なくとも1つの応答動作を実行すると、処理回路に一定のリソースを提供する必要がある。実行されるベクトル処理の各レーンに対してこのようなリソースを別々に提供することは、回路面積およびそのようなリソースを管理する間接費の点で高価になる可能性がある。実際には、例外条件は比較的稀であり、この間接費が正当化されない可能性がある。シーケンス内の第1のアクティブデータ要素に対して例外条件が実行されたときに応答動作を実行するが、他のデータ要素が例外条件をトリガする場合にはそれを抑制して、例外条件処理は、ベクトルの各データ要素に対してこれらのリソースを複製する必要なく単一のデータ要素に対応する単一の組のリソースで効率的に管理できる。
シーケンス内の後の要素が例外条件をトリガするとき、要素識別情報を使用して、ベクトル演算命令の実行を再開することができ、故障していた要素は、ここで第1のアクティブデータ要素になる。このようにして、演算命令の実行の繰り返される反復は、ベクトルの要素を介して徐々に前進することができ、各パス上の第1のアクティブデータ要素に対して単一の組のリソースを使用して任意の例外条件が追跡され、ベクトルレーン毎の複数のリソースの組の必要を省く。
例えば、第1のアクティブデータ要素について例外条件が検出された場合、少なくとも1つの応答動作は、状態レジスタを更新してどの例外条件が発生したかを示すことを含むことができる。例えば、状態レジスタは、異なるタイプの例外条件を示すビットの組を含むことができ、応答は、例外条件の検出されたタイプに対して適切なビットを設定することを含むことができる。第1のアクティブデータ要素に対する応答を実行するが、例外条件をトリガする他の要素に対する応答は実行しないことにより、ベクトル全体のデータ要素間で単一の組の例外条件表示ビットを共有することができ(例外条件のタイプ毎に1ビット)、全データ要素に対して発生した例外条件を追跡するために複数のレーン毎のステータスビットの組を提供する必要はない。これは、より小さい状態レジスタの使用を可能にするだけでなく、処理回路内のデータ経路に沿って運ばれる状態フラグの数を減らすことにおいても、ハードウェアの複雑さを大幅に低減することができる。
また、応答動作は、例外処理ルーチンの実行をトリガすることを含むことができる。例えば、特定の例外条件が発生した場合、これはオペレーティングシステムまたは他の制御プログラムへのトラップをトリガし、例外条件を処理するための処置をとることができる。したがって、他の要素についてではなく、シーケンス内の第1のアクティブデータ要素について例外条件が検出された場合、例外処理ルーチンが実行される。
いくつかの実装では、一定の例外条件がシーケンス内の第1のアクティブデータ要素について検出された場合、例外処理ルーチンを常にトリガすることができる。あるいは、異なるタイプの例外条件に対して例外処理ルーチンの実行をトリガするか否かを示す構成情報を指定するためのコンフィギュレーションレジスタを提供することができる。この場合、応答は、コンフィギュレーションレジスタ内のコンフィギュレーション情報が、例外処理ルーチンを検出された例外条件タイプに対してトリガすべきであることを指定する場合のみ、例外処理ルーチンの実行をトリガすることを含むことができる。
いくつかのシステムは、ベクトル演算の投機的実行をサポートすることができ、特定の条件がベクトルの特定の要素を処理する必要があるか否かを制御するが、ベクトル命令は関連する条件が実際に解決される前に実行することができる。場合によっては、関連する条件は、他の要素を実際に処理すべきか否かを決定するために、ベクトルのいくつかの要素に対してベクトル命令を実行した結果に、依存することもできる。このような投機的実行を可能にすると、命令を実行する前にどの要素が処理されるかを正確に知る必要のあるシステムと比較して、コードのベクトル化がより効率的または実用的になる可能性がある。例えば、これは、同じプログラムループの異なる反復を並列処理するためにベクトル処理が使用され、ベクトルオペランドの異なる要素が、同じループの異なる反復で使用または生成される値に対応する場合に、有用であることが多い。
しかしながら、ベクトル演算命令の投機的実行が可能である場合、第1の入力ベクトルのデータ要素のいくつかは投機的に処理され、関連する条件が解消された後で、処理すべきではなかったことが後で判明する結果となることもある。これらの要素によって例外条件が検出された場合、実際には、この動作がそもそも実行すべきではなかったとき(例えば、状態レジスタの更新または例外処理ルーチンの実行)、この応答動作は実行された可能性がある。ベクトル処理の間違って投機されたレーンに起因するこのような副作用を引き起こすことは望ましくない。
1つのアプローチは状態レジスタの2つの異なるバージョンを維持でき、1つの投機的バージョンと、1つの非投機的バージョンであり、投機的に実行されるレーンの処理がコミットされた後に、投機的バージョンに基づいて非投機的バージョンを更新する。しかしながら、状態レジスタの投機的および非投機的バージョンを追跡するために追加のレジスタが必要となるだけでなく、一旦投機が解決されると、ステータス表示のコミットされたバージョンを解決するために、実行される追加の命令を必要とするため、ハードウェアの点でより高価になる可能性がある。上述の技術を使用することにより、一般にシーケンス内の第1のアクティブデータ要素は処理の非投機的実行レーンにあり、この要素に対して検出された例外条件に応答して応答動作を実行することは安全であるため、この追加の間接費は回避できる。入力ベクトルの他の要素については、たとえこれらの要素が例外条件を生成しても、これは応答動作をトリガしないので、後でこれらの処理レーンが誤投機であることが分かった場合でも、生成された有害な副作用はない。したがって、上述の技術はさらに、ベクトル演算の投機的実行の処理をより効率的にするのに役立つ。
入力ベクトルのアクティブ要素は、様々な方法で決定することができる。場合によっては、入力ベクトルのすべての要素がアクティブな要素と考えられることがあるので、どのデータ要素がアクティブであるか、または非アクティブであるかを定義するデータが存在しないことがある。つまり、入力ベクトルは述語付きでないベクトルである可能性がある。この場合、第1のアクティブ要素は、単にベクトルの第1の要素であってもよい(例えば、所定のシーケンスが最下位要素から最上位要素まで延びるものとして扱われる場合、最下位要素)。
しかしながら、より柔軟な技法は、どのデータ要素がアクティブデータ要素または非アクティブデータ要素であるかを示すマスクに入力ベクトルを関連付けることであり得る。この場合、第1のアクティブデータ要素は、入力ベクトルの第1の要素以外の要素であってもよい。
シーケンス内の第1のアクティブデータ要素以外の特定のアクティブデータ要素について例外条件が検出された場合、要素識別情報を使用して、後続の試みのためにベクトル演算命令に関連するマスクを修正し、命令を実行し、または後続の試みのために入力ベクトル自体を変更することができる。例外条件をトリガした特定の要素が、シーケンス内の第1のアクティブデータ要素になるようにマスクを更新することができる(例えば、前の要素を非アクティブとして示すことができる)か、または第1の入力ベクトル内の要素の位置は、新たな第1の入力ベクトルの第1のアクティブデータ要素が、命令を実行する前の試みに対する第1の入力ベクトル内の特定のアクティブデータ要素と同じ値を有するように変更される。プログラマは、例えば、ベクトル演算命令を囲むループ内に、ベクトル演算命令を実行する1回の試みによって生成された要素識別情報を調べて、すべての要素がうまく処理されたか否かを調べる1つまたは複数の命令を含むことができ、要素識別情報が、特定のアクティブデータ要素が例外条件をトリガしたことを識別する場合、マスクまたは入力ベクトルは、別の試みのためにループバックする前に変更することができる。後続の試みで、特定のアクティブデータ要素が今第1のアクティブデータ要素になることができ、例外条件がまだ発生する場合、応答動作をとることができ、例外的な条件が処理されることを可能にする。したがって、命令は、例外条件を処理するためにリソースの単一組のみを使用して、段階的に入力ベクトルの要素を先に進めることができる。
要素識別情報に基づいて第1の入力ベクトルを更新する場合、これは、特定のアクティブデータ要素が第1のアクティブデータ要素になるように、第1の入力ベクトルを移動することによって達成される(および特定のアクティブデータ要素に続く任意の要素も、特定のアクティブデータ要素に対応する要素内の位置に沿って移動する)。あるいは、ベクトル演算命令が、キャッシュまたはメモリからロードされたデータで第1の入力ベクトル(または第1の入力ベクトルを生成するために使用される以前のベクトル)を満たす以前のベクトルロード命令に続く場合、第1の入力ベクトルは、要素識別情報によって示されるように元のベクトル内の特定のアクティブデータ要素の位置に対応する量だけ、ベクトルロード命令のアドレスを調整し、ベクトルロード命令およびベクトル演算命令自体を繰り返すことによって、効率的に更新できる。このようにして、ベクトル演算命令が次回実行されるとき、ベクトルロード命令は、以前の障害データ要素に対応するデータを、第1のアクティブ要素に対応するベクトル内の位置にロードしている。
要素識別情報は、様々な方法で表現することができる。場合によっては、単に、例外条件をトリガした特定のアクティブデータ要素の要素番号の表示である場合もある。しかしながら、特に有用な表現は、シーケンス内の特定のアクティブデータ要素に先行する少なくとも1つのデータ要素の第1の値を有する1つまたは複数の表示と、特定のアクティブデータ要素およびシーケンス内の後続の任意のアクティブデータ要素に対する第2の値を有する1つまたは複数の表示とを含む要素識別マスクを提供することであり得る。したがって、要素識別マスクは、本質的に、障害なしに既に処理された部分と、依然として障害を引き起こす可能性のある部分とにベクトルを分割することができる。このような要素識別マスクは、命令を実行する後続の試みのための新しいマスクが、より効率的に生成されることを可能にすることができる。また、このタイプの要素識別マスクは、一連のデータ処理動作を実施するために実行されるいくつかの適切な命令が存在する可能性があるため有用であり得、これらの命令のいずれか1つが特定の要素の例外条件に遭遇した場合、次の命令で実行される処理の対応するレーンを停止するのに望ましい。したがって、上述したタイプの要素識別マスクは、後続の命令のためのマスクを生成するのにも有用であり得る。
入力ベクトルの要素の所定のシーケンスは、任意のシーケンスであり得る。しかしながら、しばしば、シーケンス内の第1のアクティブデータ要素が、第1の入力ベクトルの最下位のアクティブデータ要素であると都合がよい場合がある。次いで、シーケンス内の後続の要素は、重要度が最上位アクティブデータ要素まで上がる入力ベクトルのデータ要素に対応することができる。このアプローチは、ベクトル化されたコードが実際に書かれている方法に最もよくマップできる。それにもかかわらず、最上位アクティブデータ要素で始まり、最下位要素で終わるような他のシーケンスを使用することができる。
シーケンス内の第1のアクティブデータ要素以外の複数のアクティブデータ要素が例外条件に遭遇した場合、場合によっては、要素識別情報がこれらの各要素を識別することができる。あるいは、要素識別情報は、例外条件をトリガするシーケンス内の次の要素(第1のアクティブデータ要素の後)のみを識別することができ、後の要素も例外条件を引き起こしても他の要素を識別することができない。
いくつかの実装では、処理回路は、上述のようにベクトル演算命令を常に処理することができ、第1のアクティブデータ要素が例外条件をトリガする場合にのみ応答動作が行われる。
しかしながら、他の実装は、例外条件が第1のアクティブ要素または後続の要素に対して検出されたか否かにかかわらず、処理回路が、ベクトルの任意のアクティブデータ要素に対する例外条件を検出することに応答して少なくとも1つの応答動作を実行する第2のタイプのベクトル演算命令もサポートすることができる。第1および第2のタイプのベクトル演算命令は、全く異なる命令(例えば、異なる演算コードを有する)であってもよく、または命令が第1のタイプであるか第2のタイプであるかを指定する命令符号化におけるフィールドを有する共通命令演算コードに対応してもよい。あるいは、第1および第2の種類のベクトル演算命令は同じ符号化を有することができるが、第1のタイプのベクトル演算命令は処理回路の第1のモードで実行されるベクトル演算命令であり、第2のタイプのベクトル命令は処理回路の第2のモードで実行されるベクトル演算命令であってもよい。例えば、処理回路が現在第1または第2のモードにあるか否かを指定する制御レジスタが存在することができる。
第1タイプのベクトル演算命令が第1のアクティブ要素が例外条件に遭遇したときのみ応答動作をトリガし、第2のタイプが任意のアクティブ要素に対して応答動作をトリガすることができる、ベクトル演算命令の第1および第2のタイプの両方を提供することは、プログラマが、実行されるコードの特性に応じて、代替のタイプの命令の間で選択することを可能にするのに有用である。例えば、コードが上記のようにベクトル演算の投機的実行を必要とする場合、第1のタイプを選択して、いずれにせよ実行される必要のなかったベクトルレーンに応答して不注意に副作用をトリガするのを避けることができる。一方、非投機的コードでは、第2のタイプのベクトル演算命令は、ベクトルの各要素を介して進行するのに複数の反復を必要とする可能性が低い可能性があり、第2のタイプのベクトル演算命令を選択して性能を向上させることができる。したがって、両方のタイプの命令を提供することにより、正しい挙動と性能とのより良いバランスを提供することができる。
いくつかの実装では、第2のタイプのベクトル演算命令の場合、第1の入力ベクトルの任意の要素に対して検出される例外条件に対する応答は、どの要素が例外条件をトリガしたか、およびどのタイプの例外が検出されたかについての正確な表示を記録することを含む。しかしながら、これはかなりの間接費を必要とする。実際には、例外条件は稀であり、この間接費が正当化されない可能性がある。代わりに、第2の種類のベクトル演算命令は、どの特定の要素がどの特定のタイプの例外的条件をトリガしたかを区別せずに、入力ベクトルの任意のアクティブデータ要素に対して発生した任意のタイプの例外条件の表示を提供するために、状態レジスタを更新することを含む応答動作をトリガしてもよい。多くの場合、これは例外処理ルーチン(例えば、オペレーティングシステムなど)が例外条件をどのように解決するかを決定するのを可能にするのに十分であり得る。
例外条件は、さらに調査する必要があるかもしれない異常な結果または特性を示す算術演算によってトリガされる任意のタイプの条件であってもよい。本技法は、算術演算が浮動小数点演算を含む命令の場合に特に有用である。浮動小数点演算のためのIEEE 754規格は、浮動小数点演算のために追跡すべき多数の例外条件を規定している。例えば、これらの例外条件には、オーバーフロー、アンダーフロー、不正確、無効な演算、ゼロ除算のうちの1つまたは複数が含まれてもよい。浮動小数点演算のために追跡することができる別の種類の例外条件は、特定の算術演算への入力が非正規であるか否かであってもよい(すなわち、その有効数字は、通常の浮動小数点値ように1で始まるのではなく、少なくとも1つの先頭のゼロで始まる)。比較的多数の例外条件が追跡されるので、これらをベクトルの全レーンについて記録することは非常に高価であり、上述の技術は、単一の組のビットを可能にすることによってハードウェアリソースを大幅に節約し、例外条件の各タイプについて1つが、ベクトルレーン間で共有される。
本技術は、非浮動小数点演算にも使用することができる。例えば、整数演算の場合、いくつかの命令は飽和演算を実行でき、算術演算の結果が一定の最小および最大限界内に収まるようにする。この場合、飽和演算で生成された値の飽和が発生すると、例外条件が発生する可能性がある。すなわち、算術演算が、飽和の最大限界よりも大きい、または最小限界よりも小さい結果をもたらす場合、例外条件がトリガされる可能性がある。
例えば、ベクトル演算命令に応答して実行される算術演算は、加算、減算、乗算、除算、乗算−加算、乗算−減算、平方根などであり得る。算術演算はまた、異なる精度の浮動小数点値間の変換、または浮動小数点値と整数値間の変換など、特定のデータ値の表現を別の形式に変換する変換処理でもあり得る。変換命令のようないくつかの命令では、第1の入力ベクトルは命令の唯一の入力ベクトルであってもよい。加算、減算または乗算命令のような他の命令の場合、第1の入力ベクトルのデータ要素と結合される第2の入力ベクトルがあってもよい。命令によっては、さらに3つ以上の入力ベクトル(例えば、乗算−加算)を満たすこともできる。
本技術は、仮想マシンを使用して実現することもできる。仮想マシンは、ホスト装置によって実行されたときに命令を実行するための命令実行環境を提供するプログラムであってもよく、その結果、ホスト装置は、あたかも前述の回路を有するかのようにプログラマの観点から現れる。ホストプロセッサは、実際にその回路を有する必要はなく、代わりに仮想マシンのコードは、そのような回路が設けられているかのように命令を実行するようにホストハードウェアを制御する。例えば、仮想マシンは、記憶媒体に記憶されたコンピュータプログラムであってもよい。記憶媒体は非一時的であってもよい。
図1は、説明された実施形態の技術が採用され得るシステムのブロック図である。図1に示す例では、システムはパイプラインプロセッサの形式をとる。命令はフェッチ回路10によって、命令キャッシュ15(通常はレベル2キャッシュ50のような1つまたは複数のレベルのキャッシュを介してメモリ55に結合されている)からフェッチされ、ここから命令は、命令によって要求される動作を実行するためにパイプラインプロセッサ内の下流実行リソースを制御するための適切な制御信号を生成するために、各命令を復号する復号回路20を通る。復号された命令を形成する制御信号は、パイプラインプロセッサ内の1つまたは複数の実行パイプライン30、35、40および80に発行するための発行段回路25に渡される。実行パイプライン30、35、40および80は、集合的に、処理回路を形成すると見なすことができる。
発行段回路25は、動作が必要とするデータ値が格納され得るレジスタ60へのアクセスを有する。特に、ベクトル演算のソースオペランドはベクトルレジスタ65内に格納でき、スカラ演算のソースオペランドはスカラレジスタ75に格納できる。さらに、1つまたは複数の述語(マスク)は、特定のベクトル演算を実行するときに処理されるベクトルオペランドのデータ要素のための制御情報として使用するために、述語レジスタ70に格納されてもよい。スカラレジスタの1つまたは複数はまた、特定のベクトル演算の実行中に使用するためにそのような制御情報を得るために使用されるデータ値を格納するために使用されてもよい。
レジスタ60はまた、処理パイプラインの動作を制御するための構成情報、または処理の間に生じる状態もしくは命令の結果の特性を示す状態情報などの様々な制御情報を提供するための多数の制御レジスタ76を含むことができる。例えば、制御レジスタ76は、浮動小数点コンフィギュレーションレジスタ(FPCR:Floating Point Configuration Register)77、浮動小数点状態レジスタ(FPSR:Floating Point Status Register)78、およびfirst−faultingレジスタ(FFR:First−Faulting Register)79を含むことができ、以下により詳細に述べる。
ソースオペランドおよび任意の関連する制御情報は、経路47を介して発行段回路25に送られ、復号された各命令を実現するために実行される動作を識別する制御信号と共に適切な実行ユニットにディスパッチすることができる。図1に示された様々な実行ユニット30、35、40および80は、ベクトルオペランド上で動作するためのベクトル処理ユニットであると仮定されているが、別個の実行ユニット(図示せず)が、装置によってサポートされる任意のスカラ演算を処理するために、必要であれば提供できる。
様々なベクトル演算を考慮して、これらのソースオペランドに対して算術または論理演算が実行されることを可能にするために、算術演算は、例えば算術論理演算ユニット(ALU:Arithmetic Logic Unit)30に必要なソースオペランド(および述語のような任意の制御情報)と共に転送され、結果値は、典型的には、ベクトル・レジスタ・バンク65の指定されたレジスタに格納するためのデスティネーションオペランドとして出力される。
ALU30に加えて、浮動小数点ユニット(FPU:Floating Point Unit)35は、復号された浮動小数点命令に応答して浮動小数点演算を実行するために提供され、ベクトル置換ユニット80は、ベクトルオペランドに対して特定の置換演算を実行するために提供され得る。さらに、ロード/ストアユニット(LSU:Load/Store Unit)40は、データ値をメモリ55から(データキャッシュ45およびレベル2キャッシュ50のような介在する他のレベルのキャッシュを介して)レジスタ組60内の指定したレジスタにロードするためにロード動作を実行するため、およびこれらのレジスタからのデータ値をメモリ55に戻して格納するためにストア動作を実行するために使用される。図1に示されていない他のタイプの実行ユニットも提供され得ることが理解されるであろう。
図1に示すシステムは、命令のシーケンスがプログラム順序で実行されるインオーダ処理システムであってもよいし、あるいは、パフォーマンスを向上させるために様々な命令を並べ替えるように実行される順番が可能になるアウトオブオーダシステムであってもよい。当業者には理解されるように、アウト・オブ・オーダ・システムでは、追加の構造(図1には明示されていない)が提供されてもよく、例えば、命令によって指定されたアーキテクチャレジスタを、レジスタバンク60内の物理レジスタのプール(物理レジスタのプールは典型的にはアーキテクチャレジスタの数よりも多い)からの物理レジスタにマップするためのレジスタリネーミング回路を使用することにより、特定の危険を除去し、アウト・オブ・オーダ処理の使用を促進する。さらに、アウト・オブ・オーダ実行の追跡を維持し、様々な命令の実行の結果が順番にコミットできるように、典型的にはリオーダバッファを設けることができる。
記載された実施形態では、図1の回路は、ベクトルレジスタ65に格納されたベクトルオペランドに対してベクトル演算を実行するように構成され、ここでベクトルオペランドは複数のデータ要素を含んでいる。このようなベクトルオペランドに対して実行される特定のベクトル演算(算術演算など)では、要求された演算はベクトルオペランド内の様々なデータ要素に並列(または反復)で適用できる。述語情報(マスクとも呼ばれる)は、ベクトル内のどのデータ要素が特定のベクトル演算のためのアクティブデータ要素であり、したがって演算が適用されるべきデータ要素であるかを識別するために使用される。
図2は、FPCR77およびFPSR78の一例をより詳細に示す。図2に示すように、FPSR78は、異なるタイプの例外条件にそれぞれ対応し、対応するタイプの少なくとも1つの例外条件がそのビット85が最後にクリアされたため発生したことを示す、多数の例外表示ビット85を含むことができる。この例では、FPSR78に示されている例外条件は、
・QC:整数飽和は、飽和した整数演算の結果が飽和の最大限界を超えるか、または最小限界よりも小さい場合に発生する。
・IDC:入力非正規は、浮動小数点演算への入力値が非正規である場合に発生する。
・IXC:不正確は、浮動小数点演算の結果が、出力に指定された浮動小数点形式を使用して正確に表現できない場合に発生する。
・UFC:アンダーフローは、浮動小数点演算の結果が、出力に指定された浮動小数点形式を使用して表現できるものよりも小さい場合に発生する。
・OFC:オーバーフローは、浮動小数点演算の結果が出力に指定された浮動小数点形式を使用して表現できるものより大きい場合に発生する。
・DZC:ゼロによる除算は、ゼロで除算しようとすると発生する。
・IOC:無効な操作は、無効な操作を実行しようとすると発生する。
他のタイプの例外条件も示すことができることは理解されよう。例外表示ビット85は、一度設定されると、FPSR78のビットまたはFPSR全体が処理パイプラインによって実行される命令によって明示的にクリアされるまで設定されたままであるという意味で累積される。したがって、例外条件が発生すると対応するビットが設定されるが、例外条件をトリガしない命令は、対応するビットをクリアしない。
FPCR77は、FPSR78に示された例外条件のタイプの1つにそれぞれ対応する多数の例外マスクビット87を含む。例外マスキングビットは、FPSR78内の例外条件の各タイプが例外のタイプを処理するためにオペレーティングシステムへのトラップをトリガするか否かを制御する。例えば、図2の場合、システムは現在、ゼロによる除算または無効な演算例外条件が、オペレーティングシステムへのトラップをトリガするが、他の種類の例外条件はトリガしないように構成されている。図2に示されていない他の情報も、FPCRおよびFPSR78に格納することができることが理解されよう。
この実施形態では、例外の種類毎に単一の例外表示ビット85を有する単一のFPSR78が提供され、特定のベクトル演算のためのすべてのベクトルレーン間で共有される。したがって、FPSR78は実質的にスカラFPSRであり、各ベクトル要素に対して別々に例外を示すレーン毎のビットを含まない。
図3は、浮動小数点ユニット35によってサポートされるベクトル演算命令のnon−first−faulting形式の例を示す。この例では、実行される算術演算は浮動小数点加算演算である。この命令は、ベクトルレジスタ65に格納されたベクトルZaおよびZbと、述語レジスタ70に格納された述語Pgの対を入力として取り込み、これは入力ベクトルZaおよびZbのどの要素がアクティブであるかを識別する述語値(またはマスク)を提供する。図3の例では、マスクは、ZaおよびZbの要素0〜3がアクティブであり、要素4〜7が非アクティブであることを示している。したがって、ベクトル演算命令に応答して、浮動小数点ユニット35は、レジスタZaおよびZbのレーン0〜3における対応する要素XおよびYの浮動小数点加算を実行し、対応する結果要素Z0〜Z3を結果レジスタZrに生成する。他方、結果レジスタの非アクティブレーンの要素Z4〜Z7は、加算の結果とは独立しているか、またはそれらのレーンに対して実行される値をとる。例えば、Z4〜Z7は、ゼロのような所定の値に設定することができるか、ZaおよびZbの対応するレーンの入力値の1つに直接マッピングすることができるか、または結果レジスタZaの対応する部分に前に格納された値を保持することができる。したがって、アクティブレーンのみが、入力の対応する要素に対して実行された算術演算の結果に依存する値に設定される。
ベクトル演算命令のnon−first−faulting形式の場合、ベクトルのアクティブレーンのいずれかに例外条件が発生した場合、FPSR78において対応するビットが設定される。効果的には、アクティブレーンの各々によってトリガされる例外条件の表示は、FPSR78をそれに応じて設定するためにOR演算を使用して組み合わせることができる。例えば、図3の要素Z0は、不正確な例外IXCをトリガし、要素Z3は、オーバーフロー例外OFCをトリガし、したがって、これらのタイプの例外に対応するビット85が、FPSR78に設定される。FPCR77が、これらのタイプの例外がオペレーティングシステムへのトラップをトリガすべきであることを示す場合、トラップが実行され、オペレーティングシステムはこれらのタイプの例外に対処する例外処理ルーチンを実行することができる。図3に示す命令のnon−first−faulting形式では、FPSRは例外条件をトリガした特定の要素を区別しないことに注意されたい。
図4は、ベクトル演算命令の異なるfirst−faulting形式を示す。算術演算自体は図3と同じであり、入力ベクトルZaおよびZbにおける対応する要素の浮動小数点加算は、述語レジスタPgのマスクの対応するビットが1であるレーン毎に実行される。今回は、マスクのすべての要素が1であるため、この例ではすべての要素がアクティブである。この例では、図4に示す命令のfirst−faulting形式は、図3に示す命令のnon first faulting形式と比較して、異なる演算コードを有する。あるいは、異なる形式の命令は、同じ演算コードを共有することができるが、命令のどの形式が実行されているかを指定するフィールドを含むことができる。また、ある場合には、命令のnon first faultingおよびfirst faulting形式の符号化は完全に同一であり得るが、命令が第1の形式または第2の形式であると考えられるか否かは、処理回路の現在の動作モードに依存してもよい。例えば、FPCR77の1ビットまたは、ベクトル算術演算が図3のnon first faulting形式または図4のfirst faulting形式に従って実行されるべきか否かを示すためのプロセッサのモードを設定する他の制御レジスタ76の1つがあり得る。
図4に示す命令のfirst faulting形式の場合、例外条件は図3のnon first faulting形式とは異なる方法で処理される。図4に示すように、ベクトルの第1のアクティブ要素(この例では最下位要素X0、Y0、Z0)で実行される算術演算に対して例外条件が発生すると、適切な例外処理応答がとられる。例えば、これは、FPSR78内の対応するビットを設定するステップと、FPCRがその種の例外のトラッピングをイネーブルにしたか否かに応じて、必要に応じてオペレーティングシステムにトラッピングするステップを含むことができる。例外的条件がベクトルの他の要素の1つに対して検出されても、これに対する応答はとられず、FPSR78は、ベクトルの第1のアクティブ要素以外の任意の要素に対して発生した例外条件に基づいて更新されない。例えば、図4では、対応する要素X3、Y3およびZ3を含むレーンに対してオーバーフローが検出されたが、FPSR78のオーバーフロービットは設定されない。
他方、図5に示すように、命令のfirst faulting形式の場合、第1のアクティブ要素が例外条件をトリガしない場合、障害処理応答は抑制される。したがって、FPSR78は修正されず、オペレーティングシステムへのトラッピングはない。しかしながら、ベクトル内の第1のアクティブ要素ではない要素の算術演算が例外条件をトリガする場合、図5に示すように、first faultingレジスタ79が更新されて例外をトリガした要素を記録する。図5に示すように、first faultingレジスタは障害マスクに応答してもよく、障害をトリガした要素3よりも下位の要素0〜2が1のビット値で示され、FFR79のマスクビットが障害をトリガした要素3および後続の任意の要素については0である。
FFR79は、必要に応じて、ベクトル演算命令を実行する別の試みのためにマスクまたは入力ベクトルのいずれかを設定するために後続の命令によって使用され得る情報を提供する。例えば、図6に示すように、FFR79を前のマスクPgと組み合わせて、まだ処理されていない例外条件を依然として引き起こし得る残りの要素を表す新しいマスクPg’を生成することができる。例えば、これは、FFR79の対応するビットも1である1に等しい元のマスクPgの任意のビットをクリアすることによって決定することができる。元のマスクPgがすべて1である場合、新しいマスクを生成する別の方法は、元のマスクPgからFFR79を減算することであってもよい。
あるいは、図7に示すように、FFR79を使用して、ベクトル演算命令の入力ベクトルZaを修正し、FFR79内のゼロで示される要素X3〜X7を入力ベクトルの第1のアクティブ要素に対応するベクトル位置0〜4にリロードすることができる。他の任意の入力ベクトルZbについても同様の演算を行うことができ、次にベクトル演算命令を繰り返すことにより、要素X3が第1のアクティブ要素となり、これにより例外条件がトリガされた場合、これをFPSRに記録して必要であればトラップすることができる。
したがって、ベクトル演算命令を使用するソフトウェアは、例外条件なしでどの要素が正しく実行されたかを示し、必要であれば例外条件を以前にトリガしたアクティブ要素から開始して命令を繰り返すためにFFR79をチェックするベクトル演算命令の回りにループを提供してもよい。このようなループの例を下の図9に示す。
このアプローチにはいくつかの利点がある。第1に、この技法は、ベクトルの各要素について発生した例外条件の正確な記録を可能にし、例外条件をトリガした特定の要素を追跡することを含み、FPSR78内の例外表示ビットの単一の組のみを使用して、各ベクトルレーンに対してビット85の別個のコピーを提供する必要を回避するが、これはより大きいFPSR78が要求されるだけでなくベクトルが大きくなるときに非常に高価になる可能性があり、さらにパイプラインを通過する浮動小数点例外フラグの複数のコピーを必要とする可能性がある。
また、命令からのfirst faultingは、ベクトル演算の投機的実行をサポートするのに役立つ。これは、図8および図9に関してより詳細に説明される。図8は、特定のベクトル演算命令の非投機的実行(non−speculative execution)の例を示し、図9は、命令の投機的実行(speculative execution)の例を示す。
ベクトル命令は、アレイの各値に対して対応する結果を生成するために、データ値のアレイ内の各値に所定の一組の処理動作を適用する必要がある場合に特に便利である。典型的には、処理する多数のデータ値をメモリからベクトルレジスタにロードするベクトルロード命令、さらに、結果値をメモリに戻すためにベクトルストア命令を実行する前に、ロードされたベクトルの各データ要素を処理し、何らかの方法で結果を生成する1つまたは複数のベクトル演算命令を提供することによってコードをベクトル化することができる。しかしながら、多くの場合、処理されるデータ値の総数は、処理回路によってサポートされるベクトル長の正確な倍数でない場合がある。典型的には、ベクトル化されたコードは、ベクトルロード命令および多数のベクトル演算命令を含む一組の命令を通じて繰り返し反復するループを含み、各ループ反復はベクトル長に対応するデータ値の特定のブロックを処理する。多くの場合、何らかの種類の停止条件がループ内で定義され、必要なデータ値のすべてが処理されたか否かをチェックし、そうである場合はループを中断することができる。停止条件は、現在処理されているベクトルの各要素に対して別々にチェックされてもよく、要素の1つがストップ条件を満たすと判定された場合、そのベクトルの後の要素は実際に処理する必要がないことを示してもよい。
いくつかのベクトル命令の場合、停止条件は、そのベクトル命令の結果とは独立していてもよい。図8に示すように、入力ベクトルZaおよびZbに基づいて結果ベクトルZrを生成する特定のベクトル加算命令に対して、対応する停止条件は、他のベクトルZcに依存するので、加算の結果とは独立している。この場合、ベクトル加算命令は、要素が条件の結果に関係なく処理されるべきであることが知られているので、非投機的であると考えることができる。
他方、図9に示すように、他の例では、停止条件は、ベクトル加算命令の結果に依存することがあり、例えば、この場合、停止条件は、ベクトル加算命令によって生成された結果ベクトルの任意の要素jが何らかの条件を満たすか否かチェックし、そうである場合、ループは中断する。結果ベクトルZrの要素jの1つが条件を満たす場合、これは、任意の後続の要素j+1、j+2などが処理されてはならなかったことを示す。別のアプローチは、実際にベクトル演算を非投機的に実行する前にZrの値が何であるかをチェックする命令をさらに実行することであるが、これは追加の命令を必要とし、コードのベクトル化を複雑にする。すべての要素が実際に必要とされるか否かが分かる前に、ベクトル加算命令を投機的に実行できるようにすることによって、性能を向上させることができる。しかしながら、このことは、non−first−faulting形式の命令が実行された場合、FPSR78は、ベクトル処理の投機的レーンに対して生じる例外条件に基づいて更新することができ、これは後で必要でないことが分かる状況を招く可能性がある。この場合、投機的実行は、偽の例外を示したり、不必要にオペレーティングシステムにトラップしたりするという望ましくない副作用を引き起こす可能性がある。
これは、図4および図5に関して説明したように、命令のfirst faulting形式を代わりに実行することによって回避することができる。ベクトルの第1のアクティブ要素は、要素が停止条件を満たすとしても依然として有効な結果であるため、一般に非投機的要素である。したがって、第1のアクティブ要素に対してトリガされた例外条件に応答して、故障処理応答をトリガすることに問題はない。任意の後続の要素も例外条件をトリガする場合、これは応答をトリガしないため、これらの要素が誤投機であると分かった場合に望ましくない副作用につながることはない。停止条件が満たされていないときに命令を正しく進行させるために、図9に示すように、ベクトルの他の要素に対して任意の残りの動作があることをFFR79が示す場合、命令を再び試みるために、ベクトル演算命令の周りにループを設定する。例えば、命令100は、ベクトル加算命令102を実行しようとする前に、FFRのすべてのビットを設定することができる。条件を解決し、必要に応じてループを中断した後(命令104)、条件が満たされない場合、命令106は、ベクトル演算命令102によって使用されるマスクPkを変更し、例外をトリガした要素から開始して残りの要素をアクティブとして示す。これは、図6の例のように、前のマスク70およびFFR 79に基づいて決定される。ブランチ命令108は、処理されるべき少なくとも1つの残りの要素がある場合、すなわち新しいマスクがすべてのビットがゼロである値以外の値を有する場合、命令100に分岐して戻る。
図10は、このようにベクトル演算命令の複数回の反復の周りのループの例を示す。最初の反復では、第1のアクティブ要素に対して例外は発生せず、これはこの例ではベクトルインデックス[1]であるが、ベクトルインデックス[2]で次のアクティブ要素に対して例外が検出される。要素[2]は第1のアクティブデータ要素ではないので、例外応答はとられず、代わりにFFR79は要素[2]と要素[3]に対応するビットをクリアするように更新される。その後、第2のループ周り反復のために新しい述語を生成するためにFFR79が使用され、ここで今度は第1のアクティブ要素がレーン[2]であり、今回は、例外がFPSR78内のフラグの設定、およびFPCR77によって要求される場合オペレーティングシステムへのトラップをトリガする。同様に、シーケンスの後の要素でさらに例外を処理する必要がある場合は、命令のさらなる反復を実行できる。
実際には、浮動小数点例外は稀であり、汎用ソフトウェアは浮動小数点状態フラグの値にほとんど依存しないため、浮動小数点例外が発生したときに直列化を導入するソリューションは、パフォーマンスの点で完全に許容される。プログラマは、ベクトル処理の投機的実行が必要な場合、またはベクトルのどの特定の要素が例外条件をトリガしたかを正確に追跡することが重要な場合、first−faulting形式の命令を選択できる。この場合、命令の複数のループを反復して、連続するアクティブ要素上で発生する例外を段階的に処理することにより、正確な例外処理が可能となり、誤投機的レーンによってトリガされる擬似例外処理を回避することができる。
他方、ベクトル演算が、すべてのアクティブ要素を処理する必要があることが既に分かっているときに非投機的に実行されている場合、性能を向上させ、ベクトル命令を囲むループを提供する追加の命令の必要を回避するために命令のnon−first−faulting形式を選択することができる。同様に、どの特定のレーンが例外をトリガしたかを正確に識別する必要がない場合、例外をトリガした特定のレーンを記録することなく、任意のレーンに対してどの例外タイプが生じたかを単にFPSR78に記録するためにnon first faulting形式の命令を選択できる。
上記の例は、ベクトル演算命令が加算命令である場合を示しているが、浮動小数点演算および整数演算を含む様々な種類の算術演算の範囲に対して同様の技術を実行することができることが理解されよう。
図11は、ベクトル演算命令の処理例を示すフロー図である。ステップ200で、処理パイプラインは、現在の命令がベクトル演算命令であるか否かを検出し、そうでない場合、何らかの他の方法で命令を処理する。ベクトル演算命令が実行されると、ステップ202において、パイプラインが命令のタイプを決定する。命令が第1のタイプ(命令のfirst−faulting形式)である場合、ステップ204において、対応する算術演算が入力ベクトルの各アクティブ要素に対して実行され、結果ベクトルの対応する結果要素を生成する。ステップ206では、ベクトルの第1のアクティブ要素について例外条件が検出されたか否かが判定される。そうである場合、ステップ208において、FPSR78は、どの例外条件が発生したかを示すように更新され、ステップ210において、FPCR77は、検出された例外条件に対して現在オペレーティングシステムへのトラッピングが可能であるか否かを判断するためにチェックされ、そうである場合、トラップがトリガされる。他方、第1のアクティブ要素に対して例外条件が発生しなかった場合、ステップ212において、処理回路は、第1のアクティブ要素ではない別のアクティブ要素に対して例外条件が発生したか否かを判定する。そうである場合、ステップ214において、例外条件および任意の後続の要素をトリガしたアクティブ要素に対してFFR79の1つまたは複数のビットがクリアされる。他方、いずれの要素に対しても例外条件が発生しなかった場合、ステップ214はスキップされる。そして、現在のベクトル演算命令の処理を終了する。上述のように、さらなる命令は、FFR79を使用して、ベクトル算術演算命令へのマスクまたは入力ベクトルを変更することができ、すべての要素がまだ処理されているわけではなく、例外条件が十分に処理されていない場合、ベクトル算術命令を再び試みるために分岐して戻る。
他方、現在のベクトル演算命令が第2のタイプ(命令のnon−first−faulting形式)である場合、ステップ220において、算術演算が各アクティブ要素に対して実行され、結果のベクトルの対応する結果の要素を生成する。ステップ222において、FPSR78は、ベクトルの任意のアクティブ要素に対して発生した任意の例外条件を示すように更新される。これは、例外を引き起こした特定の要素を区別しない。ステップ224で、処理回路は再びFPCRをチェックして、発生した任意の例外条件に対してオペレーティングシステムへのトラップが必要か否かを判定し、必要に応じてオペレーティングシステムにトラップする。命令の処理は終了する。
図12および図13は、浮動小数点例外フラグへの投機的更新を処理する別の手法を示す。上述のようにベクトル演算命令の第1および第2の形式を提供する代わりに、ベクトル命令の投機的処理に対応するFPSR、FPSR1 78−1の第1のバージョンにある任意のベクトルレーンに対して発生した例外条件を記録する1つのタイプのベクトル演算命令を提供することができる。投機が正しかったか否かを制御する関連条件が解決されると、コミット命令を実行して、正しく投機されたレーンの浮動小数点例外フラグを浮動小数点状態レジスタFPSR2 78−2の第2のバージョンにコピーすることができ、これはFPSRの非投機的な状態(またはコミットされたバージョン)を表現する(図13を参照)。例えば、コミット命令は、FPSR1 78−1とFPSR2の前の値とをOR演算で組み合わせて、FPSR2の更新状態を生成することができる。必要な場合、結合命令を使用して、状態フラグのベクトル化したビューをFPSR78の伝統的なスカラビューに変換し、例外のタイプ毎に単一フラグがベクトル全体の間で共有され、どの例外が全体としてのベクトルに生じたかを示すことができる。例えば、結合命令は、FPSR2 78−2の各レーンで特定の例外に対する対応するフラグをORして、そのタイプの例外がベクトル全体として発生したか否かを示す全体的なフラグを生成することができる。
図12は、浮動小数点例外または整数飽和を引き起こす任意のデータ要素の最下位バイトと整列するバイト幅フラグ要素の浮動小数点および整数飽和状態を捕捉するためのFPSR1 78−1およびFPSR2 78−2のレイアウト例を示す。最小浮動小数点要素は通常32ビット幅であり、整数要素は8ビットであってもよいため、浮動小数点状態フラグ85は4の倍数であるフラグ要素番号にのみ現れ、整数飽和フラグQCは各バイトにおいて発生する。未使用のビットは、ハードウェアによって格納される必要はなく、読み込み時にゼロを返す。レジスタ内のビットは、アクティブなベクトル要素にShoji浮動小数点または飽和整数演算の副作用の1つを受け入れてもよい。FPSR1およびFPSR2の最下位32ビットを図12に示すが、これは最大ベクトル長まで繰り返すことができる。
図14は、使用可能な仮想マシンの実装を示す。前述の実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム510をサポートするホストオペレーティングシステム520を実行するホストプロセッサ530上で実行する。通常、処理能力の高い大規模なプロセッサは、妥当な速度で実行する仮想マシンの実装を提供する必要があるが、そのようなアプローチは、互換性や再利用のために別のプロセッサにコードをネイティブに実行したいという要望がある場合などの特定の環境において正当化することができる。仮想マシンプログラム510は、仮想マシンプログラム510によってモデル化されている実際のハードウェアによって提供されるアプリケーション・プログラム・インターフェースと同じアプリケーションプログラム500にアプリケーション・プログラム・インターフェースを提供する。したがって、上述したメモリアクセスの制御を含むプログラム命令は、仮想マシンハードウェアとの相互作用をモデル化するために、仮想マシンプログラム510を使用してアプリケーションプログラム500内から実行することができる。
本出願において、「〜ように構成される」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサもしくは他の処理装置が機能を実行するようにプログラムされてもよい。「〜ように構成される」は、定義された動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
本発明の例示的な実施形態を添付の図面を参照して詳細に説明したが、本発明はこれらの厳密な実施形態に限定されず、様々な変更および修正が添付の特許請求の範囲によって規定される本発明の範囲および趣旨から逸脱することなく、当業者により本発明の範囲内において行うことができる。

Claims (21)

  1. 複数のデータ要素を含む少なくとも第1の入力ベクトルを指定する第1のタイプのベクトル演算命令に応答して、前記第1の入力ベクトルの少なくとも1つのアクティブデータ要素の算術演算を実行する処理回路を含む装置であって、
    前記第1の入力ベクトルの前記データ要素は所定のシーケンスを有し、
    前記所定のシーケンスにおいて第1のアクティブデータ要素に対して実行される前記算術演算に対して、少なくとも1つの例外条件が検出されたとき、前記処理回路は少なくとも1つの応答動作を実行するように構成され、
    前記少なくとも1つの例外条件が、前記所定のシーケンスにおける前記第1のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された前記算術演算に対して検出された場合、前記処理回路は、前記少なくとも1つの応答動作を抑制し、前記第1の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するように構成される
    装置。
  2. 前記少なくとも1つの応答動作が、前記少なくとも1つの例外条件が前記第1のアクティブデータ要素に対して検出されたことを示すために状態レジスタを更新することを含む、請求項1に記載の装置。
  3. 前記状態レジスタが、1つまたは複数の対応するタイプの例外条件の発生を示すための1つまたは複数の例外条件表示ビットの組を含み、例外条件表示ビットの前記組が、例外条件のタイプ毎に単一のビットを含む、請求項2に記載の装置。
  4. 前記少なくとも1つの応答動作が、例外処理ルーチンの実行をトリガすることを含む、請求項1〜請求項3のいずれか一項に記載の装置。
  5. 1つまたは複数のタイプの例外条件に対して前記例外処理ルーチンの実行をトリガするか否かを指定する構成情報を格納するコンフィギュレーションレジスタと、
    前記コンフィギュレーション情報が、前記例外処理ルーチンを前記検出された例外条件タイプに対してトリガすべきであることを指定するとき、前記例外処理ルーチンの実行をトリガすることを含む前記少なくとも1つの応答動作と
    を含む、請求項4に記載の装置。
  6. 前記処理回路が、前記1つまたは複数のアクティブデータ要素が処理されるべきか否かを決定するための関連する条件が解決される前に、前記第1の入力ベクトルの1つまたは複数のアクティブデータ要素に対して前記算術演算を実行するように構成される、請求項1〜請求項5のいずれか一項に記載の装置。
  7. 前記第1の入力ベクトルが、前記第1の入力ベクトルのどのデータ要素がアクティブデータ要素であるかを示すマスクに関連付けられている、請求項1〜請求項6のいずれか一項に記載の装置。
  8. 前記処理回路が、第1のタイプのベクトル演算命令を実行する後続の試みのための新しい第1の入力ベクトルおよび新たなマスクの少なくとも1つを、前記要素識別情報に基づいて生成するための少なくとも1つのさらなる命令に応答する、請求項7に記載の装置。
  9. 前記処理回路が、前記少なくとも1つのさらなる命令に応答して、前記所定のシーケンス内の前記第1のアクティブデータ要素として示される前記特定のアクティブデータ要素を有する前記新たなマスクを生成する、請求項8に記載の装置。
  10. 前記処理回路が、前記少なくとも1つのさらなる命令に応答して、前記第1の入力ベクトルの前記特定のアクティブデータ要素と同じ値を有する前記新たな第1の入力ベクトルの前記第1のアクティブデータ要素を有する前記新たな第1の入力ベクトルを生成する、請求項8に記載の装置。
  11. 前記要素識別情報が、前記所定のシーケンス内の特定のアクティブデータ要素に先行する少なくとも1つのデータ要素の第1の値を有する1つまたは複数の表示と、前記特定のアクティブデータ要素および前記所定のシーケンス内の後続の任意のアクティブデータ要素に対する第2の値を有する1つまたは複数の表示とを含む要素識別マスクを含む、請求項1〜請求項10のいずれか一項に記載の装置。
  12. 前記所定のシーケンス内の前記第1のアクティブデータ要素が、前記第1の入力ベクトルの最下位アクティブデータ要素を含む、請求項1〜請求項11のいずれか一項に記載の装置。
  13. 第2のタイプのベクトル演算命令に応答して、前記処理回路が、前記第1の入力ベクトルの任意のアクティブデータ要素に対して実行された前記算術演算の前記少なくとも1つの例外条件の検出に応答して、前記少なくとも1つの応答動作を実行するように構成される、請求項1〜請求項12に記載の装置。
  14. 前記第1および第2のタイプのベクトル演算命令が、異なる演算コードを含むか、または前記ベクトル命令が前記第1のタイプまたは第2のタイプのいずれであるかを指定するフィールドを含む、請求項13に記載の装置。
  15. 前記第1のタイプのベクトル演算命令が前記処理回路の第1のモードで実行されるベクトル演算命令を含み、
    前記第2のタイプのベクトル命令が前記処理回路の第2のモードで実行されるベクトル演算命令を含む、請求項13に記載の装置。
  16. 前記第2のタイプのベクトル演算命令に応答して、前記少なくとも1つの応答動作が、前記第1の入力ベクトルの任意のアクティブデータ要素に対して実行された前記算術演算に対して検出された1つまたは複数のタイプの例外条件の表示を提供するために状態レジスタを更新することを含む、請求項13〜請求項15のいずれか一項に記載の装置。
  17. 前記算術演算が、浮動小数点演算と、前記少なくとも1つの例外条件であって、
    前記算術演算で生成された浮動小数点値のオーバーフローと、
    前記算術演算で生成された浮動小数点値のアンダーフローと、
    前記演算で生成された不正確な浮動小数点値と、
    無効な演算に対応する前記算術演算と、
    ゼロによる除算を含む前記算術演算と、
    非正規である前記算術演算への入力と
    の少なくとも1つを含む、前記少なくとも1つの例外条件とを含む、請求項1〜請求項16のいずれか一項に記載の装置。
  18. 前記算術演算が、飽和演算を含み、前記少なくとも1つの例外条件が、前記飽和演算で生成された値の飽和を含む、請求項1〜請求項17のいずれか一項に記載の装置。
  19. 複数のデータ要素を含む少なくとも第1の入力ベクトルを指定する第1のタイプのベクトル演算命令に応答して、前記第1の入力ベクトルの少なくとも1つのアクティブデータ要素の算術演算を実行する手段を含む装置であって、
    前記第1の入力ベクトルの前記データ要素は所定のシーケンスを有し、
    前記所定のシーケンスにおいて第1のアクティブデータ要素に対して実行される前記算術演算に対して、少なくとも1つの例外条件が検出されたとき、実行する前記手段は少なくとも1つの応答動作を実行するように構成され、
    前記少なくとも1つの例外条件が、前記所定のシーケンスにおける前記第1のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された前記算術演算に対して検出された場合、実行する前記手段は、前記少なくとも1つの応答動作を抑制し、前記第1の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するように構成される装置。
  20. 複数のデータ要素を含む少なくとも第1の入力ベクトルを指定する第1のタイプのベクトル演算命令に応答して、前記第1の入力ベクトルの少なくとも1つのアクティブデータ要素の算術演算を実行するステップを含むデータ処理方法であって、前記第1の入力ベクトルの前記データ要素が所定のシーケンスを有する、ステップと、
    前記所定のシーケンスにおいて第1のアクティブデータ要素に対して実行される前記算術演算に対して、少なくとも1つの例外条件が検出されたとき、少なくとも1つの応答動作を実行するステップと、
    前記少なくとも1つの例外条件が、前記所定のシーケンスにおける前記第1のアクティブデータ要素以外の特定のアクティブデータ要素に対して実行された前記算術演算に対して検出されたとき、前記少なくとも1つの応答動作を抑制し、前記第1の入力ベクトルのどのデータ要素が前記特定のアクティブデータ要素であるかを識別する要素識別情報を格納するステップと
    を含む、データ処理方法。
  21. コンピュータ可読記憶媒体に格納されたコンピュータプログラムであって、データ処理装置によって実行されると、請求項1〜請求項18のいずれか一項に記載の装置に対応する命令実行環境を提供する仮想マシンを提供する、コンピュータプログラム。
JP2018519476A 2015-10-22 2016-09-14 ベクトル演算命令の例外条件処理 Active JP6942298B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1518735.4A GB2543554B (en) 2015-10-22 2015-10-22 Handling exceptional conditions for vector arithmetic instruction
GB1518735.4 2015-10-22
PCT/GB2016/052837 WO2017068318A1 (en) 2015-10-22 2016-09-14 Handling exceptional conditions for vector arithmetic instruction

Publications (3)

Publication Number Publication Date
JP2018531467A JP2018531467A (ja) 2018-10-25
JP2018531467A6 true JP2018531467A6 (ja) 2018-12-13
JP6942298B2 JP6942298B2 (ja) 2021-09-29

Family

ID=55130082

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018519476A Active JP6942298B2 (ja) 2015-10-22 2016-09-14 ベクトル演算命令の例外条件処理

Country Status (7)

Country Link
US (1) US10776124B2 (ja)
JP (1) JP6942298B2 (ja)
KR (1) KR102628269B1 (ja)
CN (1) CN108139910B (ja)
GB (1) GB2543554B (ja)
TW (1) TWI713589B (ja)
WO (1) WO2017068318A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI812254B (zh) 2017-05-17 2023-08-11 美商谷歌有限責任公司 用於訓練神經網路之方法、系統及非暫時性電腦可讀儲存媒體
GB2570466B (en) * 2018-01-25 2020-03-04 Advanced Risc Mach Ltd Commit window move element
US11372643B2 (en) * 2018-11-09 2022-06-28 Intel Corporation Systems and methods for performing instructions to convert to 16-bit floating-point format
US11620153B2 (en) * 2019-02-04 2023-04-04 International Business Machines Corporation Instruction interrupt suppression of overflow exception
WO2021126216A1 (en) 2019-12-19 2021-06-24 Google Llc Resource management unit for capturing operating system configuration states and offloading tasks
EP3857371A1 (en) * 2019-12-19 2021-08-04 Google LLC Resource management unit for capturing operating system configuration states and memory management
US11188304B1 (en) 2020-07-01 2021-11-30 International Business Machines Corporation Validating microprocessor performance
CN114428638A (zh) * 2020-10-29 2022-05-03 平头哥(上海)半导体技术有限公司 指令发射单元、指令执行单元、相关装置和方法
US20220206792A1 (en) * 2020-12-24 2022-06-30 Intel Corporation Methods, systems, and apparatuses to optimize partial flag updating instructions via dynamic two-pass execution in a processor
US11675651B2 (en) 2021-03-11 2023-06-13 International Business Machines Corporation Critical problem exception handling
US11782786B1 (en) 2022-03-17 2023-10-10 General Electric Company Systems and methods for handling invalid floating-point operations without exceptions

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US325483A (en) * 1885-09-01 blaisdell
US244987A (en) * 1881-08-02 Boot and shoe jack
US208086A (en) * 1878-09-17 Improvement in brakes for railway-cars
US233507A (en) * 1880-10-19 Wrench
US47358A (en) * 1865-04-18 Improvement in automatic stop-motions for steam-engines
US4873630A (en) * 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
CN1040803C (zh) * 1989-05-17 1998-11-18 国际商业机器公司 在数据处理系统提供附加系统特性的方法和装置
JP2000040081A (ja) * 1998-07-24 2000-02-08 Nec Kofu Ltd ベクトルデータ処理装置
US6378067B1 (en) * 1998-10-12 2002-04-23 Idea Corporation Exception reporting architecture for SIMD-FP instructions
US8271832B2 (en) * 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US8938642B2 (en) * 2008-08-15 2015-01-20 Apple Inc. Confirm instruction for processing vectors
US20110047358A1 (en) * 2009-08-19 2011-02-24 International Business Machines Corporation In-Data Path Tracking of Floating Point Exceptions and Store-Based Exception Indication
CN104025022B (zh) * 2011-12-23 2017-09-19 英特尔公司 用于具有推测支持的向量化的装置和方法
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
US9715385B2 (en) * 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US20140244987A1 (en) * 2013-02-22 2014-08-28 Mips Technologies, Inc. Precision Exception Signaling for Multiple Data Architecture
GB2519107B (en) * 2013-10-09 2020-05-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing speculative vector access operations
US9396056B2 (en) * 2014-03-15 2016-07-19 Intel Corporation Conditional memory fault assist suppression

Similar Documents

Publication Publication Date Title
JP6942298B2 (ja) ベクトル演算命令の例外条件処理
JP2018531467A6 (ja) ベクトル演算命令の例外条件処理
JP6843113B2 (ja) メモリと複数のベクトルレジスタ間の複数のデータ構造を転送する装置および方法
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
US11003450B2 (en) Vector data transfer instruction
TWI716425B (zh) 用於執行疊接操作的裝置和方法
US9081564B2 (en) Converting scalar operation to specific type of vector operation using modifier instruction
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
JP6908601B2 (ja) ベクトルロード命令
US20070118696A1 (en) Register tracking for speculative prefetching
US11803388B2 (en) Apparatus and method for predicting source operand values and optimized processing of instructions
JP5939586B2 (ja) オーバーロードチェックを実行する命令