(57)【要約】  処理回路８５は、アドレスベクトルの対応するアクティブデータ要素に基づいて決定されたアドレスを有するメモリ位置へのアトミックメモリ更新を実行するための少なくとも１つのアトミックメモリ更新動作をトリガするために、アドレスベクトルを識別するベクトルアトミックメモリ更新命令をサポートする。アドレスベクトルの所与の故障アクティブデータ要素を使用して決定されたアドレスについて故障状態が判定されると、その要素および所定のシーケンス内の任意の後続要素に対するアトミックメモリ更新動作が抑制される。故障要素がシーケンス内の第１のアクティブデータ要素である場合、故障処理応答がトリガされ、そうでない場合、故障処理応答が抑制され、どの要素が故障要素であるかを示すステータス情報が記憶される。
2019503009.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのアクティブデータ要素を含む複数のデータ要素を備えるアドレスベクトルを識別するベクトルアトミックメモリ更新命令に応答して、少なくとも１つのアトミックメモリ更新動作をトリガする処理回路であって、各アトミックメモリ更新動作が、前記アドレスベクトルの対応するアクティブデータ要素に基づいて決定されたアドレスを有するメモリ位置へのアトミック更新を備える、処理回路
を備える装置であって、
前記アドレスベクトルの前記データ要素が所定のシーケンスを有し、
前記アドレスベクトルの故障アクティブデータ要素に基づいて決定された前記アドレスに対する故障状態を検出することに応答して、前記処理回路が、前記故障アクティブデータ要素および前記所定のシーケンス内の任意の後続アクティブデータ要素に対する前記アトミックメモリ更新動作を抑制するように構成され、
前記故障アクティブデータ要素が前記所定のシーケンス内の第１のアクティブデータ要素であるとき、前記処理回路が、故障処理応答をトリガするように構成され、
前記故障アクティブデータ要素が前記所定のシーケンス内の前記第１のアクティブデータ要素以外のアクティブデータ要素であるとき、前記処理回路が、前記故障処理応答を抑制し、前記アドレスベクトルのどのデータ要素が前記故障アクティブデータ要素であるかを示すステータス情報を記憶するように構成される、
装置。
【請求項２】
前記アドレスベクトルが、前記アドレスベクトルのどのデータ要素がアクティブデータ要素であるかを示すマスクに関連付けられる、請求項１に記載の装置。
【請求項３】
前記処理回路が、少なくとも１つのさらなる命令に応答して、前記ステータス情報に基づいて、少なくとも１つの新しいアドレスベクトル、およびベクトルアトミックメモリ更新命令を実行する後続の試みのための新しいマスクを生成する、請求項２に記載の装置。
【請求項４】
前記処理回路が、前記少なくとも１つのさらなる命令に応答して、前記所定のシーケンス内の前記第１のアクティブデータ要素として示された前記故障アクティブデータ要素を有する前記新しいマスクを生成する、請求項３に記載の装置。
【請求項５】
前記処理回路が、前記少なくとも１つのさらなる命令に応答して、前記アドレスベクトル内の前記故障アクティブデータ要素と同じ値を有する前記新しいアドレスベクトルの前記第１のアクティブデータ要素を有する前記新しいアドレスベクトルを生成する、請求項３に記載の装置。
【請求項６】
前記ステータス情報が、前記所定のシーケンス内の前記故障アクティブデータ要素に先行する少なくとも１つのデータ要素用の第１の値を有する故障指示と、前記故障アクティブデータ要素および前記所定のシーケンス内の任意の後続アクティブデータ要素用の第２の値を有する故障指示とを備える故障マスクを備える、請求項１から５のいずれか一項に記載の装置。
【請求項７】
前記第１のアクティブデータ要素に基づいて決定された前記アドレスについて故障状態が検出されないとき、前記処理回路が、前記所定のシーケンス内の前記故障アクティブデータ要素に先行する前記アドレスベクトルのアクティブデータ要素ごとに実行されるべき前記アトミックメモリ更新動作をトリガするように構成される、請求項１から６のいずれか一項に記載の装置。
【請求項８】
前記処理回路が、前記ベクトルアトミックメモリ更新命令に応答して最大Ｎ回のアトミックメモリ更新動作をトリガするように構成され、前記アドレスベクトルの前記アクティブデータ要素が、実行されるべき（Ｎ＋１）回以上のアトミックメモリ更新動作を必要とするとき、前記処理回路が、第（Ｎ＋１）のアトミックメモリ更新動作を必要とする前記所定のシーケンス内の所与のアクティブデータ要素が前記所与のアクティブデータ要素の値にかかわらず前記故障アクティブデータ要素であると判定するように構成される、請求項１から６のいずれか一項に記載の装置。
【請求項９】
前記所定のシーケンス内の前記第１のアクティブデータ要素が、前記アドレスベクトルの最下位アクティブデータ要素を備える、請求項１から８のいずれか一項に記載の装置。
【請求項１０】
前記故障状態が、アドレス変換故障またはメモリ保護故障を備える、請求項１から９のいずれか一項に記載の装置。
【請求項１１】
前記故障処理応答が、故障処理ルーチンの実行をトリガすることを備える、請求項１から１０のいずれか一項に記載の装置。
【請求項１２】
アトミックメモリ更新動作ごとに、前記メモリ位置の前記アドレスが、前記アドレスベクトルの前記対応するアクティブデータ要素によって指定されたオフセットをベースアドレスに加えた結果に対応する、請求項１から１１のいずれか一項に記載の装置。
【請求項１３】
前記少なくとも１つのアトミックメモリ更新動作を実行するメモリ更新回路を備え、
前記ベクトルアトミックメモリ更新命令に応答して、前記処理回路が、前記メモリ更新回路に要求を発行することによって前記少なくとも１つのアトミックメモリ更新動作をトリガするように構成される、請求項１から１２のいずれか一項に記載の装置。
【請求項１４】
前記処理回路によるアクセス用のデータを記憶する少なくとも１つのキャッシュを備え、
少なくとも１つのタイプのベクトルアトミックメモリ更新命令の場合、前記メモリ更新回路が、前記メモリ位置から前記少なくとも１つのキャッシュにデータをロードすることなく、メモリ内の前記メモリ位置に対して直接前記アトミック更新を実行するように構成される、請求項１３に記載の装置。
【請求項１５】
前記メモリ位置への前記アトミック更新が、
前記メモリ位置に記憶された値に所定の値を加算すること、
前記メモリ位置に記憶された前記値から所与の値を減算すること、
前記メモリ位置に記憶された前記値および少なくとも１つのさらなる値に対してビット単位の論理演算を実行すること、
前記メモリ位置に記憶された以前の値および少なくとも１つのさらなる値の最小値または最大値に前記メモリ位置を設定すること、ならびに
前記メモリ位置に記憶された以前の値が所定の条件を満たす場合、前記メモリ位置によって記憶された前記値を更新すること
のうちの少なくとも１つを備える、請求項１から１４のいずれか一項に記載の装置。
【請求項１６】
前記アトミックメモリ更新動作が、
前記アトミック更新前に前記メモリ位置に記憶された以前の値、および
前記アトミック更新後に前記メモリ位置に記憶される新しい値
のうちの少なくとも１つをレジスタまたはキャッシュにロードすることを備える、請求項１から１５のいずれか一項に記載の装置。
【請求項１７】
少なくとも１つのアクティブデータ要素を含む複数のデータ要素を備えるアドレスベクトルを識別するベクトルアトミックメモリ更新命令に応答して、少なくとも１つのアトミックメモリ更新動作を実行するための手段であって、各アトミックメモリ更新動作が、前記アドレスベクトルの対応するアクティブデータ要素に基づいて決定されたアドレスを有するメモリ位置へのアトミック更新を備える、実行するための手段
を備える装置であって、
前記アドレスベクトルの前記データ要素が所定のシーケンスを有し、
前記アドレスベクトルの故障アクティブデータ要素に基づいて決定された前記アドレスの故障状態を検出することに応答して、前記実行するための手段が、前記故障アクティブデータ要素および前記所定のシーケンス内の任意の後続アクティブデータ要素に対する前記アトミックメモリ更新動作を抑制するように構成され、
前記故障アクティブデータ要素が前記所定のシーケンス内の第１のアクティブデータ要素であるとき、前記実行するための手段が、故障処理応答をトリガするように構成され、
前記故障アクティブデータ要素が前記所定のシーケンス内の前記第１のアクティブデータ要素以外のアクティブデータ要素であるとき、前記実行するための手段が、前記故障処理応答を抑制し、前記アドレスベクトルのどのデータ要素が前記故障アクティブデータ要素であるかを示すステータス情報を記憶するように構成される、
データ処理装置。
【請求項１８】
少なくとも１つのアクティブデータ要素を含む複数のデータ要素を備えるアドレスベクトルを識別するベクトルアトミックメモリ更新命令に応答して、少なくとも１つのアトミックメモリ更新動作をトリガするステップであって、各アトミックメモリ更新動作が、前記アドレスベクトルの対応するアクティブデータ要素に基づいて決定されたアドレスを有するメモリ位置へのアトミック更新を備え、前記アドレスベクトルの前記データ要素が所定のシーケンスを有する、ステップと、
前記アドレスベクトルの故障アクティブデータ要素に基づいて決定された前記アドレスの故障状態を検出することに応答して、前記故障アクティブデータ要素および前記所定のシーケンス内の任意の後続アクティブデータ要素に対する前記アトミックメモリ更新動作を抑制するステップと、
前記故障アクティブデータ要素が前記所定のシーケンス内の第１のアクティブデータ要素であるとき、故障処理応答をトリガするステップと、
前記故障アクティブデータ要素が前記所定のシーケンス内の前記第１のアクティブデータ要素以外のアクティブデータ要素であるとき、前記故障処理応答を抑制し、前記アドレスベクトルのどのデータ要素が前記故障アクティブデータ要素であるかを示すステータス情報を記憶するステップと
を備える、データ処理方法。
【請求項１９】
データ処理装置によって実行されると、請求項１から１６のいずれか一項に記載の装置に対応する命令実行環境を提供する仮想マシンを提供する、コンピュータ可読記憶媒体に記憶されたコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。より詳細には、本技法はベクトルアトミックメモリ更新命令の処理に関する。
【０００２】
いくつかのデータ処理装置は、結果ベクトルの対応するデータ要素を生成するために、ベクトルの各データ要素に対して所与の処理動作が実行されてもよいベクトル処理をサポートすることができる。これにより、所与の数のデータ値を処理するために必要なプログラム命令の数を削減するために、いくつかの異なるデータ値が単一の命令で処理されることが可能になる。ベクトル処理は、ＳＩＭＤ（単一命令、複数データ）処理と呼ぶこともできる。
【発明の概要】
【０００３】
少なくともいくつかの例は、少なくとも１つのアクティブデータ要素を含む複数のデータ要素を備えるアドレスベクトルを識別するベクトルアトミックメモリ更新命令に応答して、少なくとも１つのアトミックメモリ更新動作をトリガする処理回路であって、各アトミックメモリ更新動作が、アドレスベクトルの対応するアクティブデータ要素に基づいて決定されたアドレスを有するメモリ位置へのアトミック更新を備える、処理回路を備える装置を提供し、アドレスベクトルのデータ要素は所定のシーケンスを有し、前記アドレスベクトルの故障アクティブデータ要素に基づいて決定されたアドレスの故障状態を検出することに応答して、処理回路は、前記故障アクティブデータ要素および所定のシーケンス内の任意の後続アクティブデータ要素に対するアトミックメモリ更新動作を抑制するように構成され、前記故障アクティブデータ要素が前記所定のシーケンス内の第１のアクティブデータ要素であるとき、処理回路は、故障処理応答をトリガするように構成され、前記故障アクティブデータ要素が前記所定のシーケンス内の前記第１のアクティブデータ要素以外のアクティブデータ要素であるとき、処理回路は、故障処理応答を抑制し、アドレスベクトルのどのデータ要素が故障アクティブデータ要素であるかを示すステータス情報を記憶するように構成される。
【０００４】
少なくともいくつかの例は、少なくとも１つのアクティブデータ要素を含む複数のデータ要素を備えるアドレスベクトルを識別するベクトルアトミックメモリ更新命令に応答して、少なくとも１つのアトミックメモリ更新動作を実行するための手段であって、各アトミックメモリ更新動作が、アドレスベクトルの対応するアクティブデータ要素に基づいて決定されたアドレスを有するメモリ位置へのアトミック更新を備える、実行するための手段を備えるデータ処理装置を提供し、アドレスベクトルのデータ要素は所定のシーケンスを有し、前記アドレスベクトルの故障アクティブデータ要素に基づいて決定されたアドレスの故障状態を検出することに応答して、実行するための手段は、前記故障アクティブデータ要素および所定のシーケンス内の任意の後続アクティブデータ要素に対するアトミックメモリ更新動作を抑制するように構成され、前記故障アクティブデータ要素が前記所定のシーケンス内の第１のアクティブデータ要素であるとき、実行するための手段は、故障処理応答をトリガするように構成され、前記故障アクティブデータ要素が前記所定のシーケンス内の前記第１のアクティブデータ要素以外のアクティブデータ要素であるとき、実行するための手段は、故障処理応答を抑制し、アドレスベクトルのどのデータ要素が故障アクティブデータ要素であるかを示すステータス情報を記憶するように構成される。
【０００５】
少なくともいくつかの例は、少なくとも１つのアクティブデータ要素を含む複数のデータ要素を備えるアドレスベクトルを識別するベクトルアトミックメモリ更新命令に応答して、少なくとも１つのアトミックメモリ更新動作をトリガするステップであって、各アトミックメモリ更新動作が、アドレスベクトルの対応するアクティブデータ要素に基づいて決定されたアドレスを有するメモリ位置へのアトミック更新を備え、アドレスベクトルのデータ要素が所定のシーケンスを有する、ステップと、前記アドレスベクトルの故障アクティブデータ要素に基づいて決定されたアドレスの故障状態を検出することに応答して、前記故障アクティブデータ要素および所定のシーケンス内の任意の後続アクティブデータ要素に対するアトミックメモリ更新動作を抑制するステップと、前記故障アクティブデータ要素が前記所定のシーケンス内の第１のアクティブデータ要素であるとき、故障処理応答をトリガするステップと、前記故障アクティブデータ要素が前記所定のシーケンス内の前記第１のアクティブデータ要素以外のアクティブデータ要素であるとき、前記故障処理応答を抑制し、アドレスベクトルのどのデータ要素が故障アクティブデータ要素であるかを示すステータス情報を記憶するステップとを備えるデータ処理方法を提供する。
【０００６】
少なくともいくつかの例は、データ処理装置によって実行されると、上述されたような装置に対応する命令実行環境を提供する仮想マシンを提供する、コンピュータ可読記憶媒体に記憶されたコンピュータプログラムを提供する。
【０００７】
本技法のさらなる態様、特徴、および利点は、添付の図面と併せて読まれるべき以下の例の説明から明らかになるであろう。
【図面の簡単な説明】
【０００８】
【図１】ベクトル処理をサポートするデータ処理装置の一例を概略的に示す図である。
【図２】ベクトルアトミックメモリ更新命令の一例を示す図である。
【図３】ベクトルアトミックメモリ更新命令を使用してヒストグラムを決定するための使用ケースの一例を示す図である。
【図４】ベクトルアトミックメモリ更新命令の第１のアクティブデータ要素について検出された故障状態を処理する一例を示す図である。
【図５】ベクトルアトミックメモリ更新命令に対する第１のアクティブデータ要素以外のアクティブデータ要素について検出された故障状態に応答して、故障処理応答を抑制し、ステータス情報を記憶する一例を示す図である。
【図６】ベクトルアトミックメモリ更新命令を処理する一例を示すフロー図である。
【図７】仮想マシンの実装形態を示す図である。
【０００９】
いくつかの具体的な例が下記に記載される。本発明はこれらの例に限定されないことが諒解されよう。
【００１０】
データ処理装置は、少なくとも１つのアクティブデータ要素を含むいくつかのデータ要素を含むアドレスベクトルを識別するベクトルアトミックメモリ更新命令をサポートすることができる。ベクトルアトミックメモリ更新命令に応答して、処理回路は、少なくとも１つのアトミックメモリ更新動作をトリガすることができる。各アトミックメモリ更新動作は、アドレスベクトルのそれらの対応するアクティブデータ要素に基づいて決定されたアドレスを有するメモリ位置へのアトミック更新を備えてもよい。
【００１１】
メモリ位置へのアトミック更新は、同じメモリ位置を同時に変更しようと試みている場合があるシステム内の任意の他のプロセッサまたはエージェントに対して不可分に実行されるものとして観察される更新動作であってもよい。アトミック更新は、たとえば、システム内のいくつかのプロセスまたはエージェントが各々メモリ内の位置の共通セットを更新しているときに役立つことができる。場合によっては、そのような更新は、メモリ位置に記憶された以前の値を読み取り、読み取られた値に対して何らかの動作を実行して更新された値を生成し、更新された値を書き戻すことによって実行されてもよく、非アトミック更新では、第１のプロセスがメモリ位置から値を読み出すことと、第１のプロセスが更新された値をメモリ位置に書き戻すこととの間の期間に、第２のプロセスもそのメモリ位置を読み取る可能性があるリスクが存在する可能性があり、その結果、第１のプロセスによって実行された更新が第２のプロセスによって考慮されない場合があり、第２のプロセスがその更新された値をメモリ位置に書き込むと、第１のプロセスによって実行された更新が実際上失われる場合がある。この問題は、不可分に実行されるものとして観察されるアトミック更新を提供することによって回避することができる。たとえば、第１および第２のプロセス／エージェントのいずれか一方がそのアトミック更新を最初に実行するように選択される場合があり、他方のプロセス／エージェントは、値を読み出す前に最初の更新が完了するまで待たなければならない場合がある。これにより、それぞれのプロセッサまたはエージェントによって実行される、競合する読取り、変更、および書込みの動作の間の競争により更新が失われることを回避することができる。
【００１２】
ベクトルアトミックメモリ更新命令は、単一の命令によってトリガされるべきいくつかのメモリ位置へのアトミックメモリ更新動作を可能にすることができ、実際のアトミックメモリ更新動作を実行するための命令だけでなく、更新が実行されるべきアドレスを決定するオーバーヘッドを削減することにおいてもコード密度を改善するので、有用であり得る。単一の命令が更新されるべきメモリ位置の対応するアドレスを決定するためのいくつかのデータ要素を備えるアドレスベクトルを指定することを可能にすることにより、これは、アドレス要素をアンパックし、あまり効率的でない可能性があるスカラーアトミックメモリ更新命令のシーケンスを介してアトミックメモリ更新をマーシャリングする必要性を回避することができる。また、ベクトルアトミックメモリ更新命令は、ハードウェアが一度に処理されるべきいくつかのアドレスを認識し、そのため、アドレスベクトルに対応するいくつかのアドレスが、たとえば、同じメモリ位置またはキャッシュラインにマッピングする場合、所与のメモリ位置に更新を合体することができるので、パフォーマンスの改善を可能にすることができる。
【００１３】
しかしながら、ベクトルアトミックメモリ更新命令を実施することに伴う１つの問題は、アドレスベクトルの対応するデータ要素に基づいて決定された１つまたは複数のアドレスに故障状態が発生する可能性があることである。たとえば、アドレスのうちの１つは、現在マッピングされていない仮想アドレスに対応する可能性があるか、または現在実行中のプロセスがアクセスする許可をもたないメモリの領域に対応する可能性があるので、変換故障を引き起こす場合がある。アドレス故障を処理する通常の方法は、故障の原因を修復するオペレーティングシステムへのトラップなどの故障処理応答をトリガし、次いで、故障をトリガした命令の実行を再起動することである。しかしながら、ベクトルアトミックメモリ更新命令の場合、ベクトル命令に応答して実行されるアトミック更新のうちのいくつかが、アドレスベクトルの別の要素に対して、故障が検出される前にすでに実行されている場合があり、これらのすでに実行された更新を繰り返すことは不正な結果につながる可能性があるので、命令を再び再起動することは安全でない場合がある。たとえば、１つの形式のベクトルアトミックメモリ更新命令は、そのアドレスがアドレスベクトルの対応するアクティブデータ要素に基づいて決定される各メモリ位置への増分をトリガする可能性があり、そのため、同じメモリ位置を２回、故障が検出される前に一度増分し、かつ命令を再起動した後に再度増分すると、誤った結果を与えるはずである。したがって、アドレス故障を扱うための標準的な技法は、ベクトルアトミックメモリ更新命令には適さない場合がある。
【００１４】
アドレスベクトルのデータ要素は、所定のシーケンスを有すると想定されてもよい。アドレスベクトルの特定のアクティブデータ要素（この要素は「故障アクティブデータ要素」と呼ばれる）に基づいて決定されたアドレスの故障状態を検出することに応答して、処理回路は、故障アクティブデータ要素および所定のシーケンス内の任意の後続アクティブデータ要素に対するベクトルアトミックメモリ更新動作を抑制することができる。故障アクティブデータ要素が所定のシーケンス内の第１のアクティブデータ要素である場合、処理回路は故障処理応答をトリガすることができる。しかしながら、故障アクティブデータ要素が、所定のシーケンス内の第１のアクティブデータ要素以外のアクティブデータ要素であるとき、処理回路は、故障処理応答を抑制し、少なくともアドレスベクトルのどのデータ要素が故障アクティブデータ要素であるかを示すステータス情報を記憶することができる。
【００１５】
この手法は、所与のアトミックメモリ更新動作を２回実行するリスクなしに、故障の後にベクトルアトミックメモリ更新命令の実行を安全に再起動できることを意味する。故障処理応答は、第１のアクティブデータ要素が故障をトリガしたときに実行され、その場合、第１のアクティブデータ要素およびシーケンス内の任意の後続アクティブデータ要素（すなわち、すべてのアクティブデータ要素）に対するアトミックメモリ更新動作は抑制され、そのため、メモリ更新動作のどれも実際には行われないため、後で完全に命令を再起動することは安全である。一方、第１のアクティブデータ要素以外のアクティブデータ要素が故障すると、故障処理応答はトリガされず、代わりに、アドレスベクトルのどのデータ要素が故障アクティブデータ要素であるかを示すために、何らかのステータス情報を記憶することができる。このステータス情報は、次いで、すでに完了した要素に対するメモリ更新動作が再び実行されないように、後でベクトルアトミックメモリ更新命令を再起動するために使用することができる。下記で説明されるように、この目的のためにステータス情報を使用することができる様々な方法があり得る。第１のアクティブデータ要素が故障状態に遭遇しない限り、少なくとも第１のアクティブデータ要素がそのアトミックメモリ更新の実行に成功することができるので、何らかの前進があってもよい。したがって、ベクトルアトミックメモリ更新命令を実行する一連の試みにわたって、任意の故障を解決し、前進を行うことができる。
【００１６】
いくつかの実装形態では、アドレスベクトルのすべての要素がアクティブデータ要素と見なされる可能性があり、システムが特定の要素を非アクティブとして示す手段がない場合がある。
【００１７】
しかしながら、他のシステムでは、アドレスベクトルのどのデータ要素がアクティブまたは非アクティブであるかを指定する何らかの制御情報が存在する場合がある。たとえば、どのデータ要素がアクティブ要素であるかを一連のビットが示すときにマスクを提供することができる。これは、たとえば、時々、アトミック更新が実行されるべき異なるアドレスの数がベクトル長の正確な倍数でない場合があるので、例には有用であり得る。これはマスクを使用して処理することができ、ベクトルアトミックメモリ更新命令の少なくとも１つのインスタンスは、ベクトル全体を満たすのに十分なアドレスがないベクトルの特定の要素を非アクティブとして示すマスクとともに実行される。マスクは「述部」と呼ぶこともできる。マスクおよび述部という用語は、本出願では互換的に使用される。
【００１８】
処理回路は、少なくとも１つのさらなる命令に応答して、ステータス情報に基づいて、少なくとも１つの新しいアドレスベクトル、およびベクトルアトミックメモリ更新命令を実行する後続の試みのための新しいマスクを生成することができる。たとえば、アドレスベクトルまたは以前のベクトルアトミックメモリ更新命令のマスクのいずれかは、故障アクティブデータ要素が、ベクトルアトミックメモリ更新命令を実行する後続の試みのための第１のアクティブデータ要素となるように、変更することができる。たとえば、ステータス情報は、故障アクティブデータ要素がベクトル内の同じ場所にとどまるが、現在は所定のシーケンス内の第１のアクティブデータ要素として示されるように、マスクを変更するために使用することができる。たとえば、故障アクティブデータ要素に先行する任意の要素は、それらのアトミック更新がすでに成功裏に完了したので、今や非アクティブとして示すことができる。代替として、アドレスベクトル自体は、以前のアドレスベクトルの要素が、第１のアクティブデータ要素および古いマスクによって示された後続要素に対応する場所に今あるように移動するように、変更することができる。プログラマは、たとえば、ベクトルアトミックメモリ更新命令および少なくとも１つのさらなる命令を囲むループを実装することができ、その結果、故障が存在する場合、ステータス情報に応じて、命令用のマスクまたはアドレスベクトルを変更することができ、次いで、ベクトルアトミックメモリ更新命令は、新しいマスクまたはアドレスベクトルを用いて再試行されてもよい。ループは、すべてのアクティブ要素が成功裏に完了するまで繰り返すことができる。
【００１９】
ステータス情報は、様々な方法で表すことができる。場合によっては、ステータス情報は、単に故障アクティブデータ要素の要素番号の指示であってもよい。
【００２０】
しかしながら、ステータス情報を表す特に有用な方法は、所定のシーケンス内で故障アクティブデータ要素に先行する少なくとも１つのデータ要素用の第１の値を有する故障指示と、故障アクティブデータ要素および所定のシーケンス内の任意の後続アクティブデータ要素用の第２の値を有する故障指示とを備える故障マスクを提供することであってもよい。この形式のステータス情報は、命令を実行する後続の試みのための新しいマスクを生成するために、ステータス情報に応じてベクトルアトミックメモリ更新命令用のマスクの変更を簡略化できるので有用である。たとえば、新しいマスクを生成するために、単純な論理演算（たとえば、ＡＮＤ）または算術演算（たとえば、減算）を使用して、故障マスクをベクトルアトミックメモリ更新命令用のマスクと単に組み合わせることができる。
【００２１】
また、ベクトルアトミックメモリ更新命令が、そのアドレスがアドレスベクトルによって指定された値を使用して動作を実行する一連の命令のうちの１つにすぎない場合があるので、このタイプの故障マスクは有用であり得るし、そのため、これらのアドレスの１つに故障が存在する場合、アトミックメモリ更新動作だけでなく、これらの他の動作の一部も抑制される必要があり得る。このタイプの故障マスクを提供することにより、故障マスクは、他の命令用のマスクも導出するために使用することができ、場合によっては、故障マスクは、一連の命令にわたって蓄積されてもよく、その結果、任意の故障要素が故障マスクからクリアされ、その結果、残りの成功要素のみが一連のベクトル命令によって処理され続ける。これは、ベクトルアトミックメモリ更新命令に続いて、故障アクティブデータ要素の故障が存在する場合、その要素およびシーケンス内の任意の後続要素についての故障指示は第２の値に設定されてもよいが、シーケンス内の故障要素の前のすべての先行要素は、故障マスク内の第１の値を有し、これは、それらの以前の要素が以前の命令についてある種の故障に遭遇した場合、以前の命令が故障マスク内のそれらの故障指示を第２の値にすでにクリアした可能性があるからである。
【００２２】
プログラマの観点から、ベクトルアトミックメモリ更新命令は、アドレスベクトルのアクティブデータ要素ごとにアトミックメモリ更新動作をトリガすることができる。しかしながら、ハードウェアでこの動作を実施する様々な方法が存在してもよい。いくつかのシステムでは、シーケンス内の第１のアクティブデータ要素に基づいて決定されたアドレスについて故障状態が検出されないとき、処理回路は、シーケンス内の任意の故障アクティブデータ要素に先行するアドレスベクトルのアクティブデータ要素ごとに実行されるべきアトミックメモリ更新動作をトリガすることができる。故障アクティブデータ要素が存在しない場合、アクティブデータ要素に対するすべてのアトミックメモリ更新動作を実行することができる。したがって、この場合、ハードウェアは、必要な命令の反復回数を削減するために、故障を引き起こす要素までできるだけ多くのアトミックメモリ更新動作を実行することができる。この手法はパフォーマンスに関してより効率的であり得る。
【００２３】
しかしながら、ハードウェアを簡略化する他の実装形態では、処理回路は、故障アクティブ要素に先行する非故障要素に対するすべてのアトミックメモリ更新動作を必ずしもトリガする必要はない。たとえば、ハードウェアは、アトミックメモリ更新に対するいくつかの要求をバッファリングする際のオーバーヘッドを制限するために、任意の所与の命令に応答して、ある数Ｎのアトミックメモリ更新を実行することに限定することができる。したがって、アクティブ要素が（Ｎ＋１）回以上のアトミックメモリ更新が実行されることを必要とし、この時点まで故障が存在しない場合、第（Ｎ＋１）のアトミックメモリ更新動作が実行されることを必要とするアクティブ要素は、アドレスベクトルのその要素の値に関係なく故障として判断されてもよい。したがって、命令の１回の反復で処理できるアクティブ要素の数が限界に達すると、次のアクティブデータ要素は故障としてマークすることができ、ステータス情報は、その要素に関連付けられた実際のアドレスが故障を実際に引き起こさない場合でも、その要素を故障要素として示すように設定することができる。次いで、ベクトルアトミックメモリ更新命令を実行する後続の試みは、たとえば、上述された方法でマスクまたはアドレスベクトルを変更することにより、故障であると以前見出された次のアクティブデータ要素から再開することができる。場合によっては、ベクトルの２つ以上の要素が単一のアトミックメモリ更新動作で処理されてもよく（たとえば、同じキャッシュ行への更新が合体されてもよく）、そのため、時々、ベクトルの（Ｎ＋１）個以上の要素が処理された後に、Ｎ回のアトミックメモリ更新の制限に達する場合があることに留意されたい。他の実装形態は要求の合体をサポートしない場合があり、その場合、以前の要素が故障していない場合、第（Ｎ＋１）のアクティブ要素は、常に故障であると見なすことができる。場合によっては、Ｎ＝１であり、その結果、第１のアクティブ要素が故障しない場合、アドレスベクトルの第２のアクティブ要素は常に故障としてマークされる。この場合、命令の反復ごとにただ１回の成功したアトミックメモリ更新が存在するので、アトミックメモリ更新動作は効果的に直列化されてもよい。これにより、回路オーバーヘッドが最小の簡単な実装形態を提供することができる。プログラマの観点から、ハードウェアが所与の命令に応答して実行できる更新の回数を制限するかどうかにかかわらず、同じプログラムを実行することができ、プログラマの観点からの唯一の違いは実現可能なパフォーマンスである。
【００２４】
上述されたように、アドレスベクトルのデータ要素は、所与の所定のシーケンスを有すると見なされてもよい。データ要素の任意のシーケンスが使用されてもよい。しかしながら、簡単な手法は、シーケンス内の第１のアクティブデータ要素がアドレスベクトルの最下位アクティブデータ要素であることである。シーケンスは、次いで、アクティブデータ要素の有意性が増す順序で続くことができる。この手法は、最下位アドレスがアドレスベクトルの最下位データ要素にデータ設定されるのが一般的なので、実際には、プログラマがベクトルにデータ設定する傾向がある方法に最もよく当てはまるかもしれない。しかしながら、他の実装形態は様々なシーケンスを選択することができ、たとえば、シーケンスは、代わりに最上位データ要素から最下位データ要素であってもよいし、より恣意的な要素のシーケンスであってもよい。
【００２５】
本技法は、アトミックメモリ更新動作に対して発生する可能性があるあらゆる種類の故障状態を防ぐために使用することができる。しかしながら、多くの場合、故障状態は、アドレス変換故障またはメモリ保護故障を備える場合がある。所与の実装形態によって取られた故障処理応答は異なってもよい。しかしながら、１つの手法は、故障が発生したときに故障処理ルーチンの実行をトリガすることであってもよい。たとえば、故障処理ルーチンは、故障を処理するためのオペレーションシステムによって提供される例外ハンドラまたはルーチンであり得る。たとえば、アドレス変換故障の場合、故障処理ルーチンは、故障をトリガしたアドレスを含むアドレスのページに対して必要な変換データをページインすることができ、またはメモリ保護故障の場合、故障処理ルーチンは、メモリ保護ユニットによって設定されたセキュリティ許可の違反に対処するために何らかのアクションを取ることができる。
【００２６】
場合によっては、アドレスベクトルは、アトミックメモリ更新が実行されるべき絶対アドレスを指定することができる。代替として、アドレスベクトルは、更新されるべき各メモリ位置のアドレスを決定するために、ベースアドレスに加えられるべき各アクティブデータ要素内のアドレスオフセットを指定することができる。ベースアドレスからのオフセットを使用して間接的にアドレスを指定することは、多くの場合、たとえば、ベクトルの各要素内で絶対アドレスが指定された場合よりも少ないビットを有するベクトル要素を使用して、アドレスが計算されることを可能にするためにより有用であり得る。
【００２７】
いくつかの実施形態では、処理回路は、アトミックメモリ更新自体を実行することができてもよい。
【００２８】
しかしながら、ベクトルアトミックメモリ更新命令に応答して少なくとも１つのアトミックメモリ更新動作を実行するために、処理回路とは別個のメモリ更新回路を設けることは、しばしば、より効率的であり得る。したがって、処理回路は、各アトミックメモリ更新動作をトリガするために、メモリ更新回路に対する要求を単に発行するだけでよい。故障があるときに命令が安全に再起動できることを保証するために、処理回路は、たとえば、アドレスベクトル内の任意の先行データ要素が故障をトリガしていないと判断されるまで、アドレスベクトルの所与のアクティブ要素に対するメモリ更新回路への要求の発行を抑制することができる。
【００２９】
別個のメモリ更新回路を設けることは、処理回路にアクセス可能なキャッシュにメモリ位置からのデータを最初にロードすることなく、メモリ更新回路がメモリに対するアトミック更新をメモリ内で直接実行することができてもよいので、特に有利であり得る。対照的に、処理回路が更新を実行できるようにするためには、一般に、値がメモリからキャッシュに読み込まれる必要があり、次いで、メモリに書き戻す前にキャッシュされたデータのコピーに対して更新が実行される必要があり得る。アトミックメモリ更新を同時に実行しようと試みるいくつかのエージェントが存在する場合、これにより、多くのキャッシュラインの移行が必要になる可能性があり、更新後にデータが近い将来二度と参照されない可能性があるので、不必要な場合があるキャッシュ内のスペースが浪費される可能性がある。キャッシュにデータをロードすることなく直接メモリを更新できるメモリ更新エージェントを提供することにより、キャッシュをより効率的に使用することができる。また、これにより、どのアトミックメモリ更新が完了したかを処理回路が追跡する必要があることが回避され、キャッシュにアクセスしようと試みている場合がある様々なプロセス／エージェント間の一貫性を維持する際のオーバーヘッドを被ることが回避される。代わりに、各プロセス／エージェントは、メモリ更新回路が所与のアドレスを更新することを単に要求するだけでよく、次いで、一貫性の追跡を続ける必要はない（「火災および忘却」手法）。
【００３０】
所与のメモリ位置へのアトミック更新は、単一の動作で実行される必要はないが、これも該当する可能性がある。場合によっては、メモリから値を読み取り、それを変更し、次いで変更された値をメモリに書き戻すために、別々のステップとしてアトミック更新を実行することもできる。アトミック更新という用語は、全体的な更新プロセスがアトミックに発生することを他のプロセッサによって観測されることを示すにすぎず、実際の更新が単一のアトミック動作であることを必要としない。また、アトミック更新は、アドレスベクトルの所与のアドレス要素に対して実行される更新を指し、ベクトル全体に対する更新がアトミックに行われなければならないことを意味しない。様々なデータ要素に対応する成功したアトミック更新の間に、他のプロセスがメモリへの更新を実行することは完全に許容可能である。
【００３１】
メモリ位置の様々な種類の更新に対応して、様々な形式のベクトルアトミックメモリ更新命令が存在してもよい。たとえば、メモリ位置へのアトミック更新は、以下のいずれかを備えることができる。
・メモリ位置に記憶された値に所定の値を加算または減算する（たとえば、メモリ位置に記憶された値を増分または減分する）。
・メモリ位置に記憶された値および少なくとも１つのさらなる値に対してビット単位の論理演算（たとえば、ＡＮＤ、ＯＲ、ＸＯＲ、またはＮＡＮＤ）を実行する。これらの種類のビット単位の論理演算は、たとえば、メモリ位置に記憶された値の特定のビットをクリアまたはセットするのに有用であり得る。
・メモリ位置に記憶された以前の値および少なくとも１つのさらなる値の最小値または最大値にメモリ位置を設定する（さらなる値の様々な値を使用していくつかのそのようなアトミック更新を実行することにより、その位置の値はさらなる値としてテストされたすべての値の全体的な最小値または最大値になる）。
・メモリ位置に記憶された以前の値が所定の条件を満たす場合にメモリ位置に記憶された値を更新する（たとえば、以前の値は別の値と比較され、それが他の値と等しい場合第３の値と置き換えられ、または、メモリ位置の特定のビットが何らかの条件に対してテストすることができ、次いで、条件が満たされる場合更新が適用される）。
【００３２】
多くの他の種類の更新を実施できることが諒解されよう。いくつかのシステムは、上述されたように各々が処理されるが、様々な種類の更新動作をトリガする２つ以上のタイプのベクトルアトミックメモリ更新命令をサポートすることができる。これらの命令は、命令オペコードまたは各メモリ位置に適用されるべき動作のタイプを指定するフィールドによって区別することができる。
【００３３】
場合によっては、更新動作はまた、更新前にメモリ位置に記憶された以前の値、および／または更新後にメモリ位置に記憶される新しい値をレジスタまたはキャッシュにロードすることを含んでもよい。したがって、メモリを更新することに加えて、古いかまたは新しい値をレジスタまたはキャッシュに戻すこともでき、その結果、処理回路はそれにアクセスすることができる。
【００３４】
本技法は仮想マシンを使用して実施することもできる。仮想マシンは、ホスト装置によって実行されると、命令を実行するための命令実行環境を提供するプログラムであってもよく、その結果、ホスト装置は、プログラマの観点から、あたかも上述された回路を有するかのように現れる。ホストプロセッサは、それ自体が実際にその回路を有する必要はなく、代わりに、仮想マシンのコードは、そのような回路が設けられているかのように命令を実行するように、ホストハードウェアを制御する。たとえば、仮想マシンは、記憶媒体に記憶されたコンピュータプログラムであってもよい。記憶媒体は非一時的であってもよい。
【００３５】
図１は、記載された実施形態の技法が採用され得るシステムのブロック図である。図１に示された例では、システムはパイプライン型プロセッサの形態を取る。命令は、フェッチ回路１０により、（通常、レベル２キャッシュ５０などの１つまたは複数のさらなるレベルのキャッシュを介してメモリ５５に結合された）命令キャッシュ１５からフェッチされ、フェッチ回路１０から、命令は、パイプライン型プロセッサ内の下流実行リソースを制御するための適切な制御信号を生成して、命令によって必要とされる動作を実行するために各命令を復号する復号回路２０を通過する。復号された命令を形成する制御信号は、パイプライン型プロセッサ内の１つまたは複数の実行パイプライン３０、３５、４０、８０、８５に発行するための発行ステージ回路２５に渡される。実行パイプライン３０、３５、４０、８０、８５は、集団で処理回路を形成すると見なされてもよい。
【００３６】
発行ステージ回路２５は、動作によって必要とされるデータ値を記憶することができるレジスタ６０にアクセスする。特に、ベクトル演算用のソースオペランドはベクトルレジスタ６５内に記憶されてもよく、スカラー動作用のソースオペランドはスカラーレジスタ７５に記憶されてもよい。加えて、１つまたは複数の述部（マスク）は、特定のベクトル演算を実行するときに処理されるベクトルオペランドのデータ要素のための制御情報として使用するために、述部レジスタ７０に記憶されてもよい。１つまたは複数のスカラーレジスタはまた、特定のベクトル演算の実行中に使用するためのそのような制御情報を導出するために使用されるデータ値を記憶するために使用されてもよい。
【００３７】
レジスタ６０はまた、処理パイプラインの動作を構成するための構成情報、またはパイプラインによって実行される処理動作の結果に関するステータス情報を提供するためのレジスタを含む場合がある制御レジスタ７７を含んでもよい。制御レジスタ７７のうちの１つは、後でより詳細に記載される第１の故障レジスタ（ＦＦＲ）７９であってもよい。
【００３８】
ソースオペランドおよび任意の関連する制御情報は、経路４７を介して発行ステージ回路に転送することができ、その結果、それらは、各復号された命令を実施するために実行されるべき動作を識別する制御信号とともに適切な実行ユニットに発信することができる。図１に示された様々な実行ユニット３０、３５、４０、８０は、ベクトルオペランドに対して動作するためのベクトル処理ユニットであると想定されるが、装置によってサポートされる任意のスカラー動作を処理するために必要な場合、別個の実行ユニット（図示せず）を設けることができる。
【００３９】
様々なベクトル演算を考慮すると、算術演算は、算術演算または論理演算がそれらのソースオペランドに対して実行されることを可能にするために、たとえば、必要なソースオペランド（および述部などの任意の制御情報）とともに算術論理ユニット（ＡＬＵ）３０に転送されてもよく、結果値は、通常、ベクトルレジスタバンク６５の指定されたレジスタに記憶するための宛先オペランドとして出力される。
【００４０】
ＡＬＵ３０に加えて、他の実行ユニット３５、たとえば、復号された浮動小数点命令に応答して浮動小数点演算を実行するための浮動小数点ユニット（ＦＰＵ）、およびベクトルオペランドに対して特定の置換演算を実行するためのベクトル置換ユニット８０が設けられてもよい。加えて、ロード／ストアユニット（ＬＳＵ）４０は、メモリ５５から（データキャッシュ４５およびレベル２のキャッシュ５０などの任意の介在するさらなるレベルのキャッシュを介して）レジスタセット６０内の指定されたレジスタにデータ値をロードするためのロード動作を実行するために、かつそれらのレジスタからメモリ５５にデータ値を戻して記憶するためのストア動作を実行するために使用される。
【００４１】
図１に示されたシステムは、命令のシーケンスがプログラムの順序で実行されるインオーダ処理システムであってもよいし、あるいは、様々な命令が実行される順序が、パフォーマンスを向上させることを目指す目的で再順序付けされることを可能にするアウトオブオーダシステムであってもよい。当業者によって理解されるように、アウトオブオーダシステムでは、（図１には明示されていない）追加の構造、たとえば、レジスタバンク４５内の物理レジスタのプール（物理レジスタのプールは、通常、アーキテクチャレジスタの数より多い）からの物理レジスタに、命令によって指定されたアーキテクチャレジスタをマッピングするレジスタリネーミング回路が設けられてもよく、それにより、特定の危険が除去されることが可能になり、順序がばらばらな処理のさらなる使用が容易になる。加えて、リオーダバッファは、通常、順序がばらばらな実行を追跡し、様々な命令の実行の結果が順番にコミットされることを可能にするために設けられてもよい。
【００４２】
記載された実施形態では、図１の回路は、ベクトルレジスタ６５に記憶されたベクトルオペランドに対してベクトル演算を実行するように配置され、ベクトルオペランドは複数のデータ要素を備える。（算術演算などの）そのようなベクトルオペランドに対して実行される特定のベクトル演算の場合、ベクトルオペランド内の様々なデータ要素に対して、必要な動作は並行して（または繰り返し）適用されてもよい。（マスクとしても知られる）述部情報は、ベクトル内のどのデータ要素が特定のベクトル演算用のアクティブデータ要素であるかを識別するために使用されてもよく、したがって、演算が適用されるべきデータ要素である。
【００４３】
図１に示されたように、実行パイプラインはまた、アトミックメモリ更新動作を実行するためのアトミックメモリ更新ユニット８５を含んでもよい。アトミックメモリ更新（ＡＭＵ）ユニットは、図１の他の実行ユニットとは別個に示されているが、他の例では、ＡＭＵユニット８５の機能は、ＡＬＵ３０またはロード／ストアユニット（ＬＳＵ）４０などの他の実行ユニットのうちの１つと組み合わすことができる。ＡＭＵユニット８５は、メモリ５５内の１つまたは複数の位置へのアトミック更新をトリガするためのアトミックメモリ更新（ＡＭＵ）命令の処理を扱う。外部ＡＭＵエージェント１００は、それらの位置からのデータがキャッシュ４５、５０にロードされることを必要としないで、メモリ５５内の位置を直接更新するために設けられる。これにより、再び頻繁に参照される可能性が低い場合がある、多数の一時的にアクセスされるデータが更新されることでキャッシュを汚染することが回避される。また、外部ＡＭＵエージェント１００は、プロセッサ自体が競合する更新間の一貫性を監視する必要がないように、他の更新に関して不可分に実行されるメモリへのアトミック更新を管理することができる。
【００４４】
したがって、ＡＭＵ処理ユニット８５は、アトミック更新が実行されるべきアドレスが故障をトリガするかどうかを判定し、そうでない場合、アドレスの要求のための更新を実行するように外部ＡＭＵエージェント１００に要求を発行することに関与してもよい。メモリ管理ユニット（ＭＭＵ）９０は、メモリアドレス空間のそれぞれの領域に対するアクセス許可を管理するために設けられてもよい。ＭＭＵ９０は、アドレス空間のそれぞれのページ用の仮想アドレスから物理アドレスへの変換を定義するエントリを記憶するための変換ルックアサイドバッファ（ＴＬＢ）９２を有してもよい。また、ＴＬＢエントリは、たとえば、対応するページが読取り専用か書込み可能かを定義するか、またはコードのどの特権レベルがページにアクセスできるかを定義する、アクセス許可を指定することができる。ＬＳＵ４０またはＡＭＵユニット８５がロード、ストア、またはアトミック更新が実行されるべきアドレスを受信すると、アドレスはＴＬＢ９２内で検索され、ＭＭＵ９０はアクセスが許可されるかどうかの指示と、そうである場合、ＬＳＵ４０またはＡＭＵユニット８５によって提供される仮想アドレスに対応する物理アドレスとを返すことができる。アクセスが許可される場合、ＬＳＵ４０またはＡＭＵユニット８５は、データキャッシュ４５へのアクセスまたはＡＭＵエージェント１００への要求を適宜トリガすることができる。図１は、メモリ管理ユニット９０が設けられた例を示すが、命令が物理アドレスを直接指定することができるシステムでは、（仮想から物理へのアドレス変換なしに）メモリの物理的にアドレス指定されたページに対するアクセス許可を定義するメモリ保護ユニット（ＭＰＵ）を代わりに設けることができる。
【００４５】
図２は、ＡＭＵユニット８５によって処理できるベクトルＡＭＵ命令の一例を示す。この例は、ベースアドレス＆Ａ、アドレスベクトルＺｂ、マスクレジスタ（述部レジスタ）Ｐｇ、および加算されるべき即値＃１を入力として指定するＡＭＵ加算命令である。図２に示されたように、述部レジスタＰｇは、アドレスベクトルＺｂのどの要素がアクティブ要素または非アクティブ要素であるかを識別するビット値のマスクを含む。この例では、０のマスクビット値は非アクティブ要素を示し、１のマスクビット値はアクティブ要素を示すが、必要に応じて反対のマッピングを使用できることが諒解されよう。したがって、この例では、アドレスベクトルＺｂの要素０および１は非アクティブであり、要素２〜７はアクティブである。アドレスベクトルＺｂの各アクティブデータ要素は、アトミックメモリ更新が実行されるべきメモリ位置のアドレスを決定するために、ベースアドレス＆Ａに加えられるべきアドレスオフセットを指定する。
【００４６】
したがって、図２に示されたように、ベクトルＡＭＵ命令に応答して、アクティブデータ要素２〜７ごとに、ＡＭＵユニット８５は、ベースアドレス＆Ａとアクティブ要素２〜７によって指定された各連続オフセット１０９、５６、９０との和に対応する一連のアドレスを自動的に更新するように、外部ＡＭＵエージェント１００への要求をトリガすることができる。アドレスベクトルＺＢの非アクティブ要素０、１に対する要求は送信されない。図示されたように、アドレスベクトルＺｂの様々な要素内にアドレスオフセットのエイリアシング(aliasing)(又はエイリアス化ともいう）が存在する場合があるので、同じアドレスはベクトルＡＭＵ命令に応答してそれに適用される複数の更新を有してもよい。図２では、たとえば、アドレスベクトルの要素２および５は、両方とも同じオフセット１０９を指定しているため、アドレス＆Ａ＋１０９を有するメモリ位置を更新するための２つの別々の要求が発行される。
【００４７】
この例では、ベクトルＡＭＵ命令は加算命令であり、即値は１であるので、各要求は、各それぞれのオフセットに基づいて計算されたアドレスを有するメモリ位置に記憶された値を増分することである。１以外の値を加算すること、アドレス指定されたメモリ位置に記憶された値から特定の値を減算すること、メモリ位置に記憶された値および少なくとも１つのさらなる値に対してＡＮＤ、ＯＲ、ＸＯＲ、ＮＡＮＤなどのビット単位の論理演算を実行すること、メモリ位置に記憶された値および少なくともさらに指定された値の最大値または最小値にメモリ位置を設定すること、ならびに、メモリ位置の値を所与の他の値と比較するか、または値が何らかの条件を満たすかどうかを判定し、条件が満たされた場合に値を更新することなどの、他のタイプのアトミック更新も実行できることが諒解されよう。ＡＭＵエージェント１００は、メモリにアクセスしようと試みる他のプロセッサによって不可分であると観測されるように、各アトミック更新を処理する。したがって、所与の更新要求に応答してアトミック更新を開始してから終了するまでの間、他のプロセッサは、更新が失われないことを保証するために、更新されているメモリ位置を読み書きすることができない。図２に示されたように同じベクトル内にそれぞれのアドレスのエイリアシングが存在するとき、アトミック更新は、２番目のエイリアス要求が始まる前に、１番目のエイリアス要求に応答する更新が完了することも保証する。
【００４８】
図３は、このタイプのベクトルＡＭＵ命令の例示的な使用ケースを示す。たとえば、プログラマは、データ値の配列をウォークスルーし、各可能な数値が配列内に何回現れるかを数えるために、何らかのコードを書くことを望む場合がある。すなわち、プログラマは、図３の上部に示されたように、ヒストグラム１２０を決定することを事実上望む場合がある。したがって、考慮されるべきデータ値の配列は、ベースアドレス＆Ｖから始まる位置のブロック１２２にあるメモリに記憶されてもよく、ベースアドレス＆Ａで始まるメモリアドレス空間１２４の別の領域は、各可能な数値を有する配列１２２の値の数を示すカウント値を記憶するために割り振られてもよい。
【００４９】
図３の右側の擬似コードに示されたように、これは単純なループを使用して実施することができる。ループの各繰返しにおいて、ベクトルロード命令（ＶＬｏａｄ）は、配列１２２からアドレスベクトルＺｂにデータ値をロードすることができる。アドレスベクトルＺｂにロードされた最初のデータ値のアドレスは、データ値を記憶している配列１２２のベースアドレス＆Ｖにカウントオフセットｉを加えることによって決定されてもよい。最初の繰返しで、配列１２２の最初のＶＬ個の要素がアドレスベクトルＺｂにロードされてもよく、ＶＬはベクトルＺｂの要素の数（ベクトル長）である。
【００５０】
アドレスベクトルに値が設定されると、カウント配列１２４の開始を示すベースアドレス＆Ａ、ベクトルロード命令の結果であるアドレスベクトルＺｂ、およびアドレスベクトルＺｂ内のそれぞれのオフセットをベースアドレス＆Ａに加えることによってアドレスが決定された各メモリ位置に加算されるべき１の即値を指定して、図２に示されたタイプのベクトルＡＭＵ命令（ＶＡＭＵ−ＡＤＤ）が実行される。この例では、簡単にするために、すべての要素がアクティブであるように、ベクトルロード命令およびベクトルＡＭＵ命令用のマスクはすべて１であると仮定される。したがって、ベクトルＡＭＵ命令に応答して、ＡＭＵユニット８５は、データ配列１２２からアクセスされる特定の値に対応するカウント配列１２４内の位置を増分するように、アトミックメモリ更新エージェント１００をトリガする。所与の数値データ値についてのカウント値は、そのデータ値に等しいオフセットにある（たとえば、値「７２」の出現回数を表すカウント値は、ベースアドレス＆Ａからのオフセット７２にある）。したがって、配列１２２内に所与の数値が現れるたびに、これは配列１２４内の対応するカウント値への増分をトリガする。
【００５１】
ベクトルＡＭＵ命令を実行すると、カウンタｉは、ベクトル長ＶＬに対応するアドレスの数だけ増分することができ（ｉ：＝ｉ＋ＶＬ）、次いで、ループは、ＶＬ要素の次のブロック内でアドレスベクトルへのフェッチを再び開始し、考慮されるべきデータ値の次のブロックに対してベクトルＡＭＵ命令を繰り返す。このようにして、ループは、１つのベクトル長ＶＬに対応するデータ値の各連続チャンクを通して繰返しを保つことができる。
【００５２】
ループは、データ配列１２２の終端に達したときにループを終了するｉｆ文を含んでもよい。たとえば、ｉｆ文は、カウンタｉが配列の全長以上であるかどうかをチェックすることができる。代替として、仮想アドレス空間内のデータ配列１２２に続く仮想アドレス１２６は、所与の停止指示値ＸＸＸＸ（停止値は任意の所定の値であり得る）を記憶することができ、ｉｆ文は、アドレスベクトルＺｂの要素のうちの１つが停止値ＸＸＸＸに等しいと判明したときにループを終了するためにループに含まれてもよい。代替として、何らかの他の停止条件を定義することができる。
【００５３】
このようにして、ベクトルＡＭＵ命令は、静的命令が比較的少ないヒストグラム１２０を決定するために使用することができる。図３は、簡略化された例であり、マスクを操作するために、または処理されるべき各要素に対してより複雑な動作を実行するために必要とされるより多くの命令が存在してもよいことが諒解されよう。スカラーＡＭＵの実装形態と比較して、データ配列１２２の各要素内で個別にフェッチし、停止条件が満たされているかどうかをチェックし、位置ごとに個々のタイプのメモリ更新をトリガするために多数の命令を実行する必要性が少ないので、コードをベクトル化することはより効果的であり得る。また、動作のスカラーセットとは異なり、ベクトルＡＭＵはより効率的に処理することができるかもしれない。たとえば、ベクトルのいくつかの要素が同じキャッシュラインに対応する場合、これらは、単一の動作で対応するキャッシュラインを更新するために、ＡＭＵエージェント１００への単一の要求を使用して処理することができる。
【００５４】
しかしながら、図２および図３に示されたタイプのベクトルアトミックメモリ更新命令を実行するとき、アドレスベクトルＺｂを使用して計算されたアドレスが、アドレス変換故障またはメモリ保護故障などの故障状態をトリガすることが起こり得る。アドレス変換故障は、ＴＬＢ９２内の変換データの検索に基づいてＭＭＵ９０によって通知される任意の故障であってもよい。メモリ保護故障は、物理的にアドレス指定された要求に対する許可データを検索するメモリ保護ユニットによってトリガされる任意の故障であってもよい。たとえば、ＭＭＵ９０は、現在実行中のプロセッサが、要求されているアドレスを更新する許可をもたない場合、またはベクトルの所与の要素について計算されたアドレスが、許可が設定されていない、マッピングされていない仮想アドレスに対応する場合、故障を通知することができる。そのような故障状態は、通常、オペレーティングシステムへのトラップ、または介入し問題を解決しようと試みることができる例外処理ルーチンの実行などの、何らかの種類の故障処理応答をトリガすることによって処理されてもよい。故障の原因を修復する（たとえば、マッピングされていないページ用のデータをＴＬＢ９２にページインする）と、オペレーティングシステムまたは他の種類の制御ソフトウェアは、それが完了することができるように命令を再起動することができる。通常のベクトル演算の場合、それらの演算が冪等であり得るので、命令全体を最初から再生することは安全であり得る。
【００５５】
しかしながら、図２および図３に示されるタイプのベクトルＡＭＵ命令は、冪等でない場合がある。たとえば、図２に示された演算が最初から繰り返された場合、故障が識別される前に実行された成功裏に完了したアトミック更新が再度実行され、そのため、メモリ内の対応する位置が２回以上増分される可能性がある。これは、たとえば、図３のヒストグラムに対して誤った値が計算されることにつながる可能性がある。同様の問題は他のタイプのＡＭＵでも生じる場合がある（たとえば、ＸＯＲなどの論理演算を一度に何回も適用すると結果が変わる場合がある）。したがって、ベクトルアトミックメモリ更新命令によってトリガされた１つまたは複数のアドレスに故障が発生すると、すでに実行された更新のいずれかを繰り返さずに命令が再実行されることを可能にすることが望ましい可能性がある。図４〜図６は、これを行うための例示的な技法を示す。
【００５６】
図４に示されたように、アドレスベクトルの第１のアクティブ要素について故障状態が検出された場合、オペレーティングシステムにトラップして、オペレーティングシステムが故障を処理することを可能にすることなどの、故障処理応答がトリガされる。また、故障が検出されると、ＡＭＵユニット８５は、故障をトリガしたアクティブ要素および任意の後続要素について、ＡＭＵエージェント１００に発行されている任意のＡＭＵ要求を抑制する。たとえば、図４では、第１のアクティブ要素は、対応するマスクビットが１であるベクトル内の最下位要素なので、要素２である。要素２に故障が発生すると、要素２〜７に対するＡＭＵ要求は抑制される。
【００５７】
一方、図５に示されたように、第１のアクティブ要素ではないアドレスベクトルの要素について故障が検出されると、故障処理応答は抑制される。たとえば、オペレーティングシステムへのトラップは存在しない。それにもかかわらず、ＡＭＵユニット８５は、故障要素および故障要素より上位の任意の後続要素について発行されているＡＭＵ要求を抑制する。たとえば、図５では、アクティブ要素４について故障が発生したので、先行するアクティブ要素２および３に対するＡＭＵ要求は成功裏に発行されるが、アクティブ要素４および後続のアクティブ要素５〜７に対する要求は抑制される。
【００５８】
故障処理応答が生成されない（たとえば、オペレーティングシステムへのトラップがない）ので、命令の実行は成功したように見える。しかしながら、故障に関する情報を提供するために、ＡＭＵユニット８５は、どの要素が故障したかを示すように第１の故障レジスタ７９を更新する。図５に示されたように、第１のアクティブ要素以外の要素について故障が発生すると、故障をトリガした要素および任意の上位要素に対応するＦＦＲ７９内のビットがクリアされる。したがって、ＦＦＲ７９は、ＡＭＵ要求がＡＭＵエージェント１００に成功裏に発行されたビットで示される部分、およびＡＭＵ要求が発行されなかったゼロのビットで示される部分に、ベクトルを事実上分割することができる。これは、どのアクティブ要素が成功裏に処理されたか、または処理されなかったかをソフトウェアが判定することを可能にできる情報、したがって、同じ要素に対するＡＭＵ動作を２回実行することを回避するために命令の実行が再起動されるポイントを提供する。たとえば、図５の下部に示されたように、ベクトルＡＭＵ命令用の新しいマスクは、ＦＦＲ７９内の１のビット値に対応する以前のマスクＰｇの任意のビットがクリアされるＦＦＲ７９を使用して生成することができ、その結果、まだ処理されていない残りの要素のみが、ベクトルＡＭＵ命令の後続の実行のためのアクティブ要素として示される。たとえば、アプリケーションソフトウェアは、その要素がすべて成功裏に更新されるまで命令を繰り返し実行するために、ベクトルＡＭＵ命令のまわりのループを用いて書くことができるこれ向けのいくつかの例示的な擬似コードが下記に示される。
【表１】
2019503009.tif 000003
【００５９】
静的命令の総数が、必要な更新を実行するための一連のスカラーＡＭＵ演算を実施するために必要な静的命令の数と同様である場合でも、上記で示された式のベクトル化されたループは、たとえば、それらがメモリ内の同じキャッシュラインを対象にしている場合、いくつかの要素の並行更新に基づいて、ハードウェアがパフォーマンスを改善する可能性を有する。対照的に、スカラー実装形態は、一度に１つの要素しか発行することができない。
【００６０】
したがって、故障が検出されたときに故障要素およびアドレスベクトル内の後続要素に対するアトミック更新動作を抑制し、ベクトル内の第１のアクティブ要素が故障した場合にのみ故障処理応答をトリガし、第１のアクティブ要素以外の要素が故障をトリガした場合、どのデータ要素が故障したかを示すようにＦＦＲ７９を設定することにより、２回以上更新のいずれかを実施するリスクなしに、故障後にベクトルＡＭＵ命令を安全に再起動することが可能になる。
【００６１】
これは、ベクトル長ＶＬのデータ値の連続するブロックに対して所与のベクトル命令を繰り返し実行するループが存在する、図３の例などのベクトル化されたコードにおいて特に有用であり得る。しばしば、処理されるべき別個のデータ値の数は、ベクトル長の正確な倍数でない場合があるので、ループの最後の繰返しは、ループによって横断されている構造１２２の終端を越えて延びるデータ値内でフェッチすることができる。この場合、最後の繰返しでは、ベクトルのいくつかの要素がカウント配列１２４内にマッピングしないアドレスオフセットに対応する可能性が高いので、そのようなアドレスオフセットがアドレス変換故障またはメモリ保護故障をトリガするかもしれない可能性が高い。たとえば、ループの最後の繰返しは、処理されている配列の終端を超えるデータ値をアドレスベクトルＺｂにロードインすることができ、これらは、カウント配列１２４のベースアドレス＆Ａから大量にオフセットされた大きな値を有することができ、現在のプロセスがアクセスすることが許可されないアドレス空間の領域に拡張することができる。
【００６２】
ベクトルＡＭＵ命令を実行する前にすべてのアドレスオフセットを個別にチェックすることにより、複雑さが増大し、ＴＬＢへの変換をロックする能力がなければ、ベクトルＡＭＵ命令によって処理されるアドレスが故障しないことが保証されない場合もある。別のオプションは、ベクトルＡＭＵ命令が実行される前に配列の終端に達したかどうかをテストすることであってもよい。しかしながら、場合によっては、配列の終端に達したときを判定するための停止条件は、実際には更新動作自体に依存する場合があるので、事前にテストすることが可能でない場合があり、いずれの場合も、必要な静的命令の数が増える場合がある。停止条件が満たされたと分かる前にベクトルＡＭＵ命令が実行されることを可能にする代わりに、ソフトウェアをより効率的にすることができる。しかしながら、これはまた、アドレス故障のリスクを増大させる。アドレス故障の唯一の原因が、ベクトル化されたコードが横断することが想定された構造の終端を超えてステップしたことであるとき、ＯＳを不必要にトラップすることは望ましくないはずである。後の要素が故障したときに故障処理応答を抑制することにより、停止条件が満たされたと分かるとベクトルＡＭＵ命令のループが終了する場合があるので、停止条件が満たされたと判断できる場合、ベクトルＡＭＵ命令を繰り返すことは全く必要でさえない場合がある。停止条件がまだ満たされていない場合、故障は現実なので、ベクトルＡＭＵ命令を繰り返すことができ、レジスタ７９からのＦＦＲ情報はマスクを更新するために使用することができ、その結果、ベクトルＡＭＵ動作は、第１のアクティブ要素として現在示されている以前の故障要素から再開する。
【００６３】
図５は、成功した要素と失敗した要素とを分割するマスクに関してＦＦＲ７９が表される一例を示す。しかしながら、単に故障をトリガした要素の要素番号を識別することなどの別の方法でこれを表すことも可能であるはずである。また、図５は、ベクトルアトミックメモリ命令を実行することを繰り返し試みるための新しいマスクを計算する一例を示すが、別の手法は、以前の試みの故障をトリガした要素の場所に対応するアドレスの数によってカウント値ｉを更新した後、図３に示されたベクトルロード命令を繰り返すことであってもよく、その結果、故障要素が現在ベクトル内の第１のアクティブ要素に対応する場所にあるように、アドレスベクトルＺｂ自体が更新される。次いで、ベクトルＡＭＵ命令を実行する後続の試みは、故障を解決するためにオペレーティングシステムによって実行されたどんな動作の完了後でも、以前に故障であると判定された要素から始まる。
【００６４】
ベクトルアトミックメモリ更新命令の実行のたびに、第１のアクティブ要素が故障していない限り、少なくとも１つの非故障要素が命令の実行ごとに更新されるので、前進を実現することができる。第１のアクティブ要素が故障している場合、オペレーションシステムへのトラップがトリガされて故障を解決し、すでに実行されたアトミック更新を繰り返すリスクがないので、命令を再びトライすることができる。
【００６５】
いくつかのハードウェア実装形態は、所与の命令に応答して任意の数のＡＭＵ要求が外部ＡＭＵエージェント１００に発行されることを可能にすることができる。この場合、ＡＭＵユニット８５は、できるだけ多くのアドレスベクトルＺｂの要素に対する要求を発行することができる。したがって、故障が検出されない場合、マスク値Ｐｇによって示されるアクティブ要素ごとに要求が発行されてもよい。少なくとも１つの要素について故障が検出された場合、故障が検出された故障要素に先行するすべてのより低い番号の要素に対して要求が発行されてもよい。
【００６６】
しかしながら、他の実施形態では、所与の命令に応答してＡＭＵエージェント１００に発行することができる最大数のＡＭＵ要求が存在してもよい。たとえば、要求の数を特定の数に制限すると、ＡＭＵエージェント１００内のハードウェアを簡略化することができる。この場合、ある命令が最大のＡＭＵ要求よりも多くを必要とする場合、ＡＭＵユニット８５は、対応するアドレスが実際にはＡＭＵ９０内の故障をトリガしない場合でも、最大値を超えるさらなるＡＭＵ要求を必要とする次の要素を故障と判断することができる。次いで、ＦＦＲ７９は、この要素を第１の故障要素として示すように更新することができ、次いで、故障を防ぐために提供される同じソフトウェアループは、ベクトルＡＭＵ命令の繰返しをトリガすることができ、その結果、その要素および任意の後続要素に対するアトミックメモリ更新動作は、後のサイクルでトリガすることができる。たとえば、いくつかのより簡単な実施形態は、ベクトルＡＭＵ命令の任意の所与の実行においてベクトルの第１のアクティブ要素のみを処理するように選択することさえでき、残りの要素をＦＦＲ７９内の故障として常にマークすることができ、その結果、それぞれの要素に対する更新は、命令の各繰返しに応答して実行される１回の更新ですべて直列化される。ソフトウェアの観点から、この手法は、（性能の低下以外の）プログラマにとって不可視であり得るが、この手法は、ＡＭＵエージェント１００のハードウェアオーバヘッドを低減するのに役立つことができる。
【００６７】
上記の例では、アドレスベクトルのアクティブ要素は、最下位要素（アクティブの場合の要素０）から始まり、最上位のアクティブ要素（上記の８要素ベクトルの例における要素７）で終わる、ＡＭＵユニット８５によるシーケンス内で考えられる。しかしながら、最上位要素から最下位要素に進むこと、または任意のシーケンスを使用することなどの、何らかの他のシーケンス内の要素を考えることは可能なはずである。したがって、どの要素がシーケンス内の第１のアクティブ要素であるかを判断する他の方法がある。上記の例は説明を簡単にするために８要素のベクトルを示すが、本技法は任意のベクトル長で実施することができる。
【００６８】
図６は、ベクトルＡＭＵ命令の処理を示すフロー図である。ステップ２００において、ベクトルＡＭＵ命令が実行されているかどうかが判定される。実行されていない場合、命令は、実行ユニット３０、３５、８０、４０のうちの１つにより、何らかの他の方法で処理される。ベクトルＡＭＵ命令が実行されると、ステップ２０２において、ＡＭＵユニット８５は、アドレスベクトルの第１のアクティブ要素が故障状態をトリガするかどうかを判定する。トリガする場合、ステップ２０４において、実行されるべき対応する故障処理ルーチンをトリガする例外信号または割込み信号を生成することなどの、故障処理応答がトリガされる。たとえば、故障処理ルーチンは、オペレーティングシステムによって定義することができる。次いで、この命令の処理は終了する。
【００６９】
一方、第１のアクティブ要素が故障をトリガしない場合、ステップ２０６において、ＡＭＵユニット８５は、アドレスベクトルの第１のアクティブ要素内で指定された値に基づいてそのアドレスが決定されるメモリ位置へのアトミック更新を要求するＡＭＵ要求を、外部ＡＭＵエージェント１００に発行する。たとえば、ターゲットメモリアドレスは、ベクトルの第１のアクティブ要素によって指定されたオフセットをベースアドレスに加えることによって決定することができる。代替として、ターゲットアドレスは、アドレスベクトルの要素によって直接指定することができる。
【００７０】
ステップ２０８において、ＡＭＵユニット８５は、処理されるべき任意の他のアクティブ要素が存在するかどうかを判定する。存在しない場合、現在の命令の処理は終了する。別のアクティブ要素が存在する場合、ステップ２１０において、ＡＭＵユニット８５は、アドレスベクトルの次のアクティブ要素が故障をトリガするかどうかを判定する。たとえば、これは、対応するアドレスを計算し、ＭＭＵ９０内でそれを検索することによって決定することができる。次のアクティブ要素によって故障がトリガされた場合、ステップ２１２において、故障処理応答はトリガされないが、代わりに、ＡＭＵユニット８５は、どの要素が故障をトリガしたかを識別するようにＦＦＲ７９を更新する。たとえば、上述されたように、ＡＭＵユニット８５は、次のアクティブ要素およびベクトルの任意の後続要素に対応するＦＦＲのビットをクリアすることができる。次いで、命令の処理は終了する。次のアクティブ要素が故障をトリガしなかった場合、ステップ２１２において、ステップ２０６と同様の方法で次のアクティブ要素に対応するアドレスに対して別のＡＭＵ要求が発行される。次いで、方法はステップ２０８に戻って、処理されるべき別のアクティブ要素が存在するかどうかを検討する。
【００７１】
したがって、図６に示されたように、第１のアクティブ要素に関連する故障が存在する場合のみ、ステップ２０４において故障処理応答がトリガされ、他の要素に故障が発生した場合抑制される。また、故障が発生すると、その要素および任意の後続要素に対するＡＭＵ要求は抑制される。したがって、ＡＭＵ要求を発行するには、以前考慮された要素のどれも故障をトリガしなかったことが必要とされる。このようにして、ベクトルＡＭＵ命令は後で安全に繰り返すことができ、繰り返されるベクトルＡＭＵ命令のマスクまたはアドレスベクトルはＦＦＲ情報に基づいて更新され、その結果、後続の試みのための第１のアクティブ要素は、以前故障をトリガした要素になる。
【００７２】
上述されたように、ステップ２１０において、ＭＭＵ９０がアドレス変換故障または保護故障を通知しない場合でも、現在の命令に応答して最大数のＡＭＵ要求がすでに発行されていた場合、次のアクティブ要素は故障をトリガすると見なすことができる。
【００７３】
図７は、使用され得る仮想マシンの実装形態を示す。前述の実施形態は、関係する技法をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェアデバイスのいわゆる仮想マシンの実装形態を提供することも可能である。これらの仮想マシンの実装形態は、仮想マシンプログラム５１０をサポートするホストオペレーティングシステム５２０を実行するホストプロセッサ５３０上で実行される。通常、大きく強力なプロセッサは、妥当な速度で実行する仮想マシンの実装形態を提供する必要があるが、そのような手法は、互換性または再利用のために別のプロセッサにネイティブなコードを実行したいという要望があるときなどの、いくつかの状況で正当化されてもよい。仮想マシンプログラム５１０は、仮想マシンプログラム５１０によってモデル化されているデバイスである実際のハードウェアによって提供されるはずのアプリケーションプログラムインターフェースと同じアプリケーションプログラムインターフェースをアプリケーションプログラム５００に提供する。したがって、上述されたメモリアクセスの制御を含むプログラム命令は、仮想マシンハードウェアとのそれらの相互作用をモデル化するために、仮想マシンプログラム５１０を使用するアプリケーションプログラム５００内から実行されてもよい。
【００７４】
本出願では、「…ように構成された」という単語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈では、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方式を意味する。たとえば、装置は、定義された動作を実現する専用ハードウェアを有してもよく、またはプロセッサもしくは他の処理デバイスは、機能を実行するようにプログラムされてもよい。「ように構成された」は、定義された動作を実現するために、何らかの方法で装置要素が変更される必要があることを意味しない。
【００７５】
本発明の例示的な実施形態が添付の図面を参照して本明細書に詳細に記載されたが、本発明はそれらの厳密な実施形態に限定されず、添付の特許請求の範囲によって規定される本発明の範囲および趣旨から逸脱することなく、様々な変更および修正が当業者によってもたらされ得ることが理解されるべきである。
【図１】
2019503009.tif 000004
【図２】
2019503009.tif 000005
【図３】
2019503009.tif 000006
【図４】
2019503009.tif 000007
【図５】
2019503009.tif 000008
【図６】
2019503009.tif 000009
【図７】
2019503009.tif 000010
【国際調査報告】
2019503009.tif 000011
2019503009.tif 000012