(57)【要約】  複数のＮビット部分を使用してＭビット値がＰビット数値を表す冗長表現が提供され、ここで、Ｍ＞Ｐ＞Ｎである。アンカー値は各Ｎビットのビットの有効桁を識別し、少なくとも２つの隣接するＮビット部分のグループ内で、グループの下位Ｎビット部分の２つ以上の重複ビットは、グループの少なくとも１つの上位Ｎビット部分の２つ以上の最下位ビットと同じ有効桁を有する。複数の演算回路ユニットは、複数の独立したＮビット演算を並列に実行することができ、各Ｎビット演算は、冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む。これにより、Ｎビット演算を実行するのにかかる時間内に比較的長いＭビット値の高速結合処理が可能になる。
2019500672.tif 000002
【特許請求の範囲】
【請求項１】
Ｍ＞Ｐ＞Ｎとして、複数のＮビット部分を使用してＰビット数値を表す冗長表現を有するＭビットデータ値を処理する処理回路を含む装置であって、
Ｖ＜Ｎとして、前記処理回路が、アンカー値に基づいて前記冗長表現の各Ｎビット部分のビットの有効桁を識別するように構成され、少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有し、
前記処理回路が、複数の独立したＮビット演算を並列に実行する複数の演算回路ユニットを含み、各Ｎビット演算が、前記冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、前記冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む、
装置。
【請求項２】
前記複数の演算回路ユニットが、複数のＮビット加算を並列に実行する複数の加算回路ユニットを含み、各Ｎビット加算が、前記少なくとも２つのＭビットオペランド値の前記対応するＮビット部分を、前記Ｍビット結果値の前記対応するＮビット部分を生成するために加算することを含む、請求項１に記載の装置。
【請求項３】
前記処理回路が、入力値を、前記冗長表現を有する変換されたＭビットデータ値に変換するために変換動作を実行するように構成される、請求項１および２のいずれか一項に記載の装置。
【請求項４】
前記変換動作が、前記入力値の符号に依存して前記重複ビットを設定することを含む、請求項３に記載の装置。
【請求項５】
前記入力値が正であるとき、前記処理回路が前記重複ビットを０に設定するように構成され、前記入力値が負であるとき、前記処理回路が前記重複ビットを１に設定するように構成される、請求項４に記載の装置。
【請求項６】
前記入力値が浮動小数点値を含むとき、前記変換動作が、
前記アンカー値および前記浮動小数点値の指数部に依存して、前記浮動小数点値の仮数部のビットを、前記Ｍビットデータ値内の対応する有効桁のビットに、少なくとも１つのＮビット部分の前記重複ビットを０に設定して、マッピングすることと、
前記入力値が正であるとき、前記マッピングの結果を、前記変換されたＭビットデータ値として出力することと、
前記入力値が負であるとき、前記変換されたＭビットデータ値を生成するために、前記マッピングの前記結果をネゲートすることと
を含む、請求項４に記載の装置。
【請求項７】
前記処理回路が、前記冗長表現を有する第１のＭビット値に対して重複削減演算を実行して、前記冗長表現を有する第２のＭビット値を生成するように構成され、前記第２のＭビット値の少なくとも１つのＮビット部分内の前記重複ビットが、前記第１のＭビット値の少なくとも１つの対応するＮビット部分の前記重複ビットよりも小さい大きさを表す、請求項１から６のいずれか一項に記載の装置。
【請求項８】
前記重複削減演算が、前記冗長表現を有する第１のＭビット値の１つまたは複数のＮビット部分の前記重複ビットを、前記第１のＭビット値の１つまたは複数の後続のＮビット部分に伝搬して、重複ビットの異なるパターンを使用して前記第１のＭビット値と同じＰビット数値を表す前記冗長表現を有する第２のＭビット値を生成する重複伝搬演算を含む、請求項７に記載の装置。
【請求項９】
前記第２のＭビット値において、前記重複ビットが０に等しい、請求項８に記載の装置。
【請求項１０】
前記重複伝搬演算が、
前記第１のＭビット値の最下位Ｎビット部分の前記重複ビットを、前記Ｍビット値の後続のＮビット部分に加算して、修正された非重複ビットと修正された重複ビットとを生成する初期加算と、
前回の加算からの前記修正された重複ビットを、前記第１のＭビット値の次のＮビット部分に加算して、修正された非重複ビットと修正された重複ビットとを生成する少なくとも１つのさらなる加算と、
を含む、複数の逐次加算を実行することを含み、
前記処理回路が、各逐次加算で生成され、前記重複ビットが０に設定された、前記修正された非重複ビットに基づいて前記第２のＭビット値を生成するように構成される、
請求項８および９のいずれか一項に記載の装置。
【請求項１１】
前記第２のＭビット値において、重複ビットを有するＮビット部分ごとに、前記２つの最下位重複ビットが、値００、０１、１１のうちの１つを有し、任意の残りの重複ビットが、前記２番目の最下位重複ビットと同じ値を有する、請求項８に記載の装置。
【請求項１２】
前記重複伝搬演算が、複数の並列加算を実行することを含み、
各並列加算が、前記第１のＭビット値の所与のＮビット部分の前記重複ビットを前記第１のＭビット値の後続のＮビット部分の非重複ビットに加算して、前記第１のＭビット値の前記後続のＮビット部分に有効桁において対応する前記第２のＭビット値のＮビット部分を生成することを含む、
請求項８および１１のいずれか一項に記載の装置。
【請求項１３】
前記重複削減演算が、前記第１のＭビット値の１つまたは複数のＮビット部分の前記重複ビットを、重複アキュムレータ値の対応するＮビット部分に加算し、前記第１のＭビット値の前記１つまたは複数のＮビット部分の前記重複ビットをゼロに設定して前記第２のＭビット値を生成する重複累積演算を含む、請求項７に記載の装置。
【請求項１４】
前記処理回路が、前記第１のＭビット値を生成するために実行された演算回数を示す演算カウントを保持し、前記演算回数が所定数以上であることを前記演算カウントが示すときに前記重複削減演算を実行するように構成される、請求項７から１３のいずれか一項に記載の装置。
【請求項１５】
演算の前記所定数が２Ｖ−１−１以下であり、ここでＶは重複ビットを有する前記Ｎビット部分のうちのいずれかによって構成される重複ビットの前記最小数である、請求項１４に記載の装置。
【請求項１６】
前記処理回路が、前記重複削減演算が実行されたときに前記演算カウントをリセットするように構成される、請求項１４および１５のいずれか一項に記載の装置。
【請求項１７】
前記処理回路が、前記第１のＭビット値の前記Ｎビット部分のうちの１つのための前記重複ビットが所定値を有することを検出することに応答して、前記重複削減演算を実行するように構成される、請求項７から１６のいずれか一項に記載の装置。
【請求項１８】
前記処理回路が、前記第１のＭビット値に対する処理動作を実行するときに前記第１のＭビットデータ値の前記Ｎビット部分のうちの１つからのオーバーフローを検出することに応答して、前記重複削減演算を実行するように構成される、請求項７から１７のいずれか一項に記載の装置。
【請求項１９】
前記処理回路が、変換動作を実行して、前記冗長表現を有する第１のＭビット値を異なる表現の変換値に変換するように構成される、請求項１から１８のいずれか一項に記載の装置。
【請求項２０】
前記変換動作が、重複伝搬演算を実行して、最初のＭビット値の１つまたは複数のＮビット部分の前記重複ビットを前記最初のＭビット値の１つまたは複数の後続のＮビット部分に伝搬して、前記冗長表現を有する前記第１のＭビット値を生成することと、
前記第１のＭビット値を前記変換値に変換することと、
を含む、請求項１９に記載の装置。
【請求項２１】
前記処理回路が、前記アンカー値に依存して、前記第１のＭビット値の各Ｎビット部分を、対応する浮動小数点値にマッピングするように構成される、請求項１９から２０のいずれか一項に記載の装置。
【請求項２２】
前記処理回路が、前記変換された値として、前記第１のＭビット値の各Ｎビット部分からマッピングされた前記それぞれの浮動小数点値を含むベクトルを出力するように構成される、請求項２１に記載の装置。
【請求項２３】
前記処理回路が、前記第１のＭビット値の各Ｎビット部分からマッピングされた前記それぞれの浮動小数点値を加算して、前記変換された値として単一の浮動小数点値を生成するように構成される、請求項２１および２２のいずれか一項に記載の装置。
【請求項２４】
前記第１のＭビット値が３つ以上のＮビット部分を含むとき、前記処理回路が、前記第１のＭビット値の前記最下位Ｎビット部分からマッピングされた前記浮動小数点値で始まり、前記第１のＭビット値の前記最上位Ｎビット部分からマッピングされた前記浮動小数点値で終わる順序で、前記それぞれの浮動小数点値を加算するように構成される、請求項２３に記載の装置。
【請求項２５】
前記変換された値が浮動小数点値であるとき、前記処理回路が、前記第１のＭビット値の少なくとも１つのＮビット部分の非重複ビットの中から選択されたビットの選択されたグループを、ビットの前記選択されたグループよりも下位の前記第１のＭビット値のビットに基づいて、丸めることにより、前記浮動小数点値の仮数部を形成するように構成される、請求項１９から２４のいずれか一項に記載の装置。
【請求項２６】
前記アンカー値がプログラム可能である、請求項１から２５のいずれか一項に記載の装置。
【請求項２７】
前記Ｎビット部分の各々が、Ｎ／２以下の重複ビットを有する、請求項１から２６のいずれか一項に記載の装置。
【請求項２８】
前記重複ビットが符号付き整数値を表す、請求項１から２７のいずれか一項に記載の装置。
【請求項２９】
前記処理回路が、重複サイズ値に基づいて、前記冗長表現の少なくとも１つのＮビット部分のための重複ビットの前記数を識別するように構成される、請求項１から２８のいずれか一項に記載の装置。
【請求項３０】
前記重複サイズ値がプログラム可能である、請求項２９に記載の装置。
【請求項３１】
前記重複サイズ値が制御レジスタ内で指定される、請求項２９および３０のいずれか一項に記載の装置。
【請求項３２】
前記アンカー値が、前記重複サイズ値と同じ前記制御レジスタ内で指定される、請求項３１に記載の装置。
【請求項３３】
前記重複サイズ値が、前記冗長表現を有する少なくとも１つのデータ値を処理するように前記処理回路を制御するためのデータ処理命令によって指定される、請求項３０に記載の装置。
【請求項３４】
前記重複サイズ値が、前記冗長表現の前記Ｎビット部分のうちの２つ以上に対して別々に重複ビットの前記数を指定する、請求項２９から３３のいずれか一項に記載の装置。
【請求項３５】
累積命令に応答して、前記複数の加算回路ユニットが、アキュムレータレジスタに格納されたＭビットアキュムレータ値を含む前記冗長表現を有する前記少なくとも２つのＭビットデータ値のうちの１つとの、前記複数のＮビット加算を実行するように構成され、前記処理回路が、前記アキュムレータレジスタに前記Ｍビット結果値を書き込むように構成される、請求項２に記載の装置。
【請求項３６】
所定のタイプの命令に応答して、各Ｎビット加算が、少なくとも３つのＭビットデータ値の対応するＮビット部分を加算することを含む、請求項２に記載の装置。
【請求項３７】
各加算回路ユニットが、前記少なくとも３つのＭビット値の対応するＮビット部分を結合して、２つのＮビット項を生成するためのウォレスツリーと、前記２つのＮビット項を加算して、前記Ｍビット結果値の前記対応するＮビット部分を生成するための桁上げ伝搬加算器と、を含む、請求項３６に記載の装置。
【請求項３８】
複数の入力データ要素を含む入力ベクトルを識別する所定のタイプの命令に応答して、前記処理回路が、前記入力ベクトルの対応する入力データ要素内で指定されたそれぞれの値に対応する前記少なくとも２つのＭビットデータ値によって、前記Ｎビット演算を実行するように構成される、請求項１から３７のいずれか一項に記載の装置。
【請求項３９】
前記少なくとも２つのＭビットオペランド値が、２つのオペランド値を乗算するための少なくとも１つの乗算命令に応答して、前記処理回路によって生成された複数の部分積を含む、請求項１から３８のいずれか一項に記載の装置。
【請求項４０】
Ｍ＞Ｐ＞Ｎとして、複数のＮビット部分を使用してＰビット数値を表す冗長表現を有するＭビットデータ値を処理するステップを含む、データ処理方法であって、
アンカー値に基づいて前記冗長表現の各Ｎビット部分のビットの有効桁が識別され、少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有し、
前記処理するステップが、複数の独立したＮビット演算を並列に実行するステップを含み、各Ｎビット演算が、前記冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、前記冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む、
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。
【背景技術】
【０００２】
データ処理システムでは、浮動小数点（ＦＰ）表現を使用することが一般的である。浮動小数点数は、仮数部と、仮数部のビットの有効桁を示す指数部とを含む。これにより、有限の数のビットを使用して数値が広範囲にわたって表現されることが可能になる。しかしながら、浮動小数点演算の問題は、計算が一般に非結合的なことである。たとえば、いくつかの浮動小数点値を加算するとき、前回の加算結果に別の値が加算されるたびに、結果は丸められて正規化され、それは、値が加算される順序に応じて全体的な結果が異なることを意味する。正確に同じ順序で完了されない限り合計が再現できないため、これにより、浮動小数点演算を並列化することが困難になる。再現可能な結果を生むためには、一連の加算または減算が通常順番に実行される必要があり、それにより、浮動小数点演算が比較的遅くなる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくとも幾つかの実施例は、Ｍ＞Ｐ＞Ｎとして、複数のＮビット部分を使用してＰビット数値を表す冗長表現を有するＭビットデータ値を処理する処理回路を含む装置であって、
前記処理回路が、アンカー値に基づいて前記冗長表現の各Ｎビット部分のビットの有効桁を識別するように構成され、少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有し、
前記処理回路が、複数の独立したＮビット演算を並列に実行する複数の演算回路ユニットを含み、各Ｎビット演算が、前記冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、前記冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む、
装置を提供する。
【０００４】
少なくとも幾つかの実施例は、Ｍ＞Ｐ＞Ｎとして、複数のＮビット部分を使用してＰビット数値を表す冗長表現を有するＭビットデータ値を処理するステップを含む、データ処理方法であって、
アンカー値に基づいて前記冗長表現の各Ｎビット部分のビットの有効桁が識別され、少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有し、
前記処理するステップが、複数の独立したＮビット演算を並列に実行するステップを含み、各Ｎビット演算が、前記冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、前記冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む、
方法を提供する。
【０００５】
次に、本発明の実施形態が、添付の図面を参照して単なる例として記載される。
【図面の簡単な説明】
【０００６】
【図１】データ処理装置を概略的に示す。
【図２】数値の異なる表現を概略的に示す。
【図３】倍精度浮動小数点値と高精度アンカー（ＨＰＡ）値との間の関係の例を概略的に示す。
【図４】重複する有効桁を有するいくつかのＮビット部分を含む冗長表現を使用して数値を表す冗長ＨＰＡ（ＲＨＰＡ）値の例を示す。
【図５】冗長ＨＰＡ値の各部分の有効桁を定義し、重複ビットの数を定義するためのメタデータの例を示す。
【図６】ＲＨＰＡ表現を使用する累積演算の例を示す。
【図７】１回の演算で３つ以上のＲＨＰＡ値を加算する例を示す。
【図８】１回の演算で加算される各ＲＨＰＡ値が入力ベクトルの対応する要素から変換される例を示す。
【図９】ＲＨＰＡ表現を使用して値を累積する方法を示す。
【図１０】浮動小数点値をＲＨＰＡ値に変換する例を示す。
【図１１】浮動小数点値をＲＨＰＡ値に変換する例を示す。
【図１２】非冗長形式でＲＨＰＡ値を生成するための重複伝搬演算の第１の例を示す。
【図１３】制限付き冗長形式でＲＨＰＡ値を生成するための重複伝搬演算の第２の例を示す。
【図１４】制限付き冗長ＲＨＰＡ値を非冗長ＲＨＰＡ値に変換する例を示す。
【図１５】ＲＨＰＡアキュムレータからの重複ビットを重複アキュムレータ値に加算する重複累積演算の例を示す。
【図１６】浮動小数点値から変換された変換ＲＨＰＡ値を制限付き冗長ＲＨＰＡアキュムレータに加算し、同時に、更新されたＲＨＰＡアキュムレータを制限付き冗長形式で保持するために重複伝搬を実行する例を示す。
【図１７】非冗長形式のＲＨＰＡ値を浮動小数点値に変換する例を示す。
【図１８】制限付き冗長形式のＲＨＰＡ値を浮動小数点値に変換する例を示す。
【図１９】ＲＨＰＡ値を浮動小数点値に変換する第３の例を示す。
【図２０】ＲＨＰＡ値の加算を使用して２つのオペランド値の乗算の部分積を加算する例を示す。
【図２１】対応する結果値内のそのレーンによって、生成されるべき結果要素の相対位置に基づく処理の各レーンを制御する、レーン位置情報の使用例を示す。
【図２２】結果ベクトルの長さよりも幅が広いかまたは狭い結果値の生成を制御するためにレーン位置情報を使用する、いくつかの例を示す。
【図２３】処理のレーンごとのアンカー値、重複ビットの数、およびレーン位置情報を指定するメタデータレジスタの例を示す。
【図２４】単一のベクトル内の独立した結果値に対応する処理のレーンの異なるサブセットにより、入力ベクトルのどの要素が処理されるべきかを識別するために入力マップ情報を使用する例を示す。
【図２５】ＲＨＰＡ値の異なるＮビット部分が異なる数の重複ビットを有する例を示す。
【図２６】整数のそれぞれの部分の部分積を加算するためにＲＨＰＡ形式を使用して２つの長整数を乗算する例を示す。
【図２７】一連のパイプライン化部分積累積演算を使用して、２つの長整数の積がどのように計算され得るかの例を示すタイミング図。
【図２８】最終乗算結果を非冗長形式に変換するためのいくつかの重複伝搬加算が、部分積を累積するための加算のいくつかと並行してどのように実行され得るかの例を示す別のタイミング図。
【図２９】長整数オペランドを浮動小数点値のベクトルにマッピングする例を示す。
【図３０】浮動小数点乗算器を使用して入力オペランドの部分のそれぞれのペアの部分積を決定する例を示す。
【図３１】正の浮動小数点値をＲＨＰＡ形式に変換する数値例を示す。
【図３２】負の浮動小数点値をＲＨＰＡ形式に変換する数値例を示す。
【図３３】２つのＲＨＰＡオペランドの加算中のレーンオーバーフローの例を示す。
【図３４】ＲＨＰＡ値からのレーンオーバーフローを除去する例を示す。
【図３５】ＲＨＰＡ値を非冗長形式に変換する例を示す。
【図３６】図１６に示された演算が制限付き冗長形式の結果をもたらす理由の説明を提供する。
【図３７】図１６に示された演算が制限付き冗長形式の結果をもたらす理由の説明を提供する。
【図３８】図１６に示された演算が制限付き冗長形式の結果をもたらす理由の説明を提供する。
【図３９】図１６に示された演算が制限付き冗長形式の結果をもたらす理由の説明を提供する。
【発明を実施するための形態】
【０００７】
いくつかの具体例が下記に記載される。本技法はこれらの例に限定されないことが諒解されよう。
【０００８】
高精度アンカー（ＨＰＡ）形式が下記に説明される。ＨＰＡ形式に関するさらなる情報は、米国特許出願第６２／０７４，１４９号、第１４／５８２，９７４号、第１４／５８２，８７５号、第１４／５８２，８１２号、第１４／５８２，８３６号、第１４／５８２，９７８号、第１４／６０６，５１０号、および第１４／５８２，９６８号において見つけることができ、それらの内容は、参照によりその全体が本明細書に組み込まれる。
【０００９】
浮動小数点数
浮動小数（ＦＰ）は、少数のビットを使用して実数を近似する有用な方法である。ＩＥＥＥ７５４−２００８のＦＰ規格はＦＰ数用の複数の異なるフォーマットを処理し、それらのうちのいくつかは、（倍精度またはＤＰとしても知られている）バイナリ６４、（単精度またはＳＰしても知られている）バイナリ３２、および（半精度またはＨＰとしても知られている）バイナリ１６である。数字６４、３２、および１６は、各フォーマットに必要なビット数を指す。
【００１０】
表現
ＦＰ数は、科学の授業で教えられる「科学的表記法」と非常に類似しており、ここでは、マイナス２００万の代わりに−２．０×１０６と書く。この数字の部分は、符号（この場合は負）、仮数部（２．０）、指数部の基数（１０）、および指数部（６）である。これらの部分のすべてはＦＰ数における相似形をもっており、違いはあるが、その最も重要なことは、構成部分が２進数で格納され、指数部の基数が常に２であるということである。
【００１１】
より正確には、ＦＰ数は、符号ビット、いくつかの数のバイアスされた指数ビット、およびいくつかの数の小数ビットから構成される。特に、ＤＰ、ＳＰ、およびＨＰのフォーマットは、以下のビットから構成される。
【表１】
2019500672.tif 000003
【００１２】
符号は、負数の場合１、正数の場合０である。ゼロを含むあらゆる数は符号をもつ。
【００１３】
指数はバイアスされており、それは、真の指数が数に格納されている指数と異なることを意味する。たとえば、バイアスされたＳＰの指数は８ビット長であり、０から２５５の範囲である。指数０および２５５は特殊なケースであるが、すべての他の指数はバイアス１２７をもち、真の指数はバイアスされた指数よりも１２７小さいことを意味する。最小のバイアスされた指数は１であり、これは真の指数−１２６に相当する。最大のバイアスされた指数は２５４であり、これは真の指数１２７に相当する。ＨＰおよびＤＰの指数は同じように機能し、バイアスは上記の表に示されている。
【００１４】
ＳＰの指数２５５（またはＤＰの指数２０４７またはＨＰの指数３１）は、ＮａＮ（数ではない）と呼ばれる無限大および特殊記号のために予約されている。（正または負であり得る）無限大はゼロの小数をもつ。指数２５５および非ゼロの小数を有するいかなる数もＮａＮである。無限大は飽和値を提供するので、実際には「この計算ではこのフォーマットで表現できる数値よりも大きな数が得られる」ようなことを意味する。ＮａＮは、実数で数学的に定義されていない演算、たとえば、ゼロによる除算または負の数の平方根を取ることに対して返される。
【００１５】
指数ゼロは、任意のフォーマットで、非正規数およびゼロのために予約されている。通常の数は値：
−１ｓｉｇｎ×１．ｆｒａｃｔｉｏｎ×２ｅ
を表し、ここで、ｅはバイアスされた指数から計算された真の指数である。１．ｆｒａｃｔｉｏｎという用語は仮数と呼ばれ、１はＦＰ数の一部として格納されず、代わりに指数から推論される。ゼロおよび最大指数を除くすべての指数は、１．ｆｒａｃｔｉｏｎの形式の仮数を示す。指数ゼロは、０．ｆｒａｃｔｉｏｎという形式の仮数、および所与のフォーマットの１−ｂｉａｓに等しい真の指数を示す。そのような数は非正規（ｓｕｂｎｏｒｍａｌ）と呼ばれる（歴史的にこれらの数は非正規（ｄｅｎｏｒｍａｌ）と呼ばれていたが、現代の使用法では非正規（ｓｕｂｎｏｒｍａｌ）という用語が好まれる）。
【００１６】
指数と小数の両方がゼロに等しい数はゼロである。
【００１７】
以下の表は、ＨＰ形式のいくつかの例示的な数を有する。エントリは２進数であり、読みやすくするために「＿」文字が追加されている。非正規エントリ（指数部がゼロである表の４行目）は、前の行の正規エントリとは異なる仮数部を生成することに留意されたい。
【表２】
2019500672.tif 000004
【００１８】
ＦＰ実装の複雑さの大部分は非正規に起因し、したがって、それらはしばしばマイクロコードまたはソフトウェアによって処理される。一部のプロセッサはハードウェア内で非正規を処理し、ソフトウェアまたはマイクロコードの実装と比較して、１０〜１００倍これらの演算を高速化する。
【００１９】
整数、固定小数点、浮動小数点
符号を扱うＦＰの方法は符号絶対値と呼ばれ、それは、整数がコンピュータに格納される通常の方法（２の補数）とは異なる。符号絶対値表現では、同じ数の正と負のバージョンは符号ビットでのみ異なる。符号ビットおよび３つの仮数部ビットから構成される４ビットの符号絶対値整数は、
＋１＝０００１
−１＝１００１
として、プラス１およびマイナス１を表す。
【００２０】
２の補数表現では、ｎビット整数ｉは、２進数のｎ＋１ビットの値２ｎ＋ｉの下位ｎビットによって表されるので、４ビットの２の補数整数は、
＋１＝０００１
−１＝１１１１
として、プラス１およびマイナス１を表す。
【００２１】
２の補数形式は、コンピュータ演算を簡略化するので、符号付き整数にとって事実上汎用的である。
【００２２】
固定小数点数は整数と全く同じようであるが、実際には特定の数の小数ビットをもつ値を表す。センサデータはしばしば固定小数点形式であり、ＦＰが広く採用される前に書かれた多くの固定小数点ソフトウェアが存在する。固定小数点数は、プログラマが「２進小数点」、すなわち数の整数部分と小数部分との間のセパレータを記録しなければならず、また正しい場所にビットを保持するために数を常にシフトしなければならないので、作業が非常に面倒である。ＦＰ数はこのような難点をもたず、したがって、固定小数点数とＦＰ数との間を変換できることが望ましい。変換を行うことができるということは、固定小数点のソフトウェアおよびデータをまだ使用できることも意味するが、新しいソフトウェアを書くときは固定小数点に限定されない。
【００２３】
ＦＰ数の丸め
ほとんどのＦＰ演算は、ＩＥＥＥ−７５４規格では、演算が非有界な範囲と精度で行われたかのように計算され、次いで、ＦＰ数に収まるように丸められる必要がある。計算がＦＰ数と正確に一致する場合、その値は常に返されるが、通常、計算は２つの連続する浮動小数点数の間にある値をもたらす。丸めは、２つの連続する数のうちのどれを返すべきかを選択するプロセスである。
【００２４】
丸めモードと呼ばれる丸めの方法はいくつかあり、これらのうちの６つは以下の通りである。
【表３】
2019500672.tif 000005
【００２５】
この定義は、任意の実際的な方法においてどのように丸めるかを教えない。１つの一般的な実装は、演算を行い、切り捨てられる値（すなわち、ＦＰ形式に収まる値）ならびに残りのビットのすべてを調べ、次いで、特定の条件が成立した場合に切り捨てられる値を調整することである。これらの計算はすべて
Ｌ−（最小）切り捨てられる値の最下位ビット
Ｇ−（ガード）次の最上位ビット（すなわち、切捨てに含まれない最初のビット）
Ｓ−（スティッキー）切捨ての一部ではないすべての残りのビットの論理和
に基づく。
【００２６】
これらの３つの値および切り捨てられる値が与えられると、以下の表に従って、正しく丸められた値を常に計算することができる。
【表４】
2019500672.tif 000006
【００２７】
たとえば、２つの４ビット仮数部を乗算し、次いで、４ビット仮数部に丸めることを考えよう。
ｓｉｇ１＝１０１１（１０進数１１）
ｓｉｇ２＝０１１１（１０進数７）
乗算は
【数１】
2019500672.tif 000007
をもたらす。
【００２８】
切り捨てられた４ビットの結果の最下位ビットはＬとラベル付けされ、次のビットはＧとラベル付けされ、Ｓはｓとラベル付けされた残りのビットの論理和（すなわち、Ｓ＝０｜１＝１）である。丸めるために、丸めモードおよび上記の表の計算に従って、４ビットの結果（１００１）を調整する。そのため、たとえば、ＲＮＡ丸めでは、Ｇは１００１＋１＝１０１０を返すように設定される。ＲＸ丸めの場合Ｇ｜Ｓは真なので、Ｌを１に設定し（それはすでに１なので、この場合何も変わらない）、１００１を返す。
【００２９】
整数および固定小数点数の丸め
ＦＰ数を整数または固定小数点に変換する場合も丸める。概念は基本的にＦＰの丸めと同じである。たまたま整数であるＦＰ数は、常にその整数に丸められる。すべての他のＦＰ数は２つの連続する整数の間にあり、丸めにより、どの整数が返されるが規定される。残念ながら、整数用の丸めロジックは、２の補数と符号絶対値形式との間の差異のために、やや難しくなる。符号絶対値数を増分すると、常に大きさが増加するので、増分された数はゼロからさらに離れる。正の２の補数についても同じことが起こるが、負の２の補数は増分されるとゼロに近くなる。これは、整数が正か負かに基づいて丸めロジックが変わる必要があることを意味する。それはまた、基数値（増分されるかされない値）を慎重に選択する必要があることも意味する。正の整数の場合、その値は、ちょうど切り捨てられたＦＰの仮数部なので、１．３７は１の基数値、および１または２のいずれかの結果を有する。負の整数の場合、再び仮数部を切り捨て、結果の１の補数を取り（１の補数はすべてのビットが反転した元の数である）、−１．３７は１に切り捨てられ、次いで反転されて−２の基数値が与えられる。次いで、結果を−２または（増分のとき）−１のいずれかにしたいので、すべてがうまくいく。
【００３０】
事をさらに複雑にするために、我々の変換方法は、負の整数の場合、Ｌ、Ｇ、およびＳを見つけるために何らかの計算を必要とする。正しく丸めることは、２の補数処理（反転および１の加算）を完了し、次いで、Ｌ、Ｇ、およびＳを計算することを必要とするが、その１を加算することは反転だけに比べて遅い。理想的には、元のシフトされた入力から（すなわち、符号に関する何かを行う前に入力から、実際のＬ、Ｇ、およびＳを計算したい。そのため、浮動小数点１．３７または−１．３７は、両方とも整数１に右シフトされる）。
【００３１】
反転の前にＬ０、Ｇ０、およびＳ０を最下位ビット（ｌｓｂ）、ガード、およびスティッキーとし、反転の後にＬｉ、Ｇｉ、およびＳｉをｌｓｂ、ガード、およびスティッキーとし、最後に、反転および１の加算の後にＬ、Ｇ、およびＳをｌｓｂ、ガード、およびスティッキーとする。
【００３２】
Ｓ０がゼロである場合、Ｓｉに寄与するビットはすべて１であり、したがって（それらのＳｉビットに１を加算して得られた）Ｓもゼロである。Ｓ０が非ゼロである場合、Ｓｉはすべてが１ではなく、したがってＳは非ゼロである。そのため、すべての場合Ｓ０＝Ｓである。
【００３３】
Ｇ０がゼロである場合、Ｇｉは１であり、ＧもＳビットからの桁上げインがある場合を除いて１であり、それはＳ０がゼロであるときにのみ起こる。Ｇ０が１である場合、Ｇｉはゼロであり、またＧもＳビットからの桁上げインがある場合を除いて１であり、それはＳ０がゼロであるときにのみ起こる。そのため、Ｇ＝Ｇ０＾Ｓ０である。
【００３４】
非常に類似するロジックにより、Ｌ＝Ｌ０＾（Ｇ０｜Ｓ０）である。
【００３５】
今や負の整数と正の整数の両方の場合にＬ、Ｇ、およびＳをもつので、丸め規則を考え出すことができる。
【表５】
2019500672.tif 000008
【００３６】
固定小数点数は、整数と全く同じ方法で丸められる。（整数または固定小数点への）符号なし変換用の規則は、正の変換用の規則と同じである。
【００３７】
注入丸め
丸めを行うより速い方法は、ほぼすべてのＦＰ演算の一部である仮数部加算の一部として丸め定数を注入することである。これがどのように機能するかを見るには、ドルおよびセントで数を加算し、次いでドルに丸めることを考えられたい。加算した場合
【数２】
2019500672.tif 000009
【００３８】
合計３．６２ドルは３ドルよりも４ドルに近いので、最近接丸めモードのいずれかは４ドルを返すはずである。２進数で数を表した場合、前のセクションからのＬ、Ｇ、Ｓ方法を使用して同じ結果を実現することができる。しかし、ちょうど５０セントを加算し、次いで結果を切り捨てたと仮定する。
【数３】
2019500672.tif 000010
【００３９】
合計（４．１２ドル）から金額（４ドル）をちょうど返した場合、ＲＮＡ丸めモードを使用して正しく丸めた。０．５０ドルではなく０．９９ドルを加算した場合、ＲＰ丸めを使用して正しく丸めるはずである。ＲＮＥはもう少し複雑である：０．５０ドルを加算し、切り捨て、次いで残りのセントを見る。残りのセントが非ゼロである場合、切り捨てられた結果は正しい。ゼロセントが残っている場合、注入前に２ドルの金額間に正確に入っていたので、同一ドルの金額を選択する。バイナリＦＰの場合、これはドル金額の最下位ビットをゼロに設定することになる。
【００４０】
３つの数を加算することは２つの数を加算することよりもわずかに遅いだけなので、２つの仮数部を加算し、Ｌ、Ｇ、およびＳを調べ、次いで丸めモードに従って結果を増分した場合よりも、注入丸めを使用してよりいっそう迅速に丸め結果を得る。
【００４１】
注入丸めの実装
ＦＰの場合、丸め注入は３つの異なる値、丸めモードおよび（時々）結果の符号に依存する値のうちの１つである。
【００４２】
ＲＮＡとＲＮＥの両方は、Ｇの位置に１を注入することを必要とする（これはドルおよびセントの例において０．５０ドルを加算するようなものである）。
【００４３】
ＲＰおよびＲＭの丸めは、符号ならびにモードに依存する。ＲＰは正の結果を切り上げる（正の無限大に向かって仮数部の大きさを増加させる）が、負の結果を切り捨てる（正の無限大に近い仮数部を選択する）。同様に、ＲＭは負の結果を切り上げる（負の無限大に向かって仮数部の大きさを増加させる）が、正の結果を切り捨てる（負の無限大に近い仮数部を選択する）。したがって、符号が丸め方向に一致するときは切り上げる（ＲＵ）、符号が丸め方向と異なるときは切り捨てる（ＲＺ）という２つのケースにＲＭおよびＲＰを分割する。ＲＵの場合、Ｇビット位置に、およびＳに論理的に寄与するすべての位置に１を注入する（これは、ドルおよびセントの例において０．９９ドルを加算するようなものである）。
【００４４】
ＲＺモードおよびＲＸモードの場合、ならびにＲＺモードに帰着するＲＰモードおよびＲＭモードの場合、ゼロを注入する。
【００４５】
ほとんどの丸めモードの場合、丸め注入を加算し、次いで切り捨てると、正しく丸められた結果が与えられる。２つの例外はＲＮＥおよびＲＸであり、これにより、加算後にＧおよびＳを調べる必要がある。ＲＮＥの場合、ＧおよびＳが両方ともゼロである場合、Ｌを０に設定する。ＲＸの場合、ＧまたはＳが非ゼロである場合、Ｌを１に設定する。
【００４６】
ＦＰ数は実数ではない
ＦＰ数は実数同然であると考えたくなるが、それらは、最も基本的な特性についても基本的に異なる。
【００４７】
それらは結合的ではない。たとえば、ＳＰでは３つの数を加算し、１００万または０を返し、おそらく人々が丸め誤差と考えるものではない。
（２４５  ＋  −２４５）  ＋  ２２０  ＝  ２２０
２４５  ＋  （−２４５  ＋  ２２０）  ＝  ０
【００４８】
それらは分配法に従わない。再びＳＰでは、
３，０００，００１×（４．００００１＋５．００００１）＝０ｘ４ｂｃｄｆｅ８３
（３，０００，００１×４．００００１）＋（３，０００，００１×５．００００１）＝０ｘ４ｂｃｄｆｅ８２
であり、オーバーフローが発生すると状況はさらに悪化する。
２５０  ×  （２７８  −  ２７７）  ＝  ２１２７
（２５０  ×  ２７８）  −  （２５０  ×  ２７７）  ＝  無限大
【００４９】
いくつかの実装形態の場合、一般に、ｎａｎＡ＋ｎａｎＢ！＝ｎａｎＢ＋ｎａｎＡなので、デフォルトのＮａＮモード（すべてのＮａＮを単一のＮａＮに変換するモード）でない限り、それらは可換でさえない。数の加算および乗算は可換である。
【００５０】
ＩＥＥＥのＮａＮ規則のために、乗法単位元または加法単位元は存在しない。１および０は数値用の単位元として機能する。
【００５１】
ＦＰ数のことを考える１つの有用な方法は、それらを多くても２、３（ＤＰの場合は５３）の連続ビットが非ゼロであり得る超長固定小数点数であると考えることである。たとえば、無限でないＤＰ数は、２０４６箇所のいずれかに仮数部の最初のビットをもつことができ、その最初のビットに５２個の他の仮数部ビットが続き、符号ビットがあるので、いかなる有限のＤＰ数も、２０４６＋５２＋１＝２０９９ビットの固定小数点数として表すことができる。このように検討すると、２つのＦＰ数を加算すると、一般に、別のＦＰ数をもたらさないことが非常に明白になり、加算の結果は、ＦＰ数になるように丸められる必要がある。
【００５２】
浮動小数点（ＦＰ）演算に関する既知の問題は、それが非結合的であることであり、合計が問題になるという事実である。
・プログラマは、３つの数を加算するときでも、大きく異なる結果について心配する必要がある。
・プログラマは、大きく異なる結果を回避することを希望して、必要以上に広いフォーマットを使用する。
・プログラマは、正確に同じ順序で計算されない限り合計が再現できないので、コードを簡単に並列化することができない。
【００５３】
たとえば、単精度では、
２２０  ＋  （−２４４  ＋  ２４４）  ＝  ２２０
であるが、
（２２０  ＋  −２４４）  ＋  ２４４  ＝  ０
である。
【００５４】
演算が実行される順序に応じて、結果は１００万またはゼロである。指数部が２４異なるので、これは極端な例であるが、指数部が１異なる場合、または指数部がすべて同じであり、４つ以上のものを加算している場合でも、異なる答えを得る可能性がある。Ｃプログラミング言語は、順番に左から右に評価されるべき合計を要求することによって再現性問題に対処するが、これは正確さについては何もせず、並列化を不可能にする。
【００５５】
問題は、プログラムが何百万のものを加算する必要があり得る、高性能コンピューティング（ＨＰＣ）にとって特に深刻である。プログラマは、これらの問題を並列化したいが、再現性の欠如は、デバッグを通常よりもさらに困難にする。それらのマシン用のリプログラミングが完全に行われた場合でも、異なるマシン構成は異なる答えを生み出す。
【００５６】
ＨＰＡ表現
プログラマが選択可能な範囲で浮動小数点（ＦＰ）数を迅速かつ正確に累積することを可能にする新しいデータ型が開示されている。ほとんどの問題に対応する控えめな範囲の場合、累積は、ＦＰの加算よりも速く、結合的である。結合加算は、さらに再現可能で正しい結果を与えながら問題を並列化することを可能にし、たとえば、既存のハードウェアと比較して１００倍以上の高速化を可能にする。これらの利点は、高性能コンピューティング（ＨＰＣ）空間では非常に魅力的であり、多くの非ＨＰＣアプリケーションにとって魅力があるものとなるであろう。
【００５７】
図１は、プログラム命令の制御下でデータ処理動作を実行するためのデータ処理装置２を概略的に示す。データ処理装置２は、処理されるべきプログラム命令６およびデータ８を記憶するメモリ４を含む。プロセッサコア１０は、メモリ４に結合され、レジスタバンク１２、処理回路１４、命令フェッチユニット１６、命令パイプラインユニット１８、および命令デコーダ２０を含む。実際には、データ処理システム２は多くのさらなる要素を含む場合があり、図１の表現は理解を助けるために簡略化されていることが諒解されよう。動作中、プログラム命令６は、命令フェッチユニット１６によってメモリ４からフェッチされ、命令パイプライン１８に供給される。プログラム命令が命令パイプライン１８内の適切な段階に達すると、それらは命令デコーダ２０によって復号され、復号されたプログラム命令によって指定された処理動作を実行するように、レジスタバンク１２および処理回路１４の動作を制御する働きをする制御信号を生成する。複数の入力オペランドは、レジスタバンク１２から読み出され、処理回路１４に供給され、そこで操作され、次いで、結果値がレジスタバンク１２に書き戻される。
【００５８】
レジスタバンク１２は、様々な異なる形態を有することができる。操作されるべきオペランドには、たとえば、浮動小数点オペランド、固定小数点オペランド、整数オペランド、および（後述されるような）ＨＰＡ数オペランドまたはＲＨＰＡ数オペランドが含まれる場合がある。レジスタバンク１２は、レジスタバンク１２の構成に応じて、これらのタイプのオペランドの混合物を格納するように働くことができる。オペランドは、それらのフォーマットによってあらかじめ定義されているように、またはＨＰＡ数オペランドに関して後述されるレジスタに関連付けられたメタデータを使用してプログラム可能に指定され得るように、異なる精度レベルを有することができる。
【００５９】
図１に示されたように、レジスタバンク１２は、レジスタバンク１２の対応するデータレジスタに格納されたＨＰＡ値またはＲＨＰＡ値に関連付けられたメタデータを指定するためのメタデータレジスタ２２を含む場合がある（メタデータの内容の例が下記に示される）。場合によっては、各データレジスタは対応するメタデータレジスタ２２を有する場合があるが、他の場合には、２つ以上のデータレジスタは単一のメタデータレジスタ２２によって指定されるメタデータを共有する場合がある。
【００６０】
図２は、浮動小数点オペランドを概略的に示す。浮動小数点オペランドは、符号、指数部、および仮数部から形成される。浮動小数点オペランドは、指数値によって示される多種多様な大きさを有する値を表すことができる。数を表現できる精度は、仮数部のサイズによって制限される。浮動小数点演算は、通常、整数演算よりも実施することが複雑で遅い。
【００６１】
図２は、６４ビット整数オペランドも示す。そのような整数オペランドは、符号なし整数の場合０〜（２６４−１）、または符号付き整数の場合−２６３〜２６３−１の範囲の数を表すことができる。整数演算は、（浮動小数点演算と比較して）通常高速であり、実行するために消費するエネルギーが比較的少ないが、浮動小数点値によって表され得る数の範囲と比較して、数の指定され得る値の範囲が比較的限定されるという欠点がある。
【００６２】
図２はまた、この例では、各々が６４ビット整数を含む複数の成分（この例では３つ）のベクトルを含むＨＰＡ（高精度アンカー）数も示す。ＨＰＡ数は、それに関連付けられたメタデータを有する。メタデータは、ＨＰＡ数の一部を形成する成分のビットの有効桁を示すアンカー値を含む。アンカー値は、直接的または間接的に、ビットの有効桁の下方境界およびビットの有効桁の上方境界を指定する。下記で使用されるメタデータという用語は、ＨＰＡ数のビットの有効桁を指定するアンカー値を含むデータに相当すると考えることができる。様々な成分は、ビットの有効桁のこの範囲を連続してまたがるビット値を一緒に指定する。ビットの有効桁の下方境界およびビットの有効桁の上方境界の位置に応じて、ビットの有効桁の範囲は２進小数点位置を含む場合がある。２進小数点位置が、特定のＨＰＡ値に対して指定されたビットの有効桁の範囲外にあり得ることも可能である。
【００６３】
アンカー値は、浮動小数点値（たとえば、倍精度ＦＰ値）によって表され得る最小の有効桁から、浮動小数点値によって表され得る最大のビットの有効桁まで広がるビットの有効桁の範囲を表すことが可能なように提供される場合がある。
【００６４】
ＨＰＡ数を形成する成分の数は、様々な実装の間で異なる可能性がある。成分のサイズは、いくつかの実施形態では固定されてもよいが、他の実施形態では変わってもよい。ビットの有効桁の範囲の全体的な幅は、いくつかの実施形態では、固定成分のサイズの単位で変わるように強制される場合がある（たとえば、６４ビット成分では、ビットの有効桁の範囲は、たとえば、６４、１２８、１９２、２５６、…の幅を有してもよい）。ビットの有効桁の範囲の幅は、１ビット幅のステップで連続的に変わることも可能である。
【００６５】
プログラマが対応するＨＰＡ値の有効桁を設定することができるように、（メタデータ内の）アンカー値はプログラム可能であり得る。アンカー値は、様々な異なる方法でビットの有効桁を指定することができる。１つの例は、各ベクトル成分のビットの有効桁の下方境界を指定することである。したがって、各ベクトル成分は、その成分内の最下位ビットの有効桁を表す（固定する）メタデータとともに、ビットの有効桁の全範囲内の値の有効ビットのその部分を表す整数値を含む場合がある。別の選択肢は、アンカー値が、ビットの有効桁の範囲の全幅とともに、ＨＰＡ数全体のビットの有効桁の下方境界を指定することである。さらなる選択肢は、アンカー値が、ビットの有効桁の範囲の下方境界および上方境界を指定するデータを含んでもよいことである。それらの成分が固定幅成分であることが知られている成分の数とともに、ビットの有効桁の範囲の下方境界を含むアンカー値などの、またさらなる変形形態も可能である。
【００６６】
図３は、倍精度浮動小数点で表現可能な値の範囲と、ＨＰＡ数の有効桁範囲との間の関係を概略的に示す。倍精度浮動小数点数の場合、指定され得るビット値の範囲は、おおよそ２−１０７４から２＋１０２３（非正規を数えない）まで広がる。
【００６７】
図示されたように、ＨＰＡ数は、浮動小数点値を使用して表現可能なビットの有効桁の範囲内のビットの有効桁のウィンドウとして考えられ得るプログラム可能なビットの有効桁の範囲を有する。このプログラム可能なビットの有効桁は、下方境界および上方境界によって指定される場合があり、下方境界および上方境界の値に応じて、浮動小数点値によって提供されるビットの有効桁の範囲に沿ってスライドすると考えることができる。ウィンドウの幅、ならびにその開始点および終了点は、ビットの有効桁を指定するプログラム可能な（アンカー値を含む）メタデータの適切な値によって指定される場合がある。したがって、ＨＰＡ数は、実行されるべき計算に適合するようにプログラマによって選択された形式を有することができる。
【００６８】
ＨＰＡ形式により、２つ以上の値の加算を迅速、正確、かつ結合的に実行することが可能になるが、さらに広範な有効桁にわたる値を表すことが可能になる。ＨＰＡ値は単に２の補数なので、整数加算器を使用して加算することができ、浮動小数点演算のように丸めまたは正規化を行う必要がなく、値が加算される順序にかかわらず結果は同じになるので、一連の加算を並列化することが可能になる。それにもかかわらず、ＨＰＡ値のプログラム可能な有効桁を指定するメタデータを定義することにより、等価な浮動小数点値の有効桁の全範囲をさらに表すことができるが、非常に広い加算器を設ける必要はなく（たとえば、倍精度浮動小数点値によって表現可能な全範囲にわたって２の補数を加算するためには、２０９８ビットの加算器を必要とする）、その代わり、プログラム可能な有効桁により、より小さい加算器がより広い範囲内のプログラム可能なビットの有効桁の特定のウィンドウに集中することが可能になる。実際には、大部分の計算は、倍精度浮動小数点に利用可能な有効桁の全範囲を必要としない。たとえば、原子より小さい問題は非常に小さい値を累積し、天体の複雑さは非常に大きな値を累積するかもしれないが、銀河間の距離に陽子の幅を加算することは、一般に有用ではない。高性能コンピューティングでの場合でも、ほとんどの累積は限られた範囲にわたって行われる。
【００６９】
通常、プログラムを書くプログラマは、（アプリケーションに応じて）有用な結果が収まる可能性がある値の予想範囲を知る。プログラマは、特定の合計についてのデータのすべてが２６０未満の大きさをもち、２−５０を下回る大きさをもつ値がいかなる意味のある方法でも合計に影響を与えないと判断するかもしれないので、この場合、１２８ビットのデータ幅全体および最下位ビットの有効桁を−５０と指定するアンカー値を有するＨＰＡ形式使用してデータを加算することにより、この特定の適用例についての数は任意の順序で結合的に加算することができる。
【００７０】
したがって、アンカー値を使用して結果が計算される有効範囲を制限することにより、プログラム可能に定義されたウィンドウ内の結果を計算するために、比較的小さなハードウェアを使用することができる。加算結果が、定義された範囲の有効桁の上方境界を超えるオーバーフローまたは有効桁の下方境界を下回るアンダーフローをもたらした場合、例外が発生する可能性があり、これにより、プログラマが誤った有効桁の境界を定義したこと、および結果についての有効桁の異なるウィンドウを定義するために、異なるメタデータ（たとえば、異なるアンカー値またはＨＰＡ値の異なる全体サイズ）で処理を繰り返す必要があることが通知される可能性がある。
【００７１】
２つのＨＰＡ値を加算または減算するとき、アンカー値は両方のＨＰＡ値で同じであり、結果も同じアンカー値を有する−これは浮動小数点演算とは異なり、浮動小数点演算では、２つの値を加算または減算すると、結果の正規化に起因して、いずれかの入力に異なる指数部を有する結果をもたらす可能性がある。入力が異なるアンカーメタデータを提供された場合、それらは、結果に必要な目標有効桁範囲とそれら自体を整合するようにシフトされる。入力がＨＰＡ以外の表現（たとえば、整数または浮動小数点）で提供された場合、それらは、同じアンカー値を共有するＨＰＡ値に変換され、加算されて、同じアンカー値を有する結果を形成する。したがって、ＨＰＡレジスタ用のメタデータは、そのレジスタ内で生成されるべき結果値についての有効桁の目標範囲を定義するものと見なすことができ、有効桁の目標範囲外のビットは、入力値の実際の有効桁にかかわらずハードウェアによって計算されない。
【００７２】
ＲＨＰＡ表現
ＨＰＡ形式は浮動小数点に比べてはるかに高速な加算を可能にするが、ＨＰＡ値のサイズが比較的大きくなると、整数演算を伴う２つのＨＰＡ値の加算は依然として比較的遅い場合がある。たとえば、ＨＰＡ形式は、複数のレーンにまたがるオペランドの加算を必要とする場合があり、それは、より大きなベクトルの実装では望ましくない場合がある。たとえば、２つの２５６ビットまたは５１２ビットの値の加算は、次のレーンに入力される１つのレーンからの桁上げを収容するために、加算の各６４ビットのレーンが順次実行される場合があるので、ある程度時間がかかる可能性がある。
【００７３】
この加算は、図４に示された冗長高精度アンカー（ＲＨＰＡ）形式を使用することによって高速に実行することができる。ＨＰＡ形式におけるように、ＲＨＰＡ数は、処理回路１４が各成分のビットの有効桁を識別することを可能にするアンカー値を定義するメタデータを有する可変数の成分を含む。ここでも、アンカー値はプログラム可能であってもよい。ＲＨＰＡの場合、メタデータは、ＨＰＡについて上述されたいずれかの方法で各成分の有効桁を識別することができる。しかしながら、ＲＨＰＡ形式では、数値は、ベクトルの隣接するレーンが重複する有効桁のビットを含む冗長表現を使用して表され、それにより、計算されるレーンの数にかかわらず一定時間の加算が可能になる。冗長性により、加算、累算、および乗算などの演算が、より短い加算器で、加算器間で桁上げ情報を伝搬することなく実行されることが可能になる。これにより、データ値の処理が大幅に高速化される。
【００７４】
図４のパート（１）に示されたように、ＲＨＰＡ表現を使用するＭビットのデータ値は、各々がＮビットを含むそれぞれの（成分、要素、または部分とも呼ばれる）ベクトルレーンに分割され、ここで、Ｎ＜Ｍである。この例では、Ｎは６４ビットであるが、これは一例にすぎず、他のレーンサイズ（たとえば、３２ビットまたは１２８ビット）も可能である。各Ｎビット部分は、ある数Ｖの重複ビットおよびＮ−Ｖの非重複ビットに分割される。この例では、重複ビットＶの数は各Ｎビット部分に対して同じであるが、下記の図２５に示されたように、異なる数の重複ビットをもつ異なるＮビット部分を有することも可能である。
【００７５】
整数または浮動小数点数がＲＨＰＡ形式に変換されると、非重複ビットの一部は、元の整数または浮動小数点数からマッピングされた非符号情報が格納され、重複ビットは符号ビットが格納される。レーンベースの加算および減算の目的のために、各レーンは（必要な場合非重複部分から重複部分に伝搬する桁上げを有する）Ｎビットの符号付き２の補数のように挙動するが、マルチレーンの観点から見ると、レーンは、より大きなＰビット数の冗長混合符号表現を形成する。図４の例では、４つのレーンがあるのでＭ＝２５６であるが、レーンの数は、ハードウェア実装および／または所与のＲＨＰＡ数に対して定義されたメタデータに応じて変わる可能性がある。
【００７６】
図４のパート（２）は、パート（１）に示されたＲＨＰＡ数の各ビットの相対的な有効桁を示す。最下位レーンの重複ビットＶ［０］は、次のレーンの非重複ビットＮＶ［１］のＶの最下位ビットと同じ有効桁を有する。同様に、重複ビットＶ［１］およびＶ［２］は、それぞれ、非重複ビットＮＶ［２］およびＮＶ［３］のＶの最下位ビットと同じ有効桁を有する。レーン間の有効桁における重複は、ＲＨＰＡ数が全体として、格納されたビットの総数Ｍよりも小さいＰビット値を表すことを意味する。Ｖが（先頭部分以外の）各Ｎビット部分に対して同じである場合、Ｐ＝Ｍ−Ｖ（Ｍ／Ｎ−１）である。より一般的には、異なるレーンが異なる数の重複ビットを有することができる場合、Ｐ＝Ｍ−ΣＶであり、ここで、ΣＶは先頭レーン以外の各レーン内の重複ビットの総数である。
【００７７】
Ｐビット値の各重複部分において、そのＰビット数の実際のビット値は、（下位レーン内の非重複ビットＮＶと重複ビットを加算することによって引き起こされる可能性がある任意の桁上げを考慮に入れて）下位レーンの重複ビットＶと上位レーン内の非重複ビットＮＶとの和によって表される。したがって、ＲＨＰＡ値を等価整数値に変換する１つの方法が図４のパート（３）に示され、ここで、各レーン内の重複ビットは符号拡張され、（各レーンの加算後に重複ビットを調整して、低次から高次に）上位レーンの非重複ビットに加算される。
【００７８】
ＲＨＰＡ数は、ＲＨＰＡ値のＭビットを使用して、所与のＰビット数を表す２つ以上の方法があるという点で、冗長である。たとえば、最下位の２つのレーンにおける重複を考慮すると、重複ビットの数Ｖ＝４の例では、Ｐビット値の対応するビットが１１１１である場合、これを表す１つの方法は、下位レーン内の重複ビットＶ［０］＝０ｂ００００および次の最上位レーン内の非重複ビットＮＶ［１］＝０ｂ１１１１である。しかしながら、同じ値を表す他の方法は、たとえば、Ｖ［０］＝０ｂ０１０１およびＮＶ［１］＝０ｂ１０１０、またはＶ［０］＝０ｂ１１１１およびＮＶ［１］＝０ｂ００００であり得る。
【００７９】
最上位レーン内の重複ビットＶ［３］は、重複する高次レーンが存在しないので、実際には重複ビットではないことに留意されたい。したがって、高次レーンをすべて非重複ビットと見なすことはしばしば有用であり得るし、下記の例のいくつかがこれを示す。したがって、場合によっては、先頭レーンは全体的に非重複ビットから形成されると考えることができる（その結果、Ｐビット値の最上位ビットは全体として、先頭レーン内のＭビット値の最上位ビットに対応する）。
【００８０】
しかしながら、他の実施形態では、先頭レーンも重複ビットを有するものとして扱うことが好ましい場合があり、その結果、ＲＨＰＡによって表されるＰビット数値の最上位ビットは、先頭レーンの（重複部分を除く）非重複部分の最上位ビットに対応する。この手法により、（先頭レーンが他のレーンと比較して処理される方法に対する修正を少なくして）各レーンがより対称的な方式で処理されることが可能になる場合、回路の実装がより容易なる場合がある。
【００８１】
図４に示されたようにＰビット数値を冗長形式で表現することにより、所与のレーン内の非重複部分の加算からのいかなる桁上げも、次のレーンまで桁上げを伝搬する必要なしに、同じレーンの重複部分内で収容することができるので、レーン間の桁上げなしでいくつかのＲＨＰＡ数を加算することができる。各レーン内で実行される加算は、従来のＮビットの２の補数加算を実行することによって加算される２つ以上のＮビット符号付き整数を単に参照し、これは他のレーン内の対応するＮビット加算から完全に独立している。これは、Ｎビット加算の各々が並列に実行できることを意味し、その結果、レーンの数にかかわらず、Ｎビット加算を実行するのにかかる時間内にＭビット値全体を加算することができる。
【００８２】
実際には、少なくとも（２Ｖ−１−１）個のそのようなＲＨＰＡ数は、レーン間の桁上げなしに加算することができ、非重複部分の加算からのいかなる桁上げも重複部分内で収集される（異なる数の重複ビットを有するレーンがある場合、この式のＶは、重複ビットを有する任意の所与のレーン内の重複ビットの最小数のはずである）。（先頭重複ビットは符号ビットであり、すべてのビットが０であるＲＨＰＡ数から始まるとき、最小２Ｖ−１個のさらなる加算が実行された後に発生する可能性がある、２番目の最上位重複ビットからの正または負のオーバーフローがあるときにレーンオーバーフローが発生するので）、（２Ｖ−１）番目の加算は、レーン間の桁上げを発生させる可能性がある最初のものである。たとえば、Ｖ＝１４の場合、これにより、単一レーンからオーバーフローする任意のリスクがある前に、少なくとも８１９１個のＲＨＰＡ数がアキュムレータに加算される（すなわち、合計８１９２の値が加算される）ことが可能になる。これは、多くの入力値の加算が一般的な高性能コンピューティング分野に特に有用である。実際には、あらゆる加算がオーバーフロー部分への桁上げを引き起こすとは限らないので、時々、Ｎビット部分の先頭ビットからのオーバーフローなしに２Ｖ−１個を超える累積が可能である。
【００８３】
場合によっては、Ｎビットレーンの先頭ビットからのオーバーフローのリスク（または実際のオーバーフロー）を引き起こすのに十分な加算が実行された場合、重複ビットが所与のＲＨＰＡ値の重複ビットよりも小さい大きさを表す第２のＲＨＰＡ値に所与のＲＨＰＡ値を変換して、より多くの桁上げを収容するための重複部分内のビット空間を効果的に解放するために、重複削減演算を実行することができる。また、ＲＨＰＡ数を整数または浮動小数点などの別のフォーマットに逆変換するとき、そのような重複削減が実行される場合もある。しかしながら、実際には、そのような重複削減演算はめったに必要とされる場合はないので、Ｎビット加算にかかる時間内に複数の入力のＭビット加算が実行されることを可能にすることにより、ＲＨＰＡは処理時間を大幅に節約することができる。「重複削減」という用語は、あらゆるレーン内の重複ビットを小さくしなければならないことを意味しないことに留意されたい。少なくとも１つのレーンの重複ビットが大きさを削減すれば十分であり、何らかの形態の重複削減（たとえば、下記で説明される図１３の制限付き冗長の例）が、所与のレーン内の重複ビットの大きさの増大につながる可能性がある。重複削減演算のいくつかの例が下記に記載される。
【００８４】
図５は、ＲＨＰＡ値について定義されたメタデータの例を示す。この例では、メタデータは、ＲＨＰＡ値の対応するレーン内の最下位ビットの有効桁（または「重み」）を各々が指定するいくつかのアンカー要素ｗ［ｉ］を含むアンカーベクトルと、各レーン内の重複ビットの数を指定する重複サイズ値Ｖとを含む。
【００８５】
場合によっては、ＲＨＰＡ数用のメタデータは、（そこから、レーンサイズＮが与えられると、レーンの数を決定することができる）ビットＭの総数を識別することにより、明示的または暗示的にＲＨＰＡ数によって含められたＮビットレーンの数を識別することもできる。
【００８６】
連続するレーン内の重みｗ［ｉ］、ｗ［ｉ＋１］がレーンサイズＮだけ異なるＨＰＡ形式とは対照的に、ＲＨＰＡ値の場合、連続するレーン内の重みｗ［ｉ］、ｗ［ｉ＋１］は、Ｎ−Ｖ（レーンサイズマイナス重複ビットの数）だけ異なる。したがって、処理回路１４は、メタデータ内のアンカーベクトルおよび重複サイズから、ＲＨＰＡ値内の各ビットの有効桁を識別することができる。アンカー値ｗ［ｉ］を有する所与のレーンの所与のビットｊ（ｊ＝０〜Ｎ−１）の有効桁は、ｗ［ｉ］＋ｊによって与えられる。２つ以上のＲＨＰＡ数の加算中、アンカー値または重複サイズを考慮する必要はなく、数を単に加算して結果を形成することができる。アンカー値は、ＲＨＰＡ形式と整数または浮動小数点などの他のフォーマットとの間を変換するときにプロセッサによって使用され、重複サイズ値Ｖは、重複の伝搬または異なるフォーマット間の変換を実行するときに参照される。
【００８７】
図５は、アンカーベクトルとは別個のものとして重複サイズ値Ｖを示すが、別の例では、重複サイズＶはアンカーベクトル自体の中で指定されてもよい。たとえば、ＲＨＰＡ値を保持するために使用されるレジスタ１２と同じサイズのＳＩＭＤ（単一命令多重データ）ベクトルレジスタは、メタデータを格納するために割り振られる場合があり、ベクトルレジスタの各レーンは、処理の対応するレーン用の対応するアンカー値ｗ［ｉ］および重複サイズＶを保持する。
【００８８】
また、これらのパラメータが制御レジスタ内で定義されることは必須ではない。いくつかのシステムでは、重複サイズＶは、所与のハードウェア実装の場合固定されてもよく、ユーザによってプログラム可能でなくてもよい。しかしながら、プログラマが重複サイズＶを指定することを可能にすることは、所与のサイズＰの値を加算するために必要なレーンの総数に対して、レーン間の桁上げを伝搬することなく実行され得る連続的な加算の数をトレードオフするために有用であり得る。一般に、重複サイズＶが大きければ大きいほど、重複伝搬なしに実行され得る加算は多いが、これにより、所与のサイズＰの数に対してより多くのレーンが必要とされるようになる。重複サイズＶを縮小することにより、所与のサイズの数は、より少ないレーンを使用して加算することができ、これにより、より広いベクトルプロセッサのレーンのそれぞれのサブセットを使用してＲＨＰＡ値の２つ以上の別々のセットを並行して加算することが可能になることによってパフォーマンス貯蓄が可能になる場合がある（たとえば、下記で説明される図２１〜図２４を参照）が、この場合、オーバーフロー境界に早く到達し、重複ビットを後続のレーンに伝搬する必要が生じる前に、より少ない数の加算を実行することができる。
【００８９】
他の例では、重複サイズＶは、ＲＨＰＡ値の処理を制御するための命令の符号化において指定される可能性がある。同様に、アンカーベクトルも命令内で識別される可能性がある。いくつかの例では、各レーンの有効桁を別々に指定するアンカーベクトルの代わりに、メタデータは、ＲＨＰＡ値の所与のレーン内の所与のビットの有効桁を単に指定することができ、他のレーンの有効桁は、そのビットの有効桁から導出することができる。たとえば、最下位レーンのビットの有効桁のみが指定された場合、他のレーンの有効桁は、最下位レーンの有効桁にＮ−Ｖの倍数を加算することによって計算することができる。
【００９０】
図６は、ＲＨＰＡ形式を使用して累積演算を高速化する例を示し、これは、特に数千または数百万もの異なる値が一緒に加算される必要があり得る高性能コンピューティングでは、比較的一般的な演算である。アキュムレータレジスタ３０は、今まで加算されたすべての値の中間合計を表すＲＨＰＡ形式のアキュムレータ値を格納するために設けられる場合がある。各サイクルにおいて、ＲＨＰＡアキュムレータ値に加算するために入力オペランド３２が提供される。いくつかの命令の場合、入力オペランド３２は、命令によって直接指定される可能性がある。他のタイプの命令の場合、入力オペランド３２は、命令によって直接指定されたオペランドに適用される何らかの他の処理動作の結果であり得る（たとえば、多重加算命令は２つの値を乗算することによって入力オペランド３２を生成することができる）。入力オペランド３２は、整数値または浮動小数点値の可能性がある。
【００９１】
入力オペランド３２は、ＲＨＰＡ数３６の対応するＮビット部分Ａ［０］〜Ａ［３］を生成するいくつかのレーン変換ユニット３４に提供される。各レーン変換ユニット３４は、ＲＨＰＡアキュムレータ値に関連付けられたメタデータのアンカーベクトルの対応する要素によって定義されるものとしてそのレーンの有効桁ｗ［ｉ］を受け取り、これを使用して、入力オペランド３２のビット（浮動小数点値の場合、仮数部のビット）を、そのレーン内の対応する有効桁のビットにマッピングする。いくつかのレーンの場合、そのレーン内のビットのうちのいずれかに有効桁で対応するビットが入力オペランド３２内に存在しない場合があるので、そのようなレーンは、符号ビット（入力オペランド３２が正の場合０、入力オペランド３２が負の場合１）で完全に満たされる場合がある。各レーンの重複ビットは符号ビットに設定される。整数値または浮動小数点値のＲＨＰＡへの変換は、図１０および図１１において下記でより詳細に記載される。
【００９２】
次いで、生成されたＲＨＰＡ値３６の各Ｎビット部分は、レーンごとに並列に設けられたそれぞれの加算回路ユニット３８により、アキュムレータ値の対応する部分に加算される。各加算回路ユニット３８は、他の加算回路ユニット３８と並列に、独立したＮビット符号付き２の補数加算を実行して、結果の対応するＮビット部分を生成し、結果は、アキュムレータレジスタ３０の対応する部分に書き戻されて、アキュムレータの前の値を置き換える。桁上げがレーン間で伝搬されないという点で、加算は独立している。
【００９３】
累積演算を数回繰り返すことにより、一連の入力オペランドを迅速、正確、かつ結合的に加算することができ、入力オペランドが入力される順序は結果に影響を与えない。これは、累積がより速く実行され得ることを意味する。たとえば、図６に示された回路の２つ以上のインスタンスは、加算されるべき値のアレイのそれぞれのサブセットを加算して、いくつかの部分アキュムレータ値を形成するために、並列に設けることができる。次いで、各部分アキュムレータ値を加算して、最終結果を形成することができる。これは、浮動小数点の非結合的性質のために、浮動小数点演算では可能ではないはずである。
【００９４】
最終的な累積結果は、ＲＨＰＡ値としてのさらなる処理のためにアキュムレータレジスタ３０に残すことができるか、または代替数表現に逆変換することができる。ＲＨＰＡを整数または浮動小数点に変換するための技法が下記に記載される。
【００９５】
いくつかの例がここで役に立つ。説明を簡単にするために、４つの８ビットレーンに分割された３２ビット数からなる小さなＲＨＰＡ形式を考えてみよう。これらの例ではＶ＝４なので、各レーンは４つの非重複ビットおよび４つの重複ビットを有する。ＦＰ数をこのフォーマットに変換しようとするのではなく、入力として１６ビット符号絶対値整数を使用する。さらに、暗黙的な０のアンカーを仮定するので、すべての整数値に関心がある（初期値がＦＰ形式であった場合、入力ビット数が少数であれば、それらは破棄されるが、符号絶対値整数入力ではこの可能性はない）。
【００９６】
例１：符号絶対値１６進整数１２３ａをＲＨＰＡ形式に変換すると仮定する。アンカーはゼロなので、低次レーンの非冗長ビットは、重み２０〜２３、すなわちａ＝１０１０（２進数）を有する入力の一部を含む。数は正なので、低次レーンの重複ビットはゼロであり、２進数００００＿１０１０の低次レーン値を与える。同様に、次のレーンは、重み２４〜２７、この場合３＝００１１（２進数）を有する入力の一部を含む。すべてのレーンを進んで（それらはすべて並行して計算される）、ＲＨＰＡ数を取得する。
【数４】
2019500672.tif 000011
【００９７】
例２：９２３ａからＲＨＰＡに変換することは同様である（これは符号絶対値形式で−１２３ａである）が、符号ビットが設定されているので、各レーンは前の例にはなかった２の補数を得る。
【数５】
2019500672.tif 000012
【００９８】
例３：１２３ａに７ｆｆｆ（最大可能な正の入力）を加算すると、重複ビットの効用が示される。ｒｈｐａは小さなＲＨＰＡ数の１つに１６ビット符号絶対値数を加算する本明細書の小さなプログラムである。加算は、重複ビットのためにレーン間の桁上げなしで容易に処理される。
【数６】
2019500672.tif 000013
【００９９】
例４：９２３ａに２０ｆ０を加算すると、異なるレーンは異なる符号を有することができ、レーンのうちの２つは正であり、２つは負であることが示される。
【数７】
2019500672.tif 000014
【０１００】
さらなる例が下記の付録Ａに示される。
【０１０１】
通常のＨＰＡよりも狭い加算回路ユニットで値が加算されることを可能にすることに加えて、ＲＨＰＡは、同時に複数の値を累積することができるので、はるかに高速になる可能性も有する。通常のＨＰＡでは、所与の非常に広い加算器は一度に２つのＨＰＡ値を加算することのみができるが、ＲＨＰＡでは、重複ビットは、レーンオーバーフローについて心配することなく、２Ｖ−１−１までの値の加算をアキュムレータに累積することができるので、これは、多くの値の加算が、いくつかの順次加算を必要とするのではなく、すべての値を同時に加算する単一の演算として実行できることを意味する。
【０１０２】
たとえば、図７は、ｊ個のＲＨＰＡ値（ｊは３以上である）の加算を示し、各加算回路ユニット４２は、ｊ個の別々のＮビット値を２つのＮビット項に削減することができる、ｊから２への削減ツリー４４（乗算器で使用されるものと同様のウォレスツリー）を含み、２つのＮビット項を加算してＮビットの結果値Ｒを生成するための桁上げ伝搬加算器４６が続く。たとえば、ｊは４、８、または１６の可能性があり、一度に単一の値を順次加算することと比較すると、これにより、所与の数のデータ値をかなりの量だけ加算するのにかかる時間を短縮することができる。ＲＨＰＡではこれが可能である理由は、重複ビットが交差するレーン境界なしに複数の項目を加算することを可能にするためである。
【０１０３】
図８に示されたように、ただ１度の演算で加算されるＲＨＰＡ値は、入力ベクトル内で指定されたそれぞれの入力値から導出される可能性がある。この例では、入力ベクトルの各要素は、それぞれの浮動小数点値ＦＰ０〜ＦＰ３である。プロセッサは、各々が図６のレーン変換ユニットのように機能するが、異なる浮動小数点入力ＦＰｊまたはアンカー重みｗ［ｉ］を受け取る、レーン変換ユニット３４のアレイを有する。一般に、レーン変換ユニット３４−ｊｉは、元の入力ベクトルの浮動小数点値ＦＰｊに対応するＲＨＰＡ値のｉ番目の要素を生成する。たとえば、対応するＲＨＰＡ値ＲＨＰＡ０のそれぞれの要素ＲＨＰＡ０［０］〜ＲＨＰＡ０［３］を生成する最初の行のレーン変換ユニット３４−００〜３４−０３の各々に、浮動小数点値ＦＰ０が与えられる。同様に、他の行は、浮動小数点値ＦＰ１〜ＦＰ３に対応するＲＨＰＡ値ＲＨＰＡ１〜ＲＨＰＡ３の要素を生成する。次いで、各々の生成されたＲＨＰＡ値の対応する要素が加算回路ユニットによって加算されて、アキュムレータ値の対応する結果が生成される。レーンごとの処理は、他のレーンと完全に並行して実行される。
【０１０４】
図８は、入力ベクトル内の浮動小数点値の数がＲＨＰＡ値の処理レーンの数と同じである例を示すが、これは必須ではない。たとえば、８要素の浮動小数点ベクトルは、各ＲＨＰＡ値の対応する要素を加算する４つの処理レーンを有する８つの４要素ＲＨＰＡ値にマッピングされる可能性がある。ＲＨＰＡ値内のレーンの数は、入力ベクトルのサイズではなく、ＲＨＰＡ値のメタデータに依存する。
【０１０５】
また、説明を容易にするために図７および図８には示されていないが、場合によっては、加算されるＲＨＰＡ値のうちの１つは、アキュムレータ値Ｒ自体の以前の値の可能性がある。
【０１０６】
図９は、ＲＨＰＡ形式を使用して累積を実行する方法を示す。ステップ４８０において、１つまたは複数の次の入力値が受け取られる。これらの入力値は、命令によって直接指定されたオペランドの可能性があるか、または、たとえば乗算の積などの、命令に応答して実行される何らかの他の処理の結果の可能性がある。図７および図８に示されたように、場合によっては、２つ以上の入力値がこの時点で受け取られる場合がある。ステップ４８２において、受け取られた入力値がＲＨＰＡ形式に変換される。変換の例は、図１０および図１１に関して下記に記載される。ステップ４８４において、並列加算回路ユニット３８、４２は、入力値の対応するＮビット部分とアキュムレータ値との並列Ｎビット加算を実行して、結果の対応するＮビット部分を生成し、その結果がアキュムレータレジスタ３０に書き込まれる。各Ｎビット加算は、他の加算と完全に並行して実行することができる標準の２の補数Ｎビット加算である。あるいは、２つ以上の入力値がアキュムレータに加算されるとき、Ｎビット加算は、ウォレスツリーを使用する２つの項への項の数の削減と、桁上げ伝搬加算器を使用してその結果の対応するＮビット部分を生成する２つの項の加算とを含むことができる。
【０１０７】
ステップ４８６において、重複伝搬条件が満たされるかどうかが判定される。下記で説明されるように、たとえば、ある数の累積が実行されたとき、あるレーン内の重複ビットが所与の値に達したとき、またはステップ４８４において実行されたＮビット加算のうちの１つの間に所与のレーンから実際のオーバーフローが発生したとき、重複伝搬条件が満たされたと考えることができる。重複伝搬条件が満たされた場合、ステップ４８８において、アキュムレータ値に対して重複伝搬演算が実行されて、重複ビットを１つのレーンから次のレーンに伝搬し、それにより、所与のレーンからのオーバーフローの可能性が低減される。重複伝搬演算の様々な例が下記に記載される。重複伝搬演算の結果は、アキュムレータレジスタに書き戻され、その結果、レーン間のオーバーフローの可能性を低減して、さらなる累積を実行することができる。一方、重複伝搬条件が満たされない場合、ステップ４８８は省略される。ステップ４９０において、考慮すべきさらなる入力値があるかどうかが判定され、そうである場合、方法はステップ４８０に戻る。そうでない場合、方法は終了するか、または任意選択で、ステップ４９２において、最終アキュムレータ結果を浮動小数点、固定小数点、または整数などの別の表現に変換することができる。この変換を実行するための技法は、図１７〜図１９に関して下記に記載される。
【０１０８】
図６〜図８はＲＨＰＡ形式の値に対して加算を実行する例を示すが、他の演算も実行することができる。たとえば、より一般的には、処理回路１４は、２つ以上のＲＨＰＡ値の対応するＮビット部分の関数を計算して、同様にＲＨＰＡ形式で結果値の対応するＮビット部分を生成するために、独立したＮビット演算を並列に実行するいくつかの演算回路ユニットを有することができる。たとえば、各Ｎビット演算は、以下の、加算または減算、乗算、論理演算（たとえば、ＡＮＤ、ＯＲ、ＮＯＲ、ＸＯＲなど）、ガロア体演算などのうちのいずれか、または２つ以上のそのような演算の組合せを含む場合がある。ＲＨＰＡ形式を使用すると、桁上げをもたらすＮビット演算のステップが同じレーン内に収まることが可能になり、長い値の処理を高速化するのに役立つ。
【０１０９】
ＲＨＰＡ表現への変換
図１０および図１１は、浮動小数点値をＲＨＰＡ値に変換する例を示す。図１０に示されたように、変換は、浮動小数点値の仮数部Ｆのビットを、ＲＨＰＡ値の対応する非重複ビットにマッピングし、ＲＨＰＡ値は、浮動小数点値の指数部Ｅおよび実行されるべきＲＨＰＡ計算用のメタデータ内に定義されたアンカー値に応じて、２つ以上のレーンにまたがる可能性がある。浮動小数点値が負の場合、仮数ビットはＲＨＰＡの非重複ビットにそれらをマッピングする際にネゲートされる。一方、ＲＨＰＡ値の重複ビットは符号ビットで満たされる。浮動小数点値が（符号ビットＳ＝０によって示される）正の場合、各レーンの重複ビットＶはゼロのはずであり、浮動小数点値が負（符号ビットＳ＝１）の場合、重複ビットＶは１に設定される。
【０１１０】
図１１はより詳細に変換動作を示す。図１１は、ＲＨＰＡ値の単一のＮビットレーンを生成するための処理動作を示す。ＲＨＰＡ値全体を生成するために、図１１に示された演算がレーンごとに（直列実装が使用される可能性もあるが、好ましくは並列で）実行されるはずである。したがって、図１１は、たとえば、図６または図８に示された単一のレーン変換ユニット３４の演算に対応する。
【０１１１】
図１１に示されたように、格納された小数Ｆは、暗黙のビット５０を含めることによって実際の仮数部に拡張され、それは、浮動小数点値が正規かつ非ゼロの場合１に等しく、浮動小数点値が非正規またはゼロの場合０に等しい。また、実際の仮数部（１．Ｆまたは０．Ｆ）は、最上位端において「０」に等しいＮ−Ｖ個のビットで埋められる。得られた値は左シフト器５２に入力され、左シフト器５２は、ビット位置の数Ｌｓｈｉｆｔだけその値を左シフトする。シフト量Ｌｓｈｉｆｔは、変換されている浮動小数点値の指数部Ｅ、および処理されている特定のレーン用のレーンアンカー値ｗ［ｉ］に基づいて計算される。
【０１１２】
一般に、Ｌｓｈｉｆｔは以下の値に等価な値で計算され、ここでＺ＝Ｅ−Ｂ−ｗ［ｉ］＋１であり、
・Ｚ≦０の場合（これは、浮動小数点値が生成されるべきレーンのいずれのビットよりも下位である場合である）、Ｌｓｈｉｆｔ＝０であり、
・Ｚ≧Ｎ−Ｖ＋Ｆｓｉｚｅの場合（これは、浮動小数点値が生成されるべきレーンのいずれのビットよりも上位である場合）、Ｌｓｈｉｆｔ＝０であり、
・それ以外の場合、Ｌｓｈｉｆｔ＝Ｚであるが、
ここで、
・Ｅは浮動小数点値の（バイアスされた）指数部であり、
・Ｂは、使用されている特定の浮動小数点表現のバイアス値、たとえば、単精度の場合Ｂ＝１２７、倍精度の場合Ｂ＝１０２３であり、
・ｗ［ｉ］は、生成されている現在のレーンのレーンアンカー値であり、それはそのレーン内の最下位ビットの有効桁を示し、
・Ｆｓｉｚｅは、（０または１の暗黙ビットを含むが、Ｎ−Ｖ個の「０」ビットは含まない）実際の仮数部内のビットの数、たとえば、単精度の場合Ｆｓｉｚｅ＝２４、または倍精度の場合５４であり、
・Ｎはレーンサイズ（ＲＨＰＡ値の１レーン内のビットの総数）であり、
・Ｖは重複ビットの数である。
【０１１３】
シフト量がこの厳密な演算セットで計算されることは必須ではないことが諒解されよう−等価な結果を与える任意の演算が使用される可能性がある。また、レーンアンカー値ｗ［ｉ］がレーンの最下位ビット以外のビットの有効桁を示す例では、それに応じてＺ用の式を調整することができる。
【０１１４】
シフト結果５４の先頭Ｎ−Ｖビットが選択される。０＜Ｚ＜Ｎ−Ｖ＋Ｆｓｉｚｅの場合、元の仮数部からの少なくとも１ビットがこのウィンドウにシフトされている。シフト結果５４の先頭Ｎ−Ｖビットは、最上位端においてＶ個の重複ビットで埋められる。重複ビットは最初に０に設定される。この値は、元の浮動小数点値の符号ビットＳが０であった（浮動小数点値が正であった）場合、現在のレーン用の変換されたＮビットレーン値６０として出力される。一方、浮動小数点値が負（符号ビット＝１）であった場合、その値は６２でネゲートされ（すべてのビットを反転し、１を加算する）、結果は変換されたＮビットレーン値６０として出力される。
【０１１５】
要約すると、アンカー値ｗ［ｉ］は、（Ｎ−Ｖに対応するレーン間のアンカーにおける差で）現在のレーンについて関心がある最小ビットの重みを与える。レーンによって表される範囲内の適切な仮数部ビットは、シフト器５２を使用して選択される。正の数を変換する場合、重複ビットは０を含み、負の数を変換する場合、シフト結果のＮビット２の補数をレーンに格納し、それは重複ビットに１を格納する効果を有する。次いで、この演算は、ＲＨＰＡ値全体を生成するために、レーンごとに並行して実行することができる。
【０１１６】
図１０および図１１は、浮動小数点値のＲＨＰＡ値への変換を示す。固定小数点値または整数値を変換するとき、指数部が存在せず、上記の式における指数値Ｅが何らかの既知の値（整数の場合ゼロ、固定小数点値の場合非ゼロ）に効果的に固定され、元の値の中のビット数Ｆｓｉｚｅが異なる場合があることを除き、演算は同じである。浮動小数点に関しては、元の値がそのレーンによって表される範囲と重複する場合、仮数部からのビットはＮビットレーンの対応するビットにマッピングされるが、固定小数点値または整数値は、（ＦＰ数の符号絶対値表現とは対照的に）すでに符号付き数字表現を使用する２の補数なので、ネゲートは不要である。
【０１１７】
重複削減
上述されたように、特定のＮビットレーンの値が情報を失うように変わる状況であるレーンオーバーフローを心配することなく、少なくとも２Ｖ−１個の数を加算することができる。レーンの２番目の最上位重複ビットから桁上げアウトが発生すると、レーンオーバーフローが発生するはずである。情報を失うことを回避するために、レーンオーバーフロー境界またはその付近にいるとき、使用されている重複ビットの数を減らし、必要に応じて重複ビット内の空間を解放してさらなる桁上げを収容するために、重複削減演算を実行することができる。一般に、重複伝搬演算は、第１のＲＨＰＡ値が第２のＲＨＰＡ値に変換され、第２のＲＨＰＡ値の少なくとも１つのＮビット部分内の重複ビットは、第１のＲＨＰＡ値の対応する部分内の重複ビットよりも小さい、任意の演算を含む場合がある。
【０１１８】
重複削減を実行する１つの方法は、所与のレーンからの重複ビットが次の最上位レーンに伝搬され、そのレーン内の非重複ビットに加算される、重複伝搬演算を実行することである。重複ビットを次のレーンに伝搬することにより、先行レーン内の重複ビットがゼロに近づけられ、それにより、レーンオーバーフローを引き起こす別の加算の可能性が低減される。重複伝搬演算を実行する様々な方法があり、そのうちの３つが図１２〜図１４に関して下記に記載される。
【０１１９】
図１２は、所与のＲＨＰＡ値が、各レーン内の重複ビットがすべて０であるＲＨＰＡ値を参照する「非冗長」ＲＨＰＡ値に変換される、重複伝搬演算の第１の例を示す。「非冗長冗長ＨＰＡ」値の概念は矛盾のように見えるかもしれないが、「非冗長」という用語は、（同じ数値を表す複数の方法を可能にするいくつかの非ゼロ重複ビットを有するＲＨＰＡ値とは対照的に）すべての重複ビットが０であるＲＨＰＡ値を使用して所与の値を表す方法が１つしかないという事実を指すために使用される。非冗長ＲＨＰＡ値では、非重複ビットＮＶは、対応するビットが正規の２の補数の整数値または固定小数点値において有するはずの同じビット値を有する。
【０１２０】
図１２に示されたように、所与のＲＨＰＡ値を非冗長にするために、まず、最下位レーンからの重複ビットＶ［０］のＮビット符号拡張バージョンを、次の最上位レーンの（非重複ビットＮＶ［１］および重複ビットＶ［１］を含む）すべてのＮビットに加算して、修正非重複ビットＮＶ’［１］および修正重複ビットＶ’［１］を含むＮビット値を生成するために、最初のＮビット加算７０が実行される。修正重複ビットＶ’［１］は、しばしば、元のＲＨＰＡ値の対応する重複ビットＶ［１］と同一である可能性があるが、時々、下位レーンからの符号拡張重複ビットＶ［０］を加算すると、重複ビットへの桁上げ伝搬を生じる可能性があり、修正重複ビットＶ’［１］に対して異なる値がもたらされる。これが後続の加算が順次実行される理由である。したがって、最終レーンに達するまで、後続のレーンごとに、前の加算で生成された修正重複ビットＶ’［１］、Ｖ’［２］のＮビット符号拡張を、次の最上位レーンのすべてのＮビットに加算するために、さらなるＮビット加算７２、７４が実行されて、さらなる修正非重複ビットおよび修正重複ビットを生成する。次いで、元のＲＨＰＡ値から直接マッピングされている最下位レーン内の非重複ビットＮＶ［０］で非冗長ＲＨＰＡ値が形成され、それぞれの加算７０、７２、７４において生成された修正非重複ビットに対応する他のレーン内の非重複ビットＮＶ’［１］、ＮＶ’［２］、ＮＶ’［３］、および生成された非冗長ＲＨＰＡ値内のすべての重複ビットが０に設定される。
【０１２１】
要約すると、数を非冗長にすることは、先行レーンからの符号拡張重複ビットに所与のレーンの非重複ビットを加算し、低次レーンで始まり、高次レーンまで先行し、それらが次のレーンに伝搬された後に所与のレーン用の重複ビットをゼロにすることによって達成される。各加算は前回の加算によって生成された修正重複ビットを必要とするので、これは逐次プロセスであり、そのため、元のＲＨＰＡ値のベクトルが比較的広い場合、このプロセスは遅くなり得る。
【０１２２】
ＲＨＰＡ値を非冗長形式に変換する数値例が、再びＶ＝４およびＮ＝８を用いて下記に示される。
【数８】
2019500672.tif 000015
ステップ１：レーン０の重複ビットを符号拡張し、レーン１に加算し、レーン０の重複ビットをゼロにする
【数９】
2019500672.tif 000016
ステップ２：新しいレーン１の重複ビットを符号拡張し、レーン２に加算し、新しいレーン１の重複ビットをゼロにする
【数１０】
2019500672.tif 000017
ステップ３：新しいレーン２の重複ビットを符号拡張し、レーン３に加算し、新しいレーン２の重複ビットをゼロにする
【数１１】
2019500672.tif 000018
最終的な非冗長値：
【数１２】
2019500672.tif 000019
【０１２３】
図１３は、ＲＨＰＡ値を「制限付き冗長」（または「最小冗長」）ＲＨＰＡ値に変換する重複伝搬演算の第２の例を示す。制限付き冗長ＲＨＰＡ値では、任意の所与のレーンにおいて、重複ビットの対応するセットは、＋１、０、および−１のうちの１つに対応し、いかなる他の値も取ることができない。すなわち、所与のレーン内の重複ビットＶのビットのパターンは、符号付き整数として解釈された場合、＋１、０、および−１の値を有する。ＲＨＰＡ値全体における重複ビットＶの有効桁を考慮すると、重複ビットは、実際には、＋２Ｗ、０、または−２Ｗの値を表し、ここで、Ｗは次の最上位レーン内の最下位ビットの有効桁である。制限付き冗長形式では、異なるレーンは重複ビットについての異なる値を有することができるが、各レーンは、セット｛＋１，０，−１｝のうちの１つに制限された重複ビットを有する。所与のレーン内の最下位の２つの重複ビットは、それぞれ、＋１、０、−１を表す０ｂ０１、０ｂ００、０ｂ１１であり、Ｖ＞２の場合、同じレーンのいかなるそれ以上の重複ビットも、そのレーンの２番目の最下位重複ビットに等しくなる。
【０１２４】
図１３に示されたように、制限付き冗長変換の利点は、重複伝搬演算全体を並列に実行できることである。図１３に示されたように、いくつかの並列Ｎビット加算７６が実行され、各々が所与のレーン用の符号拡張重複ビットＶ［ｉ］を、次の最上位レーンの非重複ビットＮＶ［ｉ＋１］に加算する（次の最上位レーン内の重複ビットは０に設定されている）。これらの加算７６の各々は、制限付き冗長ＲＨＰＡ値の対応するＮビット部分を生成する。制限付き冗長ＲＨＰＡ値の最下位レーンは、単に、元のＲＨＰＡ値内の最下位レーンの非重複ビットＮＶ［０］を、制限付き冗長値の対応するビットに直接マッピングし、最下位レーン内の非重複ビットをゼロに設定することによって形成される。各レーンは、多くてもそれ自体のレーン内の情報および隣接する低次レーンからの重複ビットを使用して、すべてのステップを並列に処理するので、この方法はベクトルを非冗長にするためのプロセスよりもはるかに高速である。
【０１２５】
ＲＨＰＡ値を制限付き冗長に変換する例が下記に示される。
【数１３】
2019500672.tif 000020
ステップ１：隣接する低次レーンから符号拡張重複値を作成する
【数１４】
2019500672.tif 000021
ステップ２：各レーンがそれ自体の重複値を０にする
【数１５】
2019500672.tif 000022
ステップ３：ステップ１および２からの値を加算する
【数１６】
2019500672.tif 000023
制限付き冗長値：
【数１７】
2019500672.tif 000024
【０１２６】
例６における制限付き冗長値は、セット｛＋１，０，−１｝に限定された重複値を有することに注意されたい。また、制限付き冗長値は、上記に示された非冗長例内の同じ数を表す非冗長値とは全く異なることにも注意されたい。図１２の逐次プロセスとは異なり、このタイプの変換は単一サイクルで行うことができる。
【０１２７】
数が制限付き冗長になると、レーンオーバーフローを起こすことなく、最低２Ｖ−１−２のさらなるＦＰ値を加算することができる。また、レーンオーバーフローを起こすことなく、最低２Ｖ−２個の制限付き冗長ＲＨＰＡ値を一緒に加算することもできる。この最後の境界は、他のＳＩＭＤユニットまたは他のプロセッサから来たかもしれない部分的な累積を組み合わせる点で興味深い。
【０１２８】
図１３の制限付き冗長重複伝搬演算では、すべての重複ビットＶ［ｉ］が０であるレーンを元のＲＨＰＡ値が有するとき、制限付き冗長ＲＨＰＡ値内の対応するレーンは、そのレーンの非重複ビットＮＶ［ｉ］と次の最下位レーンの重複ビットＶ［ｉ−１］の加算によって引き起こされる桁上げに起因して、＋１または−１を表す重複ビットＶ’［ｉ］を有する可能性があることに留意されたい。したがって、「重複削減演算」という用語は、すべてのレーンがそれらの重複ビットの大きさを減らさなければならないことを意味せず、いくつかのレーンでは重複ビットの大きさが増える可能性があることが諒解されよう。しかしながら、一般に、重複削減演算は、少なくとも１つのレーンにおける重複ビットの大きさを減らす。
【０１２９】
非冗長ＲＨＰＡ値が必要な場合、それは、図１２の同じ逐次方法を実行することにより、制限付き重複ＲＨＰＡ値から生成することができる。しかしながら、非冗長ＲＨＰＡ値は、図１３に関して説明された方法を使用して、最初に所与のＲＨＰＡ値を制限付き冗長形式に変換し、次いで、図１４に示されたように制限付き冗長値を非冗長ＲＨＰＡ値にマッピングすることによって生成することもできる。この手法の利点は、（図１２のような逐次演算ではなく）一連の並列Ｎビット演算で非冗長ＲＨＰＡ値を生成できることである。
【０１３０】
一般に、図１４に示された方法は、非冗長形式に変換されるべき制限付き冗長ＲＨＰＡ値に基づいて、重複値および非重複値を生成する。重複値は、（各ビットの符号および相対的な有効桁を考慮に入れて）制限付き冗長ＲＨＰＡ値のすべての重複ビットの合計を表し、非重複値は、（ここでも、それらの符号および有効桁を考慮に入れて）すべての非重複ビットの合計を表す。図１４のパートＥに示されたように、重複値および非重複値が加算されて非冗長ＲＨＰＡ値を生成し、加算は並列加算器７８によってＮビットチャンク内で実行される。各加算器７８は、非冗長ＲＨＰＡ値の対応する部分を生成するために、重複値および非重複値の完全なＭビット加算が実行された場合、次の最下位レーンから伝搬するはずの桁上げ値を表す桁上げビットＣとともに、非重複値および重複値の対応するＮビット部分を加算する。
【０１３１】
図１４のパートＥに示されたように、非重複値は、単に、０に設定された任意の重複ビットＶを有する制限付き冗長ＲＨＰＡ値に対応する（上述されたように、先頭レーンはいかなる重複ビットももたないものとして扱うことができるので、非重複値において同じままであってもよい）。
【０１３２】
（ここでも、Ｎ＝８およびＶ＝４を用いて）上記に示された制限付き冗長ＲＨＰＡ値を例として取り上げる：
【数１８】
2019500672.tif 000025
対応する非重複値は以下のようになる。
【数１９】
2019500672.tif 000026
【０１３３】
一方、重複値の生成は、重複ビットのセットのうちのいくつかが−１を表す可能性があり、そのため、これらのビットの合計が＋１または０を表す重複ビットの合計から減算されるので、もう少し複雑である。たとえば、制限付き冗長ＲＨＰＡ値では、以下のようになる。
【数２０】
2019500672.tif 000027
重複ビットは以下を表すが、
【数２１】
2019500672.tif 000028
これらは、以下のように、非重複値の次の最上位レーンに対する調整を示す。
【数２２】
2019500672.tif 000029
（制限付き冗長ＲＨＰＡ値のレーン１内の重複ビットは、実際には、たとえばレーン２に対する調整値を表すことに留意されたい）。実際上、重複ビットは、＋１、０、または−１の符号付き数字を有する高基数の２の補数値を表すことがわかる。たとえば、（レーン３に加算されるべき）制限付き冗長ＲＨＰＡ値のレーン２内の重複ビットは、１＊２＾ｗ［３］を表す（ここで、ｗ［３］はレーン３の最下位ビットの重みである）。同様に、制限付き冗長ＲＨＰＡ値のレーン１内の重複ビットは、−１＊２＾ｗ［２］を表す、などである。
【０１３４】
したがって、すべての重複ビットの合計に等価な２の補数値は、０または＋１を表す重複ビットの合計から、−１を表す重複ビットの合計を減算することによって計算することができる。
【０１３５】
例Ａ：
【数２３】
2019500672.tif 000030
（重複ビットが０または＋１を表すレーン内の重複ビットの合計）
【数２４】
2019500672.tif 000031
（重複ビットが−１を表すレーン内の重複ビットの合計）
（第２の値をネゲートした）等価加算として表されるものは、
【数２５】
2019500672.tif 000032
である。
【０１３６】
実際には、制限付き冗長ＲＨＰＡ値の場合と同様に、重複値の各セットは値−１、０、および＋１しか取ることができず、レーン当たり最下位２重複ビットのみを考慮する必要があり（値０ｂ１１、０ｂ００、または０ｂ０１のうちの１つを取る）、すべての他の重複ビットはレーンの２番目の最下位重複ビットに等しくなる。
【０１３７】
したがって、図１４のパートＢに示されたように、レーン当たり２ビットしか考慮する必要がない。図１４のパートＢの左側に示されたように、第１の値ＶＨＲ＋は、最下位レーン以外の各レーンに対応する１対のビットを含めて形成され、ペアごとに、
−ペアの上位ビットは０に等しく、
−対応するレーン内の重複ビットが−１または０を表す場合、ペアの下位ビットは０に等しく、対応するレーン内の重複ビットが＋１を表す場合、１に等しい。
【０１３８】
この手法が上記の例に適用された場合、第１の値ＶＨＲ＋は、例Ａに示された最上位値において太字で示されたビットと等価になることに留意されたい。
【０１３９】
同様に、図１４のパートＢの右側に示されたように、第２の値ＶＨＲ−は、（最下位レーンを除く）レーン当たり１対のビットを含めて形成することができ、ペアごとに、
−ペアの上位ビットは０に等しく、
−対応するレーン内の重複ビットが＋１または０を表す場合、ペアの下位ビットは０に等しく、対応するレーン内の重複ビットが−１を表す場合、１に等しい。ここでも、これは、上記の例Ａに示された最下位値において、（太字で示された）レーン当たり最下位２ビットを効果的に表すことに留意されたい。
【０１４０】
次いで、第２の値ＶＨＲ−は、重複値の対応する２ビット部分Ｖ’［０］、Ｖ’［１］、Ｖ’［２］を生成するために、第１の値ＶＨＲ＋から減算することができる（またはＶＨＲ＋は、ＶＨＲ−の２の補数に加算することができる）。これらの２ビット部分の各々は、重複値の対応するレーンの最下位２ビットと等価である（上記の例Ａの重複値において太字で示されたレーン当たり２ビットを参照）。次いで、図１４のパートＥに示された重複値の対応するＮビット部分を生成するために、各２ビット部分を符号拡張（先頭ビットが０の場合０で拡張し、先頭ビットが１の場合１で拡張）することができる。
【０１４１】
パートＡ、Ｃ、およびＤは、パートＥにおける加算の対応するレーンに加算するための桁上げビットＣ［１］〜Ｃ［３］（桁上げビットＣ［０］は常に０）を決定するための桁上げ先見方式を示す。
【０１４２】
パートＡに示されたように、最下位レーン以外の制限付き重複ＲＨＰＡ値のレーンごとに、非重複ビットＮＶ［１］、ＮＶ［２］、ＮＶ［３］を検査するために、ロジック８２が提供される。所与のレーンＮＶ［ｉ］用のロジック８２は、対応する非重複ビットパターンＮＶＰ［ｉ］を決定し、これは以下のビットパターンのうちの１つを示す。
・Ｐｒｏｐａｇａｔｅ（ｐ）−ＮＶ［ｉ］のすべてのビットが１のとき
・ＮＶ［ｉ］のすべてのビットが０である場合のＫｉｌｌ（ｋ）
・ＮＶ［ｉ］の最下位ビットが１であり、すべての他のビットが０である場合のＧｅｎｅｒａｔｅ（ｇ）
・ＮＶ［ｉ］の最下位ビットが０であり、すべての他のビットが１である場合のＤｏｕｂｌｅ（ｄ）
・任意の他のビットパターンに対応するＵｎｉｎｔｅｒｅｓｔｉｎｇ（ｕ）。
【０１４３】
元の制限付き冗長ＲＨＰＡ値に対して演算するのではなく、ビットパターン識別ロジック８２は、パートＥに示された非重複値内の非重複ビットのセットに適用される可能性もあることが諒解されよう。したがって、一般に、非重複ビットの各セットのビットパターンが識別される。
【０１４４】
同様に、図１４のパートＣに示されたように、重複値のビットのペアを生成すると、ビットパターン識別ロジック８２は、非重複値に関するのと同じ方法で、ビットの各ペアを、ｐ、ｋ、ｇ、ｄのうちの１つとして分類する（重複値の場合、比較されるビットが２ビットしかないので、「興味のない」ケースｕを有することは可能ではない）。ここでも、以前よりむしろ、ビットのペアを符号拡張して、パートＥに示された完全な重複値を形成した後に、ビットパターン識別ロジック８２を適用することは可能であるが、依然として、重複値の所与のレーンの第２のビットよりも上位のすべてのビットが第２のビットと同じ値を有するので、「興味のない」ケースｕが生じる可能性はない。
【０１４５】
ビットパターン識別ロジック８２によって識別されたそれぞれの重複ビットパターンおよび非重複ビットパターンは、条件ｐ、ｋ、ｇ、ｄ、ｕのうちのどれが検出されたかを識別するために符号化されたマルチビット信号を使用して、または条件ｐ、ｋ、ｇ、ｄのうちの１つに各々が対応する一連の１ビットの指示、およびその条件が検出されたかどうかを識別することによって表される可能性がある（ｕは条件ｐ、ｋ、ｇ、ｄのうちのいずれかの不在によって表される可能性がある）。一般に、ビットパターン識別ロジック８２は、（たとえば、ＡＮＤゲートおよびＮＯＲゲートを使用して）上記で説明された条件を判定するための一組のロジックゲートを含む場合がある。
【０１４６】
図１４のパートＤに示されたように、最下位レーン以外のレーンごとに、桁上げ先見回路８４は、そのレーン内の非重複ビットの非重複パターンＮＶＰ［ｉ］および次の最下位レーン内の重複ビットの重複パターンＶＰ［ｉ−１］の指示を受け取り、これは、以下の表に従って、レーン生成信号ｇｉに、最下位レーンおよび２番目の最下位レーン以外のレーンの場合、レーン伝搬信号ｐｉにマッピングされる。
【表６】
2019500672.tif 000033
ここで：
・「Ｇ」とラベル付けされた場合、レーン生成信号ｇｉ＝１およびレーン伝搬信号ｐｉ＝０である
・「Ｐ」とラベル付けされた場合、レーン生成信号ｇｉ＝０およびレーン伝搬信号ｐｉ＝１である
・「Ｋ」とラベル付けされた場合、レーン生成信号ｇｉ＝０およびレーン伝搬信号ｐｉ＝０である
【０１４７】
次いで、レーン生成信号およびレーン伝搬信号がプレフィックスロジック８６に入力され、プレフィックスロジック８６は、５つ以上のレーンが存在する場合、以下の式に従ってレーンごとに桁上げビットＣ［ｉ］を生成する：
・Ｃ［０］＝０
・Ｃ［１］＝ｇ１
・Ｃ［２］＝ｇ２  ＯＲ  （ｐ２  ＡＮＤ  ｇ１）
・Ｃ［３］＝ｇ３  ＯＲ  （ｐ３  ＡＮＤ  ｇ２）  ＯＲ  （ｐ３  ＡＮＤ  ｐ２  ＡＮＤ  ｇ１）
などである。
【０１４８】
本質的に、各レーン内の重複値および非重複値のビットパターンを調べることにより、そのレーンへの桁上げがあった場合、桁上げアウトが存在するかどうかを判定することができ、したがって、各桁上げビットＣは、実際に加算を順次実行する必要なしに決定することができる。これにより、加算が連続して実行された場合と同じ結果を与えるために、パートＥがいくつかの並列加算７８を実行することが可能になる。
【０１４９】
レーンごとの図１４の演算はほとんど並列に実行することができるので、比較的広いベクトルの場合、最初に図１３の制限付き冗長変換を実行し、次に図１４の非冗長変換を実行することによって重複伝搬を実行することは、図１２に示された非冗長プロセスを実行することよりも高速であり得る。
【０１５０】
この重複伝搬方法のさらなる詳細は、下記の付録Ｂに提供される。
【０１５１】
重複削減演算はまた、図１５に示されたような重複累積演算を含む可能性もある。ＲＨＰＡアキュムレータレジスタ９０に格納されるべきＲＨＰＡアキュムレータ値を生成するために一連の累積を実行するとき、重複アキュムレータ値を格納するために第２のレジスタ９２も割り振られる。図１５に示されたように、重複アキュムレータレジスタ９２は、入力オペランドをＲＨＰＡアキュムレータレジスタに累積することを開始する前に、最初に０に設定される。
【０１５２】
重複削減が必要であるとき、ＲＨＰＡアキュムレータ値からの重複ビットの各セットが符号拡張され、重複アキュムレータレジスタ９０の対応する部分に加算される、重複累積演算９４が実行される。ＲＨＰＡアキュムレータレジスタ９０の重複ビットはゼロにされ、次いで、オーバーフローのリスクなしに、ＲＨＰＡアキュムレータレジスタ９０へのさらなる累積を実行することができる。
【０１５３】
ＲＨＰＡアキュムレータレジスタ９０が再びレーンオーバーフローのリスクがあるポイントに達した場合、ＲＨＰＡアキュムレータ値からの符号拡張重複ビットを、重複アキュムレータ値の対応する部分の以前の内容に再び加算するために、別の重複累積演算９４を実行することができる。
【０１５４】
したがって、重複アキュムレータ値は、ＲＨＰＡアキュムレータの各レーン内に生成された重複ビットの中間合計を効果的に保持し、ＲＨＰＡアキュムレータが重複ビットを使い尽くし始めるたびに、これらのビットが重複アキュムレータ値に加えられ、その結果、ＲＨＰＡアキュムレータの重複ビットをゼロにすることができる。重複アキュムレータ値は、（ＲＨＰＡアキュムレータ内のようにＶビットのみではなく）重複値を追跡するために利用可能なレーン当たりすべてのＮビットを有するので、ＲＨＰＡアキュムレータレジスタ９０および重複アキュムレータレジスタ９２の組合せからの情報を失う任意のリスクがある前に、ＲＨＰＡアキュムレータへの非常に多数の累積を実行することができる。
【０１５５】
ＲＨＰＡアキュムレータレジスタ９０への最終的な累積が完了すると、以下の３つのベクトルを加えることにより、ＲＨＰＡ形式で最終合計９６を計算することができる。
・重複ビットが０にクリアされた最終ＲＨＰＡアキュムレータ値に対応するベクトル９７
・最下位レーンが０であり、各後続レーンが最終ＲＨＰＡアキュムレータ値における次の最下位レーンからの重複ビットＶ”の符号拡張であるベクトル９８
・最下位レーンが０であり、各後続レーンが重複アキュムレータレジスタ９２内の次の最下位レーンの値に対応するベクトル９９。すなわち、重複アキュムレータレジスタ９２は、ベクトル９９を生成するためにＮビット左シフトすることができる。ベクトル９９の各要素は、任意の以前の重複累積演算９４において重複アキュムレータレジスタに加算されたすべての重複ビットの合計を表す。
【０１５６】
最終合計９６は、上述されたようにいくつかの並列Ｎビット加算回路ユニットを使用して、Ｎビットチャンク内で実行することができる。最終合計９６は、図７の例のように３：２の削減および桁上げ伝搬加算を使用することにより、または通常のＮビット加算器を使用して２つの連続する２入力整数加算を実行することにより、単一演算において計算される可能性がある。
【０１５７】
重複伝搬に比べて重複累積演算の利点は、重複累積演算のために実行される処理が完全にレーン内に留まり、１つのレーンの重複ビットを別のレーンに伝搬するために必要とされるようなレーン間のデータのシフトがないことである。重複累積手法では、レーン間でデータをシフトすることは、各重複累積演算９４ではなく、累積全体に対して一度実行されるはずの最終合計９６の計算中にのみ必要とされる。
【０１５８】
重複累積演算の別の利点は、（たとえば、多くの大きな数を加算することにより）全体としてＲＨＰＡベクトルをオーバーフローさせるが、次いで後に、（たとえば、大きな数を減算することにより）後続の累積の結果として範囲内に戻る合計が、（事実上高次レーンが重複ビットを得るので）情報の損失なしに正しく計算されることが可能になることである。
【０１５９】
一方、重複累積演算は、重複アキュムレータ値を格納するために第２のレジスタが割り振られることを必要とする場合があるので、レジスタ圧が累積当たり２つのレジスタを提供するのに十分なレジスタがないことを意味する場合、情報がＲＨＰＡアキュムレータと同じレジスタ内に保持されるように、レーン間で重複ビットを伝搬することができる重複伝搬演算が好ましい場合がある。
【０１６０】
したがって、重複削減は、重複伝搬または重複累積のいずれかによって達成される場合がある。
【０１６１】
２Ｖ−１を超える浮動小数点値（Ｖは先頭レーン以外の任意のレーン内の最小重複ビット数である）を累積したい場合があり、この場合、レーン間のオーバーフローを回避するために、重複削減演算が周期的に必要とされる場合がある。どちらの重複削減方法が使用されるかにかかわらず（重複伝搬方法および重複累積方法のうちのいずれも実行される可能性がある）、プロセッサは、様々な方法で重複削減演算をいつ実行するかを決定することができる。たとえば、これをいつ行うかを決定する３つの方法は以下を含む：
（１）累積された値の数をカウントし、ｋ回の加算または減算のたびに重複削減を行う（ここで、非冗長形式に変換する重複累積演算または重複伝搬演算を使用する場合、ｋ≦２Ｖ−１−１であり、制限付き冗長形式に変換する重複伝搬演算を使用する場合、ｋ≦２Ｖ−１−２である）。
（２）最大の正値（０ｂ０１１１…）もしくは最大の負値（０ｂ１０００…）、または、ほぼ最大の正値もしくはほぼ最大の負値について重複ビットを調べることにより、レーンオーバーフロー状態に近いことを検出する。これらの状態が検出されると、重複削減を実行する。サイクル当たり２つ以上の値がアキュムレータレジスタに累積される場合、オーバーフロー危険検出は、サイクル当たり１つの値しか累積されないときよりも早く重複削減演算をトリガする必要があり得る−たとえば、重複ビットが（２つの増分または減分がレーンオーバーフローにつながる可能性があるような）０ｂ０１１…１１０または０ｂ１００…００１を表すとき、オーバーフロー削減がトリガされる可能性があるサイクル当たり２つの値が累積される。したがって、一般に、処理回路は、重複ビットがある所定の値を超えたときを検出し、次いで重複削減演算をトリガすることができる。
（３）高次重複ビット（符号ビット）からの桁上げインおよび桁上げアウトを調べることにより、実際のレーンオーバーフローがあることを検出する。しかしながら、オーバーフローしていない状態に戻るために、これはいくつかの追加ロジックを必要とする場合がある。
【０１６２】
方法（１）に比べて方法（２）および（３）の理論的利点は、（１）のための計数方法が悲観的でなければならないことである。特に混合符号値を累積するとき、レーンオーバーフローのいかなる危険にもさらされる前に、２Ｖ−１を超える多くの累積が存在する可能性がある。一方、制限付き冗長形式への変換は非常に安価である（一部の実装では１サイクルで行うことができる）ので、実際には（１）が最もパフォーマンスが高い方法になる可能性が高い。
【０１６３】
上記の例では、重複削減演算は、ＲＨＰＡ値への累積とは別に実行される。しかしながら、ＲＨＰＡアキュムレータに別のＲＨＰＡ値を加算するのと同時に、重複伝搬演算を実行することも可能である。
【０１６４】
図１６に示されたように、第１のＲＨＰＡ値Ｒ１が制限付き冗長形式であるとき、第１のＲＨＰＡ値Ｒ１と、入力オペランド（たとえば、浮動小数点値ＦＰ）をＲＨＰＡ形式に変換すること（変換は、図１０および図１１について上述されたように実行することができる）によって生成された第３のＲＨＰＡ値Ｒ３との和に対応する第２のＲＨＰＡ値Ｒ２を生成するために、重複伝搬を実行することができる。制限付き冗長ＲＨＰＡ値Ｒ１は、２つのベクトル：第１のＲＨＰＡ値Ｒ１のすべての重複ビットが０に設定された非重複ベクトルＲＮＶ、および最下位レーンが０である重複ベクトルＲＶにマッピングされ、他のレーンは、第１のＲＨＰＡ値Ｒ１の先行レーンの重複ビットの符号拡張に設定される。
【０１６５】
次いで、いくつかの３入力Ｎビット加算が並列に実行されて、第２のＲＨＰＡ値Ｒ２の対応するＮビット部分を生成するために、非重複ベクトルＲＮＶ、重複ベクトルＲＶ、および第３のＲＨＰＡ値Ｒ３の対応するＮビット部分を加算する。これらの加算は、図７のように３：２の削減および桁上げ伝搬を使用して１ステップで、または標準の２入力加算器を使用して２ステップで実行される可能性がある。
【０１６６】
次いで、第２のＲＨＰＡ値Ｒ２は、異なる入力オペランドとの次の累積のための第１のＲＨＰＡ値Ｒ１として使用することができる。
【０１６７】
したがって、この手法では、累積とは別個の明確な重複伝搬演算を実行する必要はない。代わりに、別の値が累積されるたびに、制限付き冗長形式でＲＨＰＡ値を保持するために重複伝搬を実行することもできる。したがって、この手法は、重複削減が必要な時点を追跡する際にオーバーヘッドを発生させる必要性を排除することができる。
【０１６８】
図３６〜図３９は、ＲＨＰＡ変換された入力オペランドＲ３を、ベクトルＲＮＶ、非重複ビットに対応するＲＶ、および制限付き冗長ＲＨＰＡ値の重複ビットに加算することが、制限付き冗長でもある別のＲＨＰＡ値を生成する理由を説明する。浮動小数点数を変換し、制限付き冗長アキュムレータに加算していると仮定する。図３６は、３つのレーンにわたって配置された２つのオペランドを示す。制限付き冗長ＲＨＰＡ数の先頭重複部分内のビット「ｓ．ｅｘｔ」は、ＲＨＰＡ数が重複ビットにオーバーフローしていないことを示す。ＦＰ数の「ｓ．ｅｘｔ」ビットおよび変換後のＲＨＰＡの先頭レーンは、０または−１のいずれかであり得るし、どちらの場合も、「ｓ．ｅｘｔ」ビットが−１の場合、非重複ビットは非ゼロでなければならない（図３７参照）。
【０１６９】
次に、重複ビットを制限付き冗長ＲＨＰＡ数から１レーン左にシフトし、重複ビットを０にリセットする（図３８参照）。最後に、レーンごとの加算を実行すると、図３９に示されたように、制限付き冗長結果が残る。レーン０では、重複ビットは、入力ＦＰ数が正であり、その加算が桁上げアウトを引き起こす場合、＋１として終了する可能性がある。レーン１では、シフトアップされた重複部分内の−１がＦＰ数の非重複部分内の正のビットによって同化されるはずなので、ＦＰ変換が−１（の符号拡張）を残す場合、重複において−２を得ることはできない。同様に、２つの非重複部分を加算することが＋１の桁上げを引き起こす可能性がある場合、レーン０からのシフトアップされた＋１は第２の桁上げを引き起こす可能性はなく、逆もあり得るので、レーン１の重複において＋２を得ることはできない。最後に、同じ理由で、レーン２の重複部分において−２を得ることはできない。しかしながら、オーバーフローがある場合に限り＋１を得る可能性があり、また、レーン２の重複における−１は、次にオーバーフローを示す可能性がある。
【０１７０】
したがって、ＦＰの値および制限付き冗長ＲＨＰＡ値にかかわらず、加算の結果は依然として制限付き冗長である。ＦＰ値とアキュムレータとの加算および制限付き冗長重複伝搬を同時に実行するために図１６の手法が使用されるとき、制限付き冗長値についての可能な重複値｛＋１，０，−１｝は、２つの重複ビットのみで表すことができるので、（２番目の最下位重複ビットよりも上位のいかなるビットも、２番目の最下位重複ビットと同じ値を有するはずなので）レーン当たり３つ以上の重複ビットを提供する必要はないことに留意されたい。したがって、レーン当たりより多くのビットを非重複ビットとして使用することができ、所与のベクトル長を使用して表現され得る数値範囲が増大する。
【０１７１】
ＲＨＰＡ表現からの変換
図１７〜図１９は、ＲＨＰＡ値を浮動小数点値に変換するための様々な技法を示す。一般に、ＲＨＰＡ値がすでに非冗長形式（図１７もしくは図１９）または制限付き冗長形式（図１８）ではない場合、これが浮動小数点への変換を実行するより前のケースであることを保証するために、重複削減演算が実行される。
【０１７２】
図１７に示されたように、ＲＨＰＡが非冗長形式で、Ｎ−Ｖ≦Ｆｓｉｚｅ（ここで、Ｆｓｉｚｅは暗黙の１ビットを含む、生成されるべき浮動小数点形式で格納された仮数部のビット数である）であるとき、各レーンの非重複ビットは、１つの浮動小数点値の仮数部内にちょうど収まるので、丸めに起因する情報のいかなる損失もなしに、非冗長ＲＨＰＡ値の対応するレーンに等価な浮動小数点値を含むベクトルの各要素を使用して、浮動小数点値の対応するベクトルを生成することができる。
【０１７３】
したがって、最上位レーン以外の非重複ビットＮＶ［ｉ］の各レーンについて：
・Ｎ−Ｖ個の非重複ビットは、正規化されていない浮動小数点の仮数部の先頭Ｎ−Ｖビットに直接マッピングされる。Ｆｓｉｚｅ＞Ｎ−Ｖの場合、仮数部の最下位（Ｆｓｉｚｅ−（Ｎ−Ｖ））ビットはゼロである。
・そのレーン用の指数部Ｅ［ｉ］は、Ｅ［ｉ］＝ｗ［ｉ］＋Ｎ−Ｖ−１＋Ｂと等価に設定され、ここで、ｗ［ｉ］は（レーンの最下位ビットの有効桁を示す）そのレーン用のアンカー値であり、Ｎはレーンサイズであり、Ｖは重複ビットの数であり、Ｂは使用される浮動小数点表現のためのバイアス量である。
・（非冗長ＲＨＰＡ値では、先頭レーン以外のすべてのレーン内の重複ビットは、残りの非重複ビットについての正の値を示す０になるので）符号ビットＳは０である。
【０１７４】
一方、最上位レーン（この例ではＮＶ［３］）について：
・最上位非重複ビットが（ＲＨＰＡ値が全体として負であることを示す）１である場合、非重複ビットＮＶ［３］はネゲートされて、正規化されていない仮数部の対応するビットＮＶ’［３］が形成される。最上位非重複ビットが（正のＲＨＰＡ値を示す）０である場合、非重複ビットＮＶ［３］は、正規化されていない仮数部の対応するビットＮＶ’［３］に直接マッピングされる。Ｆｓｉｚｅ＞Ｎ−Ｖの場合、仮数部の最下位（Ｆｓｉｚｅ−（Ｎ−Ｖ））ビットはゼロである。
・指数部Ｅ［３］は、他のレーンの場合と同じように設定されるが、先頭レーン用のレーンアンカー値ｗ［３］に基づいて設定される。
・符号ビットＳは、先頭レーンの最上位非重複ビットに等しい。
各レーンの仮数部内の先頭「１」ビットが仮数部の最上位ビット以外のビット位置にある可能性があるので、これにより、正確であるが正規化されていない浮動小数点値のベクトルが生成される。したがって、レーンごとに、正規化回路１００は、所与のレーンの仮数部をシフトして、最上位ビット位置に先頭「１」ビットを置き、それに応じて指数部Ｅを調整し、次いで、格納された浮動小数点表現内で暗黙の先頭「１」ビットを破棄して、正確で正規化された浮動小数点値を生成する。値が非正規である場合、指数部Ｅは０に設定される。
【０１７５】
場合によっては、次いで、正確で正規化された浮動小数点ベクトルを、変換の結果として出力することができる。これは望ましい場合があり、その結果、浮動小数点形式に変換した後でも、元のＲＨＰＡ値の向上した精度を保持することができる。
【０１７６】
しかしながら、元のＲＨＰＡ値と（少なくともほぼ）等価な単一の浮動小数点値に変換するために、（図１７の下部に示されたように）ベクトルの浮動小数点要素を一緒に加算し、丸めて、最終的な浮動小数点結果を生成することができる。
【０１７７】
上述されたように、浮動小数点加算は結合的ではなく、浮動小数点要素が加算される順序は最終結果に影響を与える。最終結果がＲＨＰＡ値とほぼ等価であれば十分である場合、任意の順序で値を加算することが許容される場合がある。
【０１７８】
しかしながら、ＲＺ、ＲＰ、ＲＭ、ＲＮＡ、またはＲＸのうちの１つの丸めに従って丸めたときに正しく丸められた結果を提供するために、浮動小数点要素は、最下位要素から始まり最上位要素で終わる順序で加算することができる。たとえば、４つの浮動小数点要素では、これらは（（ＦＰ０＋ＦＰ１）＋ＦＰ２）＋ＦＰ３のように加算されるはずであり、ここで、括弧の所与のセットの内側に示された加算は、括弧の外側の次の項を加算する前に実行されるはずである。ＦＰ数が高次レーンから低次レーンに加算された場合、各加算の後に丸め値を生成する丸め増分が存在する可能性があり、これにより、実行される増分が多過ぎることにつながる場合がある。たとえば、スティッキービットを含む最高次の数でＲＰの丸めを実行するとき、スティッキーの故にＦＰの結果はすでに増分されているが、それに加算された各低次のＦＰ数で再び増分する。１０２４ビットの実装では、正しい値を計算した後にＦＰ値を１５回増分するかもしれない。この問題は、低次要素ＦＰ０およびＦＰ１を最初に加算し、次いで、先頭要素ＦＰ３に達するまで、後続の加算における次の最上位要素において続けて加算することによって回避することができる。
【０１７９】
ＲＮＥの丸めの場合、このように浮動小数点要素を加算すると、いつも正確に丸められた結果が得られるとは限らない場合がある。おおよその結果だけが必要な場合、これは問題ではないかもしれない。しかしながら、正確に丸められた結果が必要な場合、下記の図１９に関して記載される方法を代わりに使用することができる。
【０１８０】
図１８は図１７と同様の演算を示すが、元のＲＨＰＡ値が最初に制限付き冗長形式に変換されている（またはすでに制限付き冗長であった）場合である。この場合、Ｎ−Ｖ個の非重複ビットに加えて、最下位重複ビットも所与のレーンについて生成された対応する浮動小数点値の仮数部に寄与するので、この手法はＮ−Ｖ≦Ｆｓｉｚｅ−１であるときに機能する。また、制限付き冗長ＲＨＰＡ値の場合、レーンの各々は＋１または−１の値を表す重複ビットを有する可能性があるので、レーンの各々は（図１７の非冗長ＲＨＰＡの例における先頭レーンと同様に）符号付きの値として扱われる。
【０１８１】
したがって、各レーンｉについて：
・Ｎ−Ｖ個の非重複ビットＮＶ［ｉ］およびそのレーンの最下位重複ビットＶ［ｉ］は、正規化されていない浮動小数点仮数部の先頭Ｎ−Ｖ＋１ビットにマッピングされ、そのレーン内のＶ［ｉ］の２番目の最下位重複ビットが（負のレーンの重み付けを示す）１の場合、ネゲートが適用される。Ｆｓｉｚｅ−１＞Ｎ−Ｖである場合、仮数部の最下位Ｆｓｉｚｅ−１−（Ｎ−Ｖ）ビットはゼロである。
・そのレーン用の指数部Ｅ［ｉ］は、Ｅ［ｉ］＝ｗ［ｉ］＋Ｎ−Ｖ＋Ｂと等価に設定され、ここで、ｗ［ｉ］は（レーンの最下位ビットの有効桁を示す）そのレーン用のアンカー値であり、Ｎはレーンサイズであり、Ｖは重複ビットの数であり、Ｂは使用される浮動小数点表現のためのバイアス量である。重複部分からの追加ビットを考慮するので、この場合の指数部は図１７の場合よりも１だけ高いことに留意されたい。
・レーンごとの符号ビットＳ［ｉ］は、対応するレーン内の重複ビットＶ［ｉ］の２番目の最下位ビットと等しい。
ここでも、結果として生じた正規化されていない浮動小数点値が正規化されて、正確で正規化された浮動小数点値のベクトルが生成され、ベクトルは、図１７と同様に一緒に加算されて、最終的に丸められた浮動小数点値が生成される。
【０１８２】
図１７および図１８に示された技法の利点は、変換がほとんど、並行して各レーンをそれぞれの浮動小数点値に変換し、次いで加算することができる、並列プロセスであることである。図１７および図１８の例は、先頭レーンが、他のレーンと同様にＶ個の重複ビットを含むものとして扱われる対称性のためであることを仮定する。
【０１８３】
（図１７の場合）Ｎ−Ｖ＞Ｆｓｉｚｅまたは（図１８の場合）Ｎ−Ｖ＞Ｆｓｉｚｅ−１である場合、図１７または図１８に示された方法はまだ実行される可能性があるが、この場合、浮動小数点ベクトルは、元のＲＨＰＡ値の対応する要素に正確に対応しない、丸められた浮動小数点値のベクトルのはずである。これは、非重複ビットの数が１つの浮動小数点値の仮数部よりも大きいレーンが存在するためであり、そのため、これらをそれぞれの浮動小数点値に変換することは丸めを必要とするはずである。この場合、ＦＰベクトルはもはやＲＨＰＡ値を正確に表さないが、図１７および図１８と同じようにそれぞれのＦＰ要素を加算して、最終的に丸められたＦＰ値を生成することは、ＲＮＥ以外のすべての丸めモードに対して正確に丸められた結果をまだ与えることができる。
【０１８４】
あるいは、図１９に示されたように、ＲＨＰＡ値を浮動小数点値ＦＰに変換する異なる手法を使用することができる。これは、ＲＮＥの丸めが使用されている場合に特に有用である。この方法は、ＲＨＰＡ値が最初に非冗長形式に変換されている（またはすでに非冗長であった）と仮定する。図１９に示されたように、非冗長ＲＨＰＡ値の最上位ビットは、浮動小数点値ＦＰの符号ビットＳに直接マッピングされる。
【０１８５】
浮動小数点値の仮数部Ｆを生成するために、以下のように一連の演算が実行される。非冗長ＲＨＰＡベクトルＶｉの最上位ビットが１である（すなわち、ＲＨＰＡ値が負である）場合、ステップ１７０において、値全体がネゲート（反転し、１を加算）されて、修正ベクトルＶｉ’が生成される。正の値の場合、ＲＨＰＡベクトルＶｉはネゲートされず、変わらないままである（Ｖｉ’＝Ｖｉ）。したがって、修正ベクトルＶｉ’は、少なくとも１つの先行ゼロを有するので正の値を表す。修正ベクトルＶｉ’の最上位レーンから始めて、仮数部生成演算が要素ごとに順次実行される。最上位要素のための処理レーンは、その要素内の最初の非符号ビット（すなわち、１の最初のビット値）を検索する。この例では、レーン３内の上位要素は非符号ビットを含まないので、処理は次のレーン２に移動する。
【０１８６】
要素２についての処理は、１の非符号ビットを識別し、（重複ビットを含まない）非符号ビット１に先行するゼロの数を表す先行ゼロカウントＬＺＣを決定する。次いで、部分仮数部が対応するデータ要素Ｖｉ’［２］のｋビットから形成され、ここで、ｋ＝ｍｉｎ（Ｎ−Ｖ−ＬＺＣ、Ｆｓｉｚｅ）であり、Ｆｓｉｚｅは（暗黙のビットを含む）生成されるべきＦＰ値の仮数部内のビット数であり、ＬＺＣは先行ゼロカウントである。ｋビットの部分仮数部の値は、仮数部についてさらに取得されるべき残りのビット数の指示（Ｆｓｉｚｅ−ｋ）、ガードビットＧ、およびスティッキービットＳｔとともに出力される。Ｎ−Ｖ−ＬＺＣ＞Ｆｓｉｚｅである場合、ガードビットＧは、部分仮数部のために取られたビットの右側１桁の要素Ｖｉ’［２］のビットに等しく、Ｎ−Ｖ−ＬＺＣ＜＝Ｆｓｉｚｅである場合、Ｇ＝０である。同様に、Ｎ−Ｖ−ＬＺＣ＞Ｆｓｉｚｅ＋１である場合、スティッキービットＳｔは、ガードビットＧの右側の要素Ｖｉ’［２］の任意のビットのビット論理和に等しく、そうでない場合、スティッキービットＳｔ＝０である。
【０１８７】
次いで、処理は要素Ｖｉ’［１］用の次のレーンに移動し、そこで、別の部分仮数値が生成される。要素Ｖｉ’［１］の非重複ビットの上位部分は部分仮数部として選択され、ビットの数は、前のレーンから出力された値Ｆｓｉｚｅ−ｋに対応して取られる。このレーンはまた、ガードビットＧおよびスティッキービットＳｔの値を更新し、ガードビットＧは、部分仮数部用に取られた最下位ビットの右側の１桁の要素Ｖｉ’［１］のビットに等しく、スティッキービットＳｔは、ガードビットＧよりも下位の任意のビットのビット論理和に対応する。最下位要素Ｖｉ’［０］のための処理レーンは、上位レーンからスティッキービットＳｔを受け取り、要素Ｖｉ’［０］のすべてのビットを前のレーンからのスティッキービットＳｔと論理和することによってそれを更新する。
【０１８８】
次いで、レーン２および１に対して生成された部分仮数部は、連結されて仮数値Ｆを形成する。仮数部は、任意の所望の丸めモードを使用して、ガードビットＧおよびスティッキービットＳの値に基づいて丸められる。浮動小数点値ＦＰ用の格納された仮数部は、次いで、丸められた仮数部の最上位ビットを無視して、丸められた仮数値から取得され、それは浮動小数点表現において暗黙である。
【０１８９】
一方、浮動小数点値用のバイアスされた指部数Ｅは、
Ｅ＝ｗ［ｊ］＋Ｎ−Ｖ−ＬＺＣ＋Ｂ
のように決定され、ここで、ｗ［ｊ］は最上位非符号ビットが見つかったデータ要素Ｖｉ’［ｊ］の最下位ビットの有効桁（たとえば、図１９に示された例において要素ｗ［２］用のアンカーポイント値によって示された有効桁）であり、Ｎはレーンサイズであり、Ｖは重複ビットの数であり、ＬＺＣは先行ゼロカウントであり、Ｂは使用されている浮動小数点表現のためのバイアス値である。
【０１９０】
Ｆｓｉｚｅ≦Ｎ−Ｖである場合、図１９の例のように、多くても２つの隣接するデータ要素だけが丸められていない仮数部Ｆに寄与するビット値を含むことができ、他のレーンは符号ビットのみを含むより上位のレーンか、またはスティッキービットＳｔのみに寄与するより下位のレーンのいずれかである。また、レーン内の最初の非符号ビットの位置に応じて、１つのレーン内のビット値から丸められていない仮数部が完全に形成され得ることも可能である。Ｆｓｉｚｅ＞Ｎ−Ｖであるとき、丸められていない仮数部Ｆが、ベクトルの３つ以上の隣接するデータ要素から選択されたビットから形成されることは可能であり得る。
【０１９１】
ＲＨＰＡ値は、生成されるべき固定小数点形式または整数形式のビットと等価な有効桁のビットを単に選択することにより、固定小数点値または整数値にマッピングすることもできる。ただし、ＲＨＰＡ値が使用されている固定小数点形式または整数形式で表現可能な範囲外であるとき、これは時々オーバーフローまたはアンダーフローにつながる場合がある。したがって、ＲＨＰＡと浮動小数点との間で変換することがより一般的であり得る。
【０１９２】
図１７〜図１９に示された変換は、所与のＲＨＰＡ値を入力オペランドとして取り、それを（必要に応じて最初にＲＨＰＡ値を非冗長形式または制限付き冗長形式に変換することを含む）別のフォーマットの等価な値に変換する専用変換命令に応答して実行される場合がある。あるいは、変換動作は別の動作の一部であってもよい。たとえば、算術命令（たとえば、加算または乗算）は、ＲＨＰＡ値を使用して何らかの処理動作を実行し、その結果を浮動小数点、整数、または固定小数点などの別のフォーマットに逆変換するようにプロセッサを制御することができる。
【０１９３】
乗算
図２０は、ＲＨＰＡ形式を使用して２つの比較的長い整数の乗算を高速化する例を示す。ＲＨＰＡがないと、乗算は一連の部分積の順次加算を必要とする場合があり、比較的長い入力の場合は遅くなる可能性がある。ＲＨＰＡを使用することにより、部分積は、部分積のそれぞれのチャンク上で動作する並列加算を使用する単一演算で加算することができる、なぜなら、どの桁上げも重複ビット内に収容できるからである。これにより、（ＲＨＰＡ形式の）積がより高速に生成されることが可能になる。
【０１９４】
たとえば、整数値が非冗長形式の２つのＲＨＰＡ値Ａ＝（ａ２，ａ１，ａ０）およびＢ＝（ｂ２，ｂ１，ｂ０）にマッピングされ、各Ｎビット数字がＶビットの重複を有する（たとえば、Ｎ＝６４およびＶ＝１０では、整数ＡおよびＢが各々３×５４＝１６２ビットを有するはずである）場合、Ａ×Ｂは以下のように計算することができる。
【数２６】
2019500672.tif 000034
【０１９５】
このベクトル×ベクトルの乗算は、ベクトル×要素の演算のシーケンスとして実装される可能性がある。命令ＭＵＬは、２つの入力オペランドの積の下半分を計算し、命令ＭＵＬＨは、２つの入力オペランドの積の上半分を計算する。したがって、部分積行列は以下のようになるはずである。
【数２７】
2019500672.tif 000035
【０１９６】
元のオペランドａおよびｂが、レーン当たりＮビットを有するベクトルレジスタで利用可能である（たとえば、ベクトルレジスタが連続した負荷動作または同様の動作を格納された）場合、動作は、オペランドｂの選択された要素（ｂ０、ｂ１、またはｂ２）を乗算ステップごとの所望のレーンに「スプラット」する必要があるはずであり、他のレーンは要素の少なくとも１つに「０」を含む。この「スプラット」動作のために専用の命令が提供される可能性があり、または、これはｂの適切な要素を選択するための他の命令、次いでゼロ化を実行するマスクとのＡＮＤで実現される可能性もある。（「スプラット」を保存するために）乗算後、または（レーン間の移動データを保存するために）乗算前にシフトを行うことができる。
【０１９７】
部分積を加算し、結果をＲＨＰＡ形式で生成すると、積は（最初に非冗長ＲＨＰＡに変換し、次いでベクトルを整数形式にまとめ直し、重複ビットを除去することにより）整数値に逆変換することができる。これは、専用命令または一連のシフトのいずれかを使用して行うことができる。あるいは、ＲＨＰＡ積の値は、整数に逆変換するのではなく、ＲＨＰＡ形式でさらに処理される可能性がある。
【０１９８】
レーン位置情報
上述されたように、ＲＨＰＡ値の加算は、いくつかの並列加算回路ユニットを使用して効率的に実行することができる。通常、所与の実装のためのハードウェアは、所与の合計ベクトルサイズをサポートする特定の数の加算回路ユニット、たとえば、５１２ビットのハードウェア内の合計ベクトルサイズを与えるはずである、各々が６４ビット加算を実行するための８つの並列加算ユニットを提供することができる。しかしながら、所与のＲＨＰＡ値についての望ましい範囲は、実装されたベクトルサイズ、たとえば２５６ビットまたは１０２４ビットよりも大きくても小さくてもよい。ＲＨＰＡ値が実装されたベクトルサイズよりも小さいとき、２つ以上の別々のＲＨＰＡ値が１つのベクトル内に収まることができ、それにより、ハードウェアによって提供される処理レーンの異なるサブセットにより、２つ以上の別個の演算が並列に処理されることが可能になる。
【０１９９】
たとえば、図２１に示されたように、６４ビット加算器の８レーンを使用して、５１２ビットベクトルハードウェア実装のそれぞれの半分内に、２つの２５６ビットアキュムレータを並列に累積することができる。同様に、実装されたハードウェアベクトルサイズよりも大きいＲＨＰＡ値を計算するために、１つの命令がより大きなＲＨＰＡアキュムレータの下半分の処理をトリガすることができ、ハードウェアの第２のパスにおいて、アキュムレータの上半分を処理することができる。
【０２００】
しかしながら、所与のＲＨＰＡ値の最下位レーンおよび最上位レーンは、中間レーンとは異なるように処理される必要があるかもしれない。たとえば、所与のＲＨＰＡ値の最上位レーンの場合、高次レーンからのオーバーフローが真のオーバーフロー条件、すなわち、より大きなアンカー値またはより大きなアキュムレータでの再計算を必要とするエラーなので、レーンオーバーフローは異なるように扱われるかもしれないが、他のレーンからのオーバーフローは、重複伝搬が必要であり得ることを示すに過ぎない。一方、重複伝搬中に、最下位レーンは、それに加算されるべき低次重複ビットが存在しない（たとえば、最下位レーンが単に元のＲＨＰＡ値から直接マッピングされ、加算を必要としない図１３を参照）ので、他のレーンとは異なるように扱われるが、このレーンでは、任意の重複ビットをゼロにする必要がない場合がある（ここでも、最上位レーンが中間レーンと異なる図１３を参照）ので、最上位レーンが異なるように扱われる場合もある。
【０２０１】
他のレーンからの情報を考慮せずに、処理の各レーンが他のレーンとは独立して動作することを可能にするために、生成される全体的な結果値内のレーンの位置を示すレーン位置インジケータを提供することが有用であり得る。たとえば、図２１に示されたように、レーンごとに一連の２ビットタイプインジケータを含むレーン位置ベクトル２００が設けられる場合があり、タイプインジケータは、レーンが低次レーン（Ｌ）であるか、中間レーン（Ｉ）であるか、または高次レーン（Ｈ）であるかを示す。この例では、レーン０およびレーン４は低次レーンとして示され、レーン３およびレーン７は高次レーンとして示され、その他のレーンは中間レーンとして示され、各々が４レーンにまたがる２つの独立した結果値を最終結果が含むことを示す。各加算回路ユニット３８、４２は、対応するレーン用のレーン位置インジケータを、そのレーンによって処理されるべきオペランドと一緒に受け取り、レーン位置インジケータに応じてオペランドをどのように処理するかを決定する。
【０２０２】
たとえば、レーンオーバーフローが発生すると、加算回路ユニットは、レーン位置インジケータが、処理されている現在のレーンが対応する結果値内の最上位レーンであることを示すかどうかに応じて、いくつかのオーバーフロー処理応答のうちの１つを選択することができる。たとえば、処理は、現在のレーンが高次レーンであるときにオーバーフロー例外をトリガすることができ、そうでない場合、オーバーフロー例外を抑制することができる。高次レーン以外のレーンの場合、オーバーフローが発生すると、重複伝搬演算が実行される可能性がある。同様に、レーン位置インジケータは、上述されたように、重複伝搬がどのように実行されるかに影響を与える場合もある。
【０２０３】
図２２は、レーンの様々な構成を指定するレーン位置情報の他の例を示す。例１では、すべてのレーンは、各レーンが独立したＮビットの結果に対応することを示す高次レーンとして示される。この状況は、すべてのレーンが低次レーンとして示されることによって表される可能性もあることが諒解されよう。
【０２０４】
例２は、偶数レーンが低次レーンとして示され、奇数レーンが上位レーンとして示される場合を示し、その結果、要素の各ペアは２つの要素にまたがる結果値を表す。
【０２０５】
例３および４は、ＲＨＰＡ全体の結果値が１６レーンにまたがる場合を示すので、例３で定義されたレーン位置情報を伴う第１の計算は、（最下位レーンが低次レーンとして示され、他のレーンが中間レーンとして示された）結果の下半分を表し、例４で定義されたレーン位置情報を伴う第２の計算は、（上位レーンが高次レーンとして示され、他のレーンが中間レーンとして示された）結果の上半分を生成する。
【０２０６】
したがって、レーンタイプインジケータは、実装よりも広いアキュムレータにも有用である。たとえば、２５６ビットの実装に適合しなければならない５１２ビットのアキュムレータを考えてみよう。各々の累積は２回の加算を必要とする。（整数値のみを累積しているように）ベースアンカー値が０であり、重複サイズがｏｖｌｐ＝８であり、Ｈで高次レーンを、Ｉで中間レーンを、Ｌで低次レーンを示すと仮定する。そうすると、たとえば、レーンインジケータ、重複値、およびアンカー値を含む制御レーンは、Ｉ：８：１６８のようなものに見えるかもしれず、レーンが８つの重複ビットおよび１６８のアンカー値を有する中間レーンであることを意味する。５１２ビットアキュムレータの場合、低次アンカーベクトルは、値（Ｉ：８：１６８，Ｉ：８：１１２，Ｉ：８：５６，Ｌ：８：０）を有するはずであり、高次アンカーベクトルは、値（Ｈ：８：３９２，Ｉ：８：３３６，Ｉ：８：２８０，Ｉ：８：２２４）を有するはずである。ＦＰ入力をこれらの２５６ビットベクトルの両方に累積すると、正しい５１２ビットＲＨＰＡ値が与えられる。
【０２０７】
また、例５に示されたように、この種のレーン位置情報を提供することにより、異なるサイズのアキュムレータが同じベクトル内で並列に累積されることが可能になる。たとえば、例５では、ベクトルは、レーン位置識別子を使用して示されたアキュムレータ間の境界を有する１つの４レーンアキュムレータ（Ｈ：Ｉ：Ｉ：Ｌ）と、２つの２レーンアキュムレータ（Ｈ：Ｌ）とを含む。したがって、すべてのＲＨＰＡアキュムレータが同じサイズを有することは必須ではない。
【０２０８】
レーン位置情報は、プログラマが計算されているアキュムレータのサイズを設定できるように、プログラム可能であってもよい。場合によっては、レーン位置情報は命令の符号化内で識別される可能性があるが、しばしば、レジスタ内に保持される。図２３に示されたように、レーンの有効桁を指定するレーンアンカー情報Ｗと、重複ビットの数を識別する重複値Ｖとを提供する同じメタデータレジスタ２２内のそのレーンごとのレーン位置情報２００を保持することが便利であり得る。現在の浮動小数点形式用の有用なアンカーは、１６ビットに容易に適合することができるので、ＲＨＰＡベクトル自体に使用されるようなアンカーおよびアキュムレータに同じＳＩＭＤレジスタセットを使用する実装は、レーンタイプインジケータ２００も容易に保持することができる。
【０２０９】
ハードウェアによって処理されたベクトルが２つ以上の独立した値を含むとき、正しい入力値が正しいレーンにマッピングされたことを保証するために何らかの制御が必要とされる場合がある。場合によっては、ＲＨＰＡ加算を適用する前に、関連するデータを正しいレーンに配置するために、１つまたは複数の命令が実行される場合がある。しかしながら、他の場合には、これは、累積をトリガする同じ命令に応答して、ハードウェアによって行われる可能性がある。
【０２１０】
上述されたように、入力値がオペランドのベクトルとして指定されることが可能であり、オペランドのベクトルは、各々ＲＨＰＡ形式に変換し、次いで累積することができる。簡単な方法は、ＳＩＭＤベクトル内の同じ相対位置にあるそれらの入力ベクトル要素を、各アキュムレータに加算させることのはずであり、その結果、８個のＤＰ浮動小数点値の５１２ビットは、高次アキュムレータ内に累積された４つの高次ＤＰ値と、低アキュムレータ内に累積された４つの低次ＤＰ値とを有する可能性がある。
【０２１１】
しかしながら、図２４に示されたように、より柔軟な方法は、入力マップ情報３０２、３０４を使用して、入力浮動小数点ベクトル要素のどれが各レーン内に累積されるべきかを指定することであり得る。したがって、浮動小数点ベクトル３００は、レーン位置情報２００と、高次アキュムレータに加算されるべき浮動小数点値を識別する高入力マップ３０２と、低次アキュムレータによって加算されるべき浮動小数点値を指定する低入力マップ３０４とを一緒に提供される場合がある。この例では、高次は１１１１＿００００であり、そのため、高次アキュムレータを累積するための回路３１０は、浮動小数点入力ＦＰ４〜ＦＰ７に対応するＲＨＰＡ値を加算するはずである。同様に、低次入力マップ３０４は００００＿１１１１であり、そのため、低次アキュムレータを生成するための回路３１２は、ＦＰ０〜ＦＰ３に対応するＲＨＰＡ値を加算する。これらの加算を実行するための回路３１０、３１２は、たとえば、上記の図８に示された回路に相当する場合がある。
【０２１２】
そのようなマッピングははるかに柔軟であり、これにより、１つのアキュムレータ内の浮動小数点ベクトル３００の偶数レーン、および別のアキュムレータ内の奇数レーンを、（ＦＰ０＋ＦＰ２＋ＦＰ４＋ＦＰ６およびＦＰ１＋ＦＰ３＋ＦＰ５＋ＦＰ７を計算するために）それぞれ入力マップ０１０１＿０１０１および１０１０＿１０１０を用いて累積することなどの、他のタイプの演算が可能になり得る。入力マップは、特定のレーン内の関連データを配置するために実行されるべき他の命令の必要性を減らすために、ハードウェアが所与のベクトルの要素を異なる方法で組み合わせることを可能にし、パフォーマンスを向上させるのに役立つことができる。ここでも、レーン位置情報２００に関しては、入力マップデータは、アンカー値Ｗおよび重複ビットの数Ｖと同じメタデータレジスタ２２内に配置される可能性もある。
【０２１３】
上述の例は、一般に、重複ビットの数Ｖが（先頭レーン以外の）各レーン内で同じであることを仮定するが、これは必須ではない。図２５に示されたように、異なる数Ｖの重複ビットを有する異なるレーンでＲＨＰＡ値を定義することが可能である。たとえば、レーンごとに別々に重複ビットの数Ｖを指定する図２３に示されたタイプのメタデータベクトルレジスタ２２では、重複ビットの数は異なるレーンの場合異なるように設定することができる。
【０２１４】
たとえば、図２５では、メタデータベクトル２２の各要素は、フォーマット｛ＬＰ：Ｖ：Ｗ｝の要素であり、ここで、ＬＰはレーン位置情報であり、Ｖはそのレーンについての重複サイズであり、Ｗはそのレーン内の最下位ビットの有効桁を指定するアンカー値である）。この例では、５１２ビットのＲＨＰＡ値は８つの６４ビットレーンから形成される。メタデータ２２は、最下位４レーンがレーン当たり１２個の重複ビットを有し、次の３レーンがレーン当たり２つの重複ビットを有し、先頭レーンが０個の重複ビットを有することを指定する。図２５の下部は、各６４ビットレーンの相対的な有効桁を示し、下位４つのレーンは先頭４つのレーンよりも大きな数のビットだけ重複する。これは、隣接レーン用のレーンアンカーＷが、最上位４レーンでは６２（６４−２）だけ異なるが、最下位４レーンでは５２（６４−１２）だけ異なることを意味することに留意されたい。
【０２１５】
この手法は、たとえば、所与の範囲の数値をＲＨＰＡ形式に収める必要がある場合に有用である可能性があるが、実際には、ほとんどの値が全範囲を使用しない傾向がある。この場合、多くの値に対して、いくつかの上位ビットは符号ビットなので、一連のそのようなＲＨＰＡ値に対して他の処理動作を追加および実行すると、上位レーン内のビットを非常に頻繁には変更しない場合がある。一方、下位レーン内のビットはより頻繁に変化し、桁上げをより頻繁に引き起こす場合がある。下位レーンは上位レーンよりもオーバーフローのリスクが大きいので、上位レーンよりも下位レーン内に重複ビットを多く設けることは有用であり得る。このようにして、下位レーンは依然としてレーンオーバーフローに対する保護を強化している可能性があるが、必要とされる可能性が低い上位レーン内に同じ数の重複ビットを不必要に割り振る必要はないので、代わりに、上位レーンのより多くのビットは、非重複ビットとして使用されて、ＲＨＰＡベクトル全体の所与のビット数Ｍで表すことができる範囲を拡張することができる。このようにして、所与の範囲はより小さいベクトルを使用して表すことができるか、または所与のベクトルはより大きな範囲を表すことができる。
【０２１６】
図２５は、２つの異なる重複サイズを有する例を示すが、他の例は、下位レーンから上位レーンへの重複ビットの数のより漸進的な削減を提供する可能性があることが諒解されよう。また、他の例は、各レーンにより多くの任意の重複サイズを割り当てる可能性がある。ベクトルが（レーン位置情報によって示されるように）いくつかの独立したデータ値を含む例では、独立した値の各々に対して異なる重複サイズを定義することも可能なはずである。
【０２１７】
長いオペランドの乗算
ＲＨＰＡ形式は、長整数値などの比較的長いオペランドの乗算を高速化するために使用することもできる。図２６は、各々が４つの６４ビット部分（ａ３，ａ２，ａ１，ａ０）、（ｂ３，ｂ２，ｂ１，ｂ０）に分割された２つの２５６ビット整数値ａ、ｂを乗算する例を示す。処理回路１４は、乗算回路４００と、変換回路３４と、加算回路３８とを含む。
【０２１８】
乗算回路４００は、第１の整数ａの選択された６４ビット部分ａｙと第２の整数ｂの選択された６４ビット部分ｂｚとを乗算することにより、１２８ビット部分積ａｙ×ｂｚを生成する６４×６４ビット乗算器を含む（ａｙはａ３、ａ２、ａ１、ａ０のうちのいずれかであり、ｂｚはｂ３、ｂ２、ｂ１、ｂ０のうちのいずれかである）。
【０２１９】
乗算回路４００によって生成された１２８ビット部分積は、変換回路３４に渡され、変換回路３４は、上述された技法と同様の方法で、積をＲＨＰＡ形式に変換する。したがって、変換回路は、冗長部分積の対応するレーンを生成するためのいくつかのレーン変換ユニット３４−０〜３４−ｘを含む場合がある。各レーン変換ユニット３４−０〜３４−ｘは、乗算回路４００により生成された部分積ａｙ×ｂｚと、その部分積の有効桁を示す有効桁指示情報ｗとを供給される。たとえば、有効桁指示情報は、ａｙ×ｂｚの所与のビット（たとえば、最上位ビットまたは最下位ビット）の有効桁を示すことができる。各レーン変換ユニット３４−０〜３４−ｘは、部分積が対応するレーンの範囲内にある有効桁の任意のビットを有するかどうかを判定し、そうである場合、部分積のビットを対応するレーン内の対応するビットにマッピングする。図１０および図１１の例のように、下位レーンの重複ビットは符号ビットで埋められる。
【０２２０】
一般に、図１１に示された方法は、以下を除いて、各レーン変換ユニット３４−０〜３４−ｘによって使用されてもよい：
・図２６で変換される積は、図１１のようにＦｓｉｚｅビットではなく１２８ビットを有するので、Ｌｓｈｉｆｔを０に設定するためのしきい値は、Ｚ≧Ｎ−Ｖ＋Ｆｓｉｚｅではなく、Ｚ≧Ｎ−Ｖ＋１２８である（より一般的には、整数ａおよびｂがそれぞれＸビットおよびＹビットのチャンクに分割される場合、しきい値はＺ≧Ｎ−Ｖ＋Ｘ＋Ｙである）。
・式Ｚ＝Ｅ−Ｂ−ｗ［ｉ］＋１において、「Ｅ−Ｂ」はＦＰ値の真の指数部を表し、これは仮数部の最上位ビットの有効桁を表す。したがって、これは、有効桁指示情報ｗによって明示的に識別されるか、または有効桁指示情報から導出され得る、部分積の最上位ビットの有効桁の指示と置き換えられる（たとえば、ｗが部分積の最下位ビットの有効桁を示す場合、Ｅ−Ｂは、ｗ＋１２７、またはより一般的にはｗ＋Ｘ＋Ｙ−１と置き換えられるべきである）。
【０２２１】
部分積をＲＨＰＡ形式に変換すると、加算回路３８は、同様にＲＨＰＡ形式で表されたアキュムレータ値に変換された部分積を加算して、ＲＨＰＡ形式の更新アキュムレータを生成する。加算回路３８は、変換された部分積の対応するレーンとアキュムレータとを加算して、更新アキュムレータの対応するレーンを生成するための、いくつかの並列加算回路ユニット３８−０〜３８−ｘを含む。加算は、いくつかのより小さい並列加算を使用して実行されるので、それは迅速に実行することができる。
【０２２２】
この演算を選択された部分ａｙ、ｂｚとして整数ａ、ｂの部分の異なるペアを使用して何回か繰り返していくつかの部分積を生成し、各部分積をアキュムレータレジスタに累積することにより、アキュムレータレジスタ内の最終結果は、元の整数ａ、ｂの積に対応する。累積がＲＨＰＡ形式で実行されるので、いくつかのより小さい（たとえば６４ビットの）独立した加算を並列に使用して、長い（たとえば５１２ビットの）加算を実行することができ、重複ビットを使用して桁上げが収容されるので、乗算演算全体は、従来の技法よりもはるかに高速に実行することができる。
【０２２３】
図２７に示されたように、所与の部分積をアキュムレータに加算するための加算演算が、後続の部分積を生成するための乗算と並行して実行され得るように、乗算演算全体をパイプライン化することができる。この例では、表記ａｙ×ｂｚ（ｗ）は、部分積ａｙ×ｂｚの最下位ビットが有効桁ｗを有することを示す。図２７の例では、各々の６４＊６４ビット乗算は３サイクルかかり、加算は１サイクルかかるので、連続する乗算および加算をパイプライン化することにより、演算全体は、３＋１６サイクル＝１９サイクルしか必要としない。対照的に、以前の技法では、２つの２５６ビット整数の５１２ビット積を計算することは、通常６０サイクル以上を必要としたはずである。
【０２２４】
したがって、図２７に示されたように、乗算は、一連の部分積累積演算として見ることができ、各部分積累積演算は、部分積を生成するオペランドの選択された部分ａｙ、ｂｚの乗算、部分積のＲＨＰＡ形式で変換された部分積への変換、およびいくつかの並列小型加算を使用する変換された部分積のＲＨＰＡ形式でのアキュムレータへの加算をトリガする。アキュムレータＡｃｃは、最初の積が累積される前にゼロに初期化されることに留意されたい。
【０２２５】
場合によっては、オペランドａ、ｂを指定する単一の乗算命令は、復号回路２０によって、各々が部分積累積演算のうちの１つを実行するように処理回路１４を制御するための別々の乗算−累積マイクロ演算に復号される可能性がある。たとえば、各マイクロ演算は、乗算されるべき整数の特定の部分ａｙ、ｂｚを識別することができる。他の例では、デコーダによって受け取られたプログラム命令は、部分積累積演算の各々に対応する別々の乗算累積命令をすでに含む場合がある。
【０２２６】
部分積は、図２７に示されたものとは異なる順序で計算される可能性があることが諒解されよう。どの順序で部分積が計算されたかにかかわらず、最終結果は同じである。
【０２２７】
サイクル１９の終了時に得られる積は、依然としてＲＨＰＡ冗長形式である。積は、さらなる計算（たとえば、いくつかの積の合計を計算すること）のために使用される場合、このフォーマットに保持することができ、または、上述された変換方法のうちのいずれかを使用して、積を非冗長形式に変換することができる。
【０２２８】
ＲＨＰＡ積を後の累積の一部と並行して非冗長形式に変換するための重複伝搬の実行を開始することが可能である。図１２に示されたように、非冗長重複伝搬は、ＲＨＰＡ値の下端から上端まで上昇する一連の逐次加算を含む場合がある。図２８に示されたように、部分積が有効桁の昇順で決定された場合、プロセスの特定のポイントを超えて、最終的なＲＨＰＡ積のいくつかの下位レーンが完了し、その後の累積によって更新されないので、そのような下位レーンに作用する重複伝搬加算は、上位レーンに影響を与える累積が完了する前に実行することができる。
【０２２９】
たとえば、図２８は、各６４ビットレーンが８つの重複ビット（Ｎ＝６４、Ｖ＝８）を有するので、５１２ビット積を表すために１０個の６４ビットレーンが使用され、各レーンの最下位ビットは、それぞれ、有効桁｛５０４，４４８，３９２，３３６，２８０，２２４，１６８，１１２，５６，０｝を有する。サイクル５の終わりまでに、すべての後続の累積が有効桁１２８以上のビットに作用するので、積のビット０〜１２７は完了する。したがって、（積のビット０〜１１１に対応する）最下位２つのレーンが完了しているので、サイクル６で重複伝搬加算を実行して、最下位レーンの重複ビットＶ［０］を次のレーンの非重複ビットＮＶ［１］に加算し、その加算結果でアキュムレータのレーン１を更新することができる。
【０２３０】
同様に、サイクル８の終わりまでに、有効桁１９１以下のビットはもはや更新されず、次の重複伝搬加算ＮＶ［２］＋Ｖ’［１］に必要な先頭ビットは有効桁１６７を有するので、それはサイクル９において実行することができる。Ｖ’［１］は、サイクル６で実行された重複伝搬加算からもたらされる修正重複ビットであることに留意されたい）。
【０２３１】
同様に、後続の重複伝搬加算の各々は、その加算によって必要とされるビットが完了するとすぐに実行することができ、いかなるその後の累積によってももはや更新されない。この例では、これにより、最初の５つの重複伝搬加算が上位レーンに影響を与える累積の一部と並行して実行されることが可能になり、その結果、非冗長重複伝搬の完了は、別の４サイクルしか必要とせず、乗算および非冗長形式への変換全体に合計２３サイクルを与える。したがって、非冗長重複伝搬が使用される場合でも、重複伝搬のオーバーヘッドの一部が、累積と部分的に並行してそれを実行することによって回避することができるので、サイクルの総数は比較的低いままである。
【０２３２】
各重複伝搬加算が実行され得る特定のタイミングは、（元の整数のサイズに依存する）生成される部分積の数、各乗算ステップによって生成される部分積のサイズ、ＲＨＰＡアキュムレータに使用されるベクトルレーンサイズＮ、およびレーンごとに提供される重複ビットの数Ｖなどの因子に依存する。
【０２３３】
あるいは、図２７に示されたすべての累積が完了した後に、図１２の非冗長変換を使用することにより、または、図１３に示されたような制限付き冗長重複伝搬演算を実行し、次に図１４に示された桁上げ先見方式を使用して非冗長形式に変換することにより、重複伝搬が実行される可能性がある。
【０２３４】
長整数を乗算するためのこの方法は、いくつかの利点を有する。第１に、図６に示されたように、乗算器４００およびＲＨＰＡ数の加算を実行するための回路以上のさらなる回路をほとんど必要としない。ＲＨＰＡ処理レーンは、適切な場所に数の一部を累積する（レーン変換ユニット３４を使用して、重み値ｗに基づいて入力から適切なレーンにデータをマッピングする）方法をすでに「知っている」ので、大きな整数乗算も以前よりはるかに高速であり得る。したがって、一例では、ハードウェアは単一のＸ＊Ｙビットパイプライン化乗算器を含み、（Ｘ＋Ｙ）ビット積および別個の指数類似値ｗは、最小積ビットの値が何であるかを示す。乗算を実行し、その部分積をＲＨＰＡアキュムレータに加算する乗算累積演算が提供される。
【０２３５】
したがって、乗算用のオペランドとして、より大きな整数の２つの下位部分ａｙ、ｂｚ、ＲＨＰＡアキュムレータ用の少なくとも１つのベクトルレジスタ（オプションとして、ＲＨＰＡアキュムレータのアンカーを指定するために第２のベクトルレジスタも提供される場合がある）、および暗黙の指数部用の小さな定数（重みｗ）を指定する乗算累積命令が提供される場合がある。
【０２３６】
上記に示された実施形態では、部分積ごとの重みｗは常に６４の倍数なので、実際には数ビットで十分である。３ビットの数は、暗黙の指数部０、６４、１２８、１９２、２５６、３２０、３８４、および４４８を有する、２５６×２５６ビット積を扱うはずである。図２７および図２８には４４８は示されていないが、各部分積は１２８ビット幅なので、部分積の各６４ビット部分に別々の重み値を割り振る方が簡単な場合があり、その結果、それらは６４ビットレーン変換ユニットによって直接変換することができ、したがって、ａ３×ｂ３の積の上半分の有効桁を示すために４４８が使用される場合がある。同様に、４ビットの数は５１２×５１２ビットの積を処理するはずである。
【０２３７】
いくつかの例では、ＲＨＰＡアキュムレータベクトルは、上述されたようにメタデータを表す様々な例のうちのいずれかを使用して定義され得る関連アンカー値を有してもよい。したがって、特定の数値範囲のみが対象である場合、アンカー値は、乗算中に計算されるレーンの数を制限するために使用することができ、積のビットの一部がアンカー値によって示された範囲外である場合、オーバーフローまたはアンダーフローが通知される。アンカー値が提供される場合、各レーン変換ユニットは、入力−（アンカーから決定されるような）ＲＨＰＡベクトルの対応するレーンの有効桁を示す１つ、および現在のステップにおいて生成される部分積の有効桁を示す１つ（図２６に示された重み値ｗ）を示す２つの有効桁を受け取ることができる。これは、ＦＰ値の指数部Ｅおよびアンカー値ｗ［ｉ］を２つの有効桁指示入力として使用する図１１に類似するはずである。
【０２３８】
しかしながら、入力オペランドが整数である場合、それらは常にゼロに対応する最下位ビットを有する固定された有効桁を有する。したがって、ＲＨＰＡベクトルが２つの整数の積をカバーするのに十分大きい（たとえば、２つの６４ビット整数を乗算する例では少なくとも５１２ビット）場合、ＲＨＰＡベクトル用の明示的なアンカーは必要としない。したがって、この演算のためにアンカーベクトルレジスタを割り振る必要はなくてもよい。たとえば、最下位レーン用のｗ［ｉ］をデフォルトで０であると仮定してもよく、他のレーン用のｗ［ｉ］は（Ｎ−Ｖ）の特定の倍数に対応してもよく、ここで、Ｎはレーンサイズであり、Ｖは重複サイズである。ＲＨＰＡアキュムレータ用にＲＨＰＡアンカーが設けられていない場合、重複サイズＶは命令から暗黙的になる場合がある（たとえば、上述されたタイプの乗算累積命令は、常に特定の重複サイズＶ（たとえば、８または１２ビット）を使用するように暗黙的に仮定される可能性がある。
【０２３９】
この技法の別の利点は、図２０に示されたように入力オペランドをＲＨＰＡ形式に変換する必要がないことである。部分は、より長い整数から簡単に抽出し、より小さい乗算器４００を使用して乗算することができ、部分積のみをＲＨＰＡに変換し、それは部分積をアキュムレータに累積するのと同じサイクルで行うことができる。したがって、最初の乗算を実行する前に入力をＲＨＰＡに変換する際にさらなるサイクルを負う必要はない。
【０２４０】
また、この技法は、既存の長い乗算器よりもはるかに高速である。たとえば、５１２ビットの積を計算することは、たとえば、図２７に示された１９サイクルとは対照的に、既存のハードウェア上で約６０命令、およびさらに多くのサイクルを必要とするはずであると推定される。
【０２４１】
図２６に示された６４×６４ビットの乗算は単なる例であることが諒解されよう。任意のＸビット×Ｙビット乗算器は許容可能なはずであり、ここで、ＸはＹに等しい（等しいサイズのアイテムの乗算）か、またはＹとは異なる（２つの異なるサイズのアイテムの乗算）場合がある。したがって、入力オペランドが等しいサイズの部分に分割されることは必須ではない。
【０２４２】
また、入力オペランドが同じ数の部分をもつことは必須ではない。たとえば、６４ビット部分ａ３、ａ２、ａ１、ａ０、およびｂ１、ｂ０を使用して、１２８ビット整数による２５６ビット整数の乗算が実行される可能性がある。
【０２４３】
場合によっては、入力オペランドのうちの１つは１つの部分のみを有する場合があり、他のオペランドは複数の部分を含む。たとえば、ａ７×ｂ、ａ６×ｂ、…、ａ０×ｂに対応する８つの部分積累積を使用することにより、６４ビット部分ａ７〜ａ０から形成される５１２ビット整数は、６４ビット整数ｂと乗算される可能性がある。
【０２４４】
また、冗長アキュムレータのレーンサイズが、オペランドａ、ｂが分割された部分のサイズと同じであることは必須ではない。より一般的には、冗長アキュムレータのレーンサイズは、入力オペランドに使用される部分サイズＸまたはＹとは異なる可能性があるＮビットであってもよい。
【０２４５】
したがって、入力オペランドの相対的なサイズ（または部分の数）、入力オペランドが分割される部分のサイズＸ、Ｙ、および冗長アキュムレータによって使用されるレーンサイズＮにかかわらず、オペランドのうちの少なくとも１つが比較的長い所与の乗算は、いくつかのより小さい部分積乗算に分解することができ、生成された部分積を冗長形式で加算して、演算全体が従来の整数表現を使用するよりも速く実行されることを可能にすることができる。
【０２４６】
また、入力オペランドが整数であることは必須ではない。たとえば、入力オペランドの一方または両方は、ＦＰ値またはＲＨＰＡ値である可能性がある。たとえば、ＲＨＰＡ値をＤＰ  ＦＰ値と乗算する場合、ＲＨＰＡ値の各レーンは、対応する部分積を生成するためにＤＰ  ＦＰ値の仮数部と乗算される可能性があり、部分積に関連付けられた重みｗは、ＲＨＰＡアンカーおよびＦＰの指数部から導出され、部分積の各々は、ＲＨＰＡ形式に変換され、図２６に示されたのと同じ方法でＲＨＰＡレジスタに累積することができる。別の例では、暗号鍵は、一連のＸ＊Ｙビット乗算を使用してより小さい値と乗算される可能性がある。
【０２４７】
図２６の例では、有効桁を示す値ｗは、積ａｙ×ｂｚとは別に表される。しかしながら、別の選択肢は、有効桁を示す値を積自体の中で直接符号化することである。
【０２４８】
たとえば、図２９に示されたように、代替の実施形態は、入力を５３ビットのチャンクに分割し、適切な指数部で各チャンクを符号化ことのはずであり、その結果、入力オペランドは、浮動小数点要素のベクトルとして効果的に表される。したがって、乗算器に供給される部分ａｙ、ｂｚの各々の選択されたペアは、単にＤＰ  ＦＰ値のペアである。図３０に示されたように、次いで、ＤＰ  ＦＰ乗算器は、ＤＰ  ＦＰ値のペアを乗算して、乗算される２つのＦＰ値ａｙ、ｂｚの指数部の合計に対応する指数Ｅｐｒｏｄｕｃｔと一緒にフル精度１０６ビット部分積を生成するために、使用することができる。次いで、有効桁を示す値として指数部Ｅｐｒｏｄｕｃｔを使用して積をＲＨＰＡに変換し、上記のようにＲＨＰＡ形式で累積することができる。この手法では、Ｅｐｒｏｄｕｃｔは、最下位ビットではなく、部分積の最上位ビットを示すであることに留意されたい。
【０２４９】
図２９および図３０の方法は、指数部が数に組み込まれている（暗示的または明示的な重みを示す値ｗを必要としない）ので、命令符号化を簡略化するはずである。図２９に示されたように長整数をＤＰチャンクに変換するために、ベクトルのそれぞれの６４ビットレーン内に５３ビットの各チャンクを配置するために、置換ユニットを制御するための追加命令が提供される場合がある。
【数２８】
2019500672.tif 000036
置換の後、各レーンはその入力をＤＰ数に変換する。レーンｉ用の指数部は、レーンｉの低次５３ビット内の先行ゼロをカウントしてＬＺＣ［ｉ］を取得し、次いで指数部を５３×（ｉ＋１）−ＬＺＣ［ｉ］に設定することによって計算される。仮数部は通常の方法で構築され、先頭の１を破棄して小数を左揃えにする。
【０２５０】
概要
いくつかの特定の例が上述されたが、より一般的には、処理回路は、いくつかのＮビット部分を使用してＰビット数値を表す冗長表現を有するＭビットデータ値を処理することができ、ここで、Ｍ＞Ｐ＞Ｎである。処理回路は、アンカー値に基づいて冗長表現の各Ｎビット部分のビットの有効桁を識別することができる。少なくとも２つの隣接するＮビット部分のグループ内で、グループの下位部分の複数の重複ビットは、グループの少なくとも１つの上位部分の複数の最下位ビットと同じ有効桁を有する。処理回路は、いくつかの独立したＮビット演算を並列に実行するいくつかの演算回路ユニットを有し、各Ｎビット演算は、冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む。
【０２５１】
この手法により、比較的長いオペランドが並行して実行されるより小さいＮビット演算において処理されることが可能になるが、サポートされる範囲全体をカバーするのに十分広い加算器を提供するハードウェアのコストなしに、幅広い数値が表されることがさらに可能になる。アンカー値を使用することにより、計算されるべき有効桁の境界を制限することができ、その結果、必要とされるハードウェアがより少なくなり、実際には、これは最も実用的な計算が実行されるのに十分である。あらゆる加算にレーン間の伝搬を必要とするのではなく、レーン内で桁上げを収容することができるので、重複ビットにより、より短いＮビットチャンク内の比較的長いＭビットデータ値の高速処理が可能になる。
【０２５２】
オペランド値の対応するＮビット部分に対して、多くの様々な種類の処理動作を実行することができる。たとえば、各Ｎビット演算は、加算、減算、乗算、論理演算、ガロア体演算など、またはそのような演算のうちの２つ以上の組合せであり得る。
【０２５３】
しかしながら、この技法は、Ｎビット演算が加算または減算である場合に特に有用である（一般に、Ａ−ＢはＡ＋〜Ｂ（ここで、〜ＢはＢの２の補数）と等価なので、「加算」という用語は減算を含むと解釈されるべきである）。加算は多くの処理システムでは非常に一般的な演算であるので、（各レーン内に保持される桁上げを伴う）いくつかの並列Ｎビット演算でそれらが実行されることを可能にすることによってＭビットデータ値の加算を高速化することは、所与の処理システムの処理パフォーマンスを改善するために有用である。Ｎビット演算が加算であるとき、これらは単純な加算命令だけでなく、乗算、乗算累積、または、演算の一部として加算を含む任意の他の種類の演算用の命令のなどの、他のタイプの命令も含む、広範囲のタイプの命令に応答して発生する可能性がある。
【０２５４】
演算回路ユニットによって実行されるＮビット演算は、異なるＮビット演算の間で伝搬される桁上げがないという意味で「独立」であり得る。
【０２５５】
処理回路は、プログラム可能アンカー値に基づいて冗長表現の各Ｎビット部分のビットの有効桁を識別することができるが、Ｎビット演算自体の間は、通常、アンカー値を考慮するいかなる必要性もない。アンカー値は、冗長表現と他のフォーマットとの間で変換するとき、たとえば、冗長表現内の値の通常の処理中でないとき、参照される場合がある。
【０２５６】
一般に、処理回路は、冗長表現を有する変換されたＭビットデータ値に入力値を変換する第１のタイプの変換動作を実行することをサポートすることができる。入力値は、たとえば、浮動小数点、整数、または固定小数点などの異なるフォーマットの範囲内の可能性がある。変換動作は、ＲＨＰＡ形式で変換されるべき所与のオペランドを指定するスタンドアロンの変換命令に応答して実行される可能性がある。あるいは、変換動作は、別のタイプの命令に応答して実行されるより一般的な処理動作の一部の可能性がある。たとえば、累積命令は、アキュムレータ値に加算される前に冗長表現に変換された入力値を指定する可能性があり、乗算変換命令は、２つのオペランドが一緒に乗算されることをトリガするする可能性があり、次いで、乗算の積は冗長表現に変換される場合がある。
【０２５７】
変換動作では、入力値の符号に応じて、任意の重複ビットが設定される場合がある。したがって、重複ビットは、冗長表現の次のレーンに対する正または負の調整値の両方を示すことができる符号付き値であり得る。場合によっては、重複ビットは、入力値が正のときは０に設定され、入力値が負のときは１に設定される場合がある。
【０２５８】
より詳細には、浮動小数点値を冗長表現に変換するために、変換動作は、プログラム可能なアンカー値および浮動小数点値の指数部に応じて、Ｍビットデータ値内の対応する有効桁のビットに浮動小数点値の仮数部のビットをマッピングすることであって、少なくとも１つのＮビット部分のＶ個の重複ビットが０に設定され、入力値が正のとき、マッピングの結果を変換されたＭビットのデータ値として出力する、マッピングすることと、入力値が負のとき、変換されたＭビットデータ値を生成するためにマッピングの結果をネゲートすることとを含む場合がある。
【０２５９】
アンカー値が、各レーンの有効桁を別々に指定するアンカー値のベクトルを含む実装では、変換動作は、そのレーンのアンカー値に基づいて対応するレーン内のビットに入力された浮動小数点値をマッピングするいくつかの並列変換で実行される場合がある。
【０２６０】
処理回路はまた、冗長表現を有する第２のＭビット値を生成するために、冗長表現を有する第１のＭビット値に対する重複削減演算をサポートすることができ、第２のＭビット値の少なくとも１つのＮビット部分内の重複ビットは、第１のＭビット値の少なくとも１つの対応するＮビット部分の重複ビットよりも小さい大きさを表す。その後の加算中のさらなる桁上げを収容するための範囲がより大きくなるように、重複ビットの所与のセットをゼロに近く削減することにより、レーンオーバーフローの可能性が低減される。重複削減演算は、各演算の後に、周期的に、または下記に説明されるように特定の条件が満たされたときに実行することができる。
【０２６１】
重複削減演算は、いくつかの例では、冗長表現内の第１のＭビット値の１つまたは複数のＮビット部分から、第１のＭビット値の１つまたは複数の後続部分に重複ビットを伝搬して、冗長表現を有する第２のＭビット値を生成する重複伝搬演算であり得る。第２のＭビット値は、第１のＭビット値と同じＰビット数値を表すが、異なるパターンの重複ビットを使用する。重複削減演算を使用して重複削減を実現することは、重複削減で削減された重複ビットの値を保持するために加算レジスタを必要としないという利点を有する。重複ビットの値を次のレーンに伝搬することにより、次のレーン内の重複ビットを調整して、先行レーン内の重複ビットによって表されたものと同じ値を保持することができ、冗長に表された第２のＭビット値に対してさらなる演算が実行されるとき、より多くの桁上げを収容するために先行レーンの重複ビット内の空間を解放する。
【０２６２】
重複伝搬演算は、様々な方法で実行することができる。一例では、重複伝搬演算は、すべての重複ビットがゼロに等しい第２のＭビット値に第１のＭビット値を変換するようなものである。この場合、重複伝搬演算は、第１のＭビット値の最下位Ｎビット部分の重複ビットをＭビット値の次のＮビット部分に加算して、修正非重複ビットおよび修正重複ビットを生成する初期加算と、先行加算からの修正重複ビットを第１のＭビット値の次のＮビット部分に加算して、修正非重複ビットおよび修正重複ビットを生成する少なくとも１つのさらなる加算と含む複数の順次加算を実行することを含む場合があり、処理回路は、各順次加算において生成され、重複ビットが０に設定された修正非重複ビットに基づいて、第２のＭビット値を生成するように構成される場合がある。
【０２６３】
一方、重複伝搬に対する第２の手法は、重複ビットを有する各Ｎビット部分が、００、０１、１１のうちの１つに等しい２つの最下位重複ビットを有する第２のＭビット値に変換することであり、任意の残りの重複ビットは、２番目の最下位重複ビットと同じ値を有する。この場合、重複ビットの各セットのビットパターンは、セット｛−１，０，＋１｝のうちの１つを効果的に表し、それは、完全に非冗長ではないが、依然としてオーバーフローのリスクが低減されることを可能にする。
【０２６４】
第２の手法では、重複伝搬演算はいくつかの並列加算を含む場合があり、各加算は、第２のＭビット値の対応する部分を生成するために、第１のＭビット値の所与のＮビット部分の重複ビットを後続のＮビット部分の非重複ビットに加算することを含む。したがって、この手法は、加算が並行して実行されることを可能にすることにより、重複伝搬演算がより速く実行されることを可能にする。長いベクトルの場合、これは重要なパフォーマンスの利点になり得る。
【０２６５】
より詳細には、各並列加算は、下位Ｎビット部分の重複ビットのＮビット符号拡張（すなわち、最上位重複ビットに等しいビットで最上位端に埋められた重複ビット）を、重複ビットがゼロに設定された後続のＮビット部分に対応するＮビット値に加算することを含む場合がある。
【０２６６】
第２の手法を使用して第１のＭビット値を第２の（制限付き冗長）Ｍビット値に変換すると、次いで、第２のＭビット値は、すべての重複ビットがゼロに等しい第３の（非冗長）Ｎビット値に変換することができる。これにより、複数のレーンを並行して処理しながら非冗長値が生成されることが可能になる。第２のＮビット値の第３のＮビット値への変換は、第２のＭビット値の重複ビットの総数を表す重複値、および第２のＭビット値の非重複ビットの総数を表す非重複値を生成することと、重複値および非重複値のビットパターンに応じて複数の桁上げ値を生成することと、複数の並列加算を実行することとを含む場合があり、各加算は、重複値および非重複値の対応する部分と桁上げ値のうちの１つを加算して、第３のＭビット値の対応する部分を生成するためである。
【０２６７】
重複削減演算を実行する別の方法は、重複累積演算を実行して、第１のＭビット値の１つまたは複数のＮビット部分の重複ビットを、重複アキュムレータ値の対応するＮビット部分に加算し、第１のＭビット値のそれらの１つまたは複数のＮビット部分内の重複ビットをゼロに設定して第２のＭビット値を生成することである。この手法は、重複アキュムレータ値を格納するために第２のレジスタを必要とする場合があるが、それは、最終結果が生成されるまで処理がレーン内に留めることができる値を有し、そのポイントで、重複アキュムレータ値のＮビット部分を１レーンシフトアップし、最終結果の次のレーンに加えることができる。また、この手法は、一時的にオーバーフローするが、Ｍビット値によって表現可能な範囲に戻る計算が、オーバーフロー例外をトリガすることなく正確に計算されることを可能にするという利点を有する。
【０２６８】
いくつかの例では、処理回路は、冗長表現内の第１のＭビット値に対して重複削減条件が満たされているかどうかを検出し、そうである場合、第１のＭビット値に対する重複削減演算の実行をトリガすることができる。一般に、重複削減条件は、Ｍビット値の所与のレーンからの実際のオーバーフローがあるとき、または別の加算を実行することがそのようなレーンオーバーフローを引き起こすリスクがあるときに満たされる場合がある。
【０２６９】
第１の例では、第１のＭビット値を生成するために特定のしきい値の数の加算が実行されたときに、重複削減条件が満たされる場合がある。たとえば、処理回路は、第１のＭビット値を生成するために何回の演算（たとえば、加算）が実行されたかを示す演算カウントを保持し、演算回数が所定数以上であることを演算カウントが示すとき、第１のＭビット値に対して重複削減演算を実行することができる。したがって、演算（たとえば、第１のＭビット値を含むレジスタへの累積）が実行されるたびに、処理回路は、第１のＭビット値を生成するために演算されている値の数だけ演算カウントを増分することができ、演算回数が所定数以上に達すると、これは実行されるべき重複削減演算をトリガすることができる。たとえば、演算の所定数は２Ｖ−１−１以下であってもよい。より詳細には、非冗長重複削減演算の場合、演算の所定数は２Ｖ−１−１以下であってもよく、制限付き冗長重複削減演算の場合、演算の所定数は、２Ｖ−１−２以下であってもよい。次にオーバーフローのリスクがあるまでカウント動作を再開するために、演算カウントは重複削減演算が実行されるたびにリセットすることができる。
【０２７０】
第２の例では、第１のＭビット値の所与のＮビット部分用の重複ビットが所定値を有するとき、重複削減条件が満たされる場合がある。たとえば、所定値は、次の演算がそのＮビット部分からのオーバーフローをトリガする可能性がある値（たとえば、重複ビットを使用して表現可能な最大の正の値または最大の負の値）に設定されてもよい。
【０２７１】
第３の例では、その値に対して処理動作を実行するときに第１のＭビットデータ値のＮビット部分のうちの１つから実際のオーバーフローが発生したとき、重複削減条件が満たされる場合がある。この場合、処理回路は、オーバ−フローを検出し、次いで第１のＭビット値の前の値に戻し、重複削減演算を使用してそれを第２のＭビット値に変換し、次いで第２のＭビット値に対する処理動作を繰り返すことができる。あるいは、第１のＭビット値を処理するオーバーフロー結果を、第２のＭビット値に直接マッピングすることができる（下記で説明される図３４の例を参照）。
【０２７２】
あるいは、いくつかの例では、冗長表現を有する値に対して演算が実行されるたびに、重複削減演算が実行される可能性があり、その結果、結果は非冗長形式または制付き冗長形式で効果的に保持される。たとえば、いくつかのレーン内に重複ビットが２つしかない場合、この選択肢が好ましい場合がある。
【０２７３】
場合によっては、第２のＭビット値を生成するために、第１のＭビットデータ値に対して別のタイプの処理動作を実行するのと同時に、重複伝搬演算が実行される可能性がある。たとえば、入力オペランドを識別する所与の命令に応答して、重複伝搬演算はいくつかのＮビット加算演算を含み、各Ｎビット加算演算は、第２のＭビット値の対応するＮビット部分を生成するために、第１のＭビットデータ値の対応するＮビット部分の非重複ビット、第１のＭビットデータ値の先行するＮビット部分の重複ビット、および冗長表現を有し、入力オペランドに対応する第３のＭビット値の対応するＮビット部分を加算することを含む。第１のＭビットデータ値がすでに制限付き冗長形式である場合、この演算から生じる第２のＭビット値も制限付き冗長である。このようにして、重複伝搬は本質的に加算と同時に実行することができるので、重複伝搬のオーバーヘッドは低減され、またＭビットデータ値は制限付き冗長形式のままなので、レーン当たり２つの重複ビットしか必要とされず、Ｍビット値全体がより広い範囲を表すことができるように、非重複ビットとしての使用に利用可能なより多くのビットを残す。いくつかの例では、第３のＭビット値はすでに冗長表現を有する可能性がある。他の例では、入力オペランドは異なる表現で表される場合があり、第１のＭビット値の非重複ビットおよび重複ビットにそれを加算する前に、冗長表現を有する第３のＭビット値に変換される場合がある。
【０２７４】
処理回路はまた、第２のタイプの変換動作を実行して、冗長表現を有する第１のＭビット値を異なる表現の変換値に変換することもできる。異なる表現は、整数、固定小数点、または浮動小数点を含む任意のフォーマットの可能性がある。場合によっては、第２のタイプの変換動作は、上述されたような重複伝搬演算を実行して、最初のＭビット値を第１のＭビット値にマッピングし、次いで重複伝搬演算によって生成された第１のＭビット値を変換値に変換することを含む場合がある。重複伝搬演算は、非冗長バージョンまたは制限付き冗長バージョンの可能性がある。あるいは、変換されるべきＭビット値がすでに非冗長形式または制限付き冗長形式である場合、初期重複伝搬演算を実行する必要はなく、第１のＭビット値は、単に変換値に直接変換されてもよい。
【０２７５】
一例では、第２のタイプの変換動作は、プログラム可能なアンカー値に基づいて、第１のＭビット値の各Ｎビット部分を対応する浮動小数点値にマッピングすることを含む場合がある。この手法は、第２のＭビット値の各要素を並行して処理できるという利点を有する。場合によっては、最終的な変換結果は、各要素が第１のＭビット値のそれぞれのＮビット部分からマッピングされた浮動小数点値のうちの１つであるベクトルの可能性がある。これは、その合計が初期冗長表現と等価な浮動小数点値のベクトルを提供することにより、浮動小数点形式で冗長表現のより高い精度を保持するために有用であり、したがって、丸めに起因する情報の損失を回避する。あるいは、処理回路は、第１のＮビット値の各Ｎビット部分からマッピングされたそれぞれの浮動小数点値を加算して、必要に応じて丸めを伴って、変換値として単一の浮動小数点値を生成することができる。正しく丸められた結果を生成するために、第１のＭビット値の最下位Ｎビット部分からマッピングされた浮動小数点値で始まり、第１のＭビット値の最上位Ｎビット部分からマッピングされた浮動小数点値で終わる順序で、それぞれの浮動小数点値を加算することは有用であり得る。
【０２７６】
あるいは、第２のタイプの変換動作は、ビットの選択されたグループよりも下位の第１のＭビット値のビットに基づいて、第１のＭビット値の少なくとも１つのＮビット部分の非重複ビットの中から選択されたビットのグループを丸めることにより、浮動小数点値の仮数部を形成することによって実行することができる。この手法はより一般的に適用可能であるが、第１のＮビット値の一部分から始まり、次いで次の部分に移動する何らかの順次処理が必要な場合があるため、遅くなる場合がある。
【０２７７】
場合によっては、冗長表現内の所与のＭビット値に関連付けられたアンカー値は、所与のハードウェア実装用に静的に選択された固定値の可能性がある。
【０２７８】
しかしながら、プログラム可能なアンカー値を使用することにより、より大きな柔軟性を提供することができるので、プログラマは、冗長表現内の所与のＭビット値を使用して表されるべき有効桁の範囲を指定することができる。これにより、プログラム可能なアンカー値を使用して、所与の演算で計算されるべき有効桁の可変ウィンドウを定義することにより、ハードウェアユニットの比較的狭いセットが広い数値範囲にわたって数値を処理することが可能になる。
【０２７９】
一般に、所与のレーンの重複ビットは、符号付き整数値を表すことができるので、次のレーンに対する正と負の両方の調整値を表すことができる。
【０２８０】
いくつかの実装形態は、所与のレーン内の重複ビット数がＮ／２よりも大きくなることを可能にすることができる。この場合、そのレーンの重複部分は、２つ以上の後続レーンにおける非重複部分と有効桁で重複する場合がある。したがって、３つ以上の隣接するＮビット部分のグループでは、最下位部分の重複ビットは、２つ以上のさらなるＮビット部分におけるいくつかの非重複ビットと等価な有効桁の重複ビットであり得る。この手法は、オーバーフローのリスクなしにさらに多くの演算が実行されることを可能にするが、ビットのより多くのクロスレーン組合せが必要とされる場合があるので、重複伝搬および変換動作を複雑にする可能性がある。
【０２８１】
より簡単な手法は、各レーンがＮ／２以下の重複ビットを有するように、重複ビットの数を制限することであり得る。重複ビットの数をレーンサイズの半分以下に制限することにより、重複ビットの各セットがより少ないクロスレーンアクティビティを必要とする単一のより上位のレーンに対する調整値を表すので、ハードウェア実装ははるかに簡単である。所与の実装形態に対して、より大きい値の数の重複ビットが望ましい場合、レーンサイズＮを増大させることができる。
【０２８２】
いくつかの実装形態では、重複ビットの数Ｖは、ハードウェア実装によって固定化（ハードワイヤリング）されてもよい。それでも、同じコードが異なる重複サイズを使用するハードウェア実装に対して実行される場合でも、使用されている現在の重複サイズをプログラムが決定することを可能にするように、所与の実装形態によって使用される重複ビットの数を識別する重複サイズ値を提供することは、依然として有用であり得る。たとえば、制御レジスタは重複サイズを指定する可能性がある。
【０２８３】
しかしながら、より柔軟な手法は、プログラマまたはコンパイラが実行されるべきアプリケーションに適した値に設定することができる、プログラム可能な重複サイズ値を提供することである。これにより、重複サイズ値における選択が可能になる。オーバーフローなしに多数の加算が実行されることを可能にすることが重要である場合、重複サイズを縮小することができる。必要であると予想される加算が少ない場合、重複サイズを縮小すると、Ｎビットレーンの処理を少なくして計算が実行されることを可能にすることができ、それは、複数のＭビット計算がハードウェア内に設けられたＮビット加算回路ユニットの様々なサブセットと並行して実行されることを可能にすることにより、パフォーマンスを改善する可能性がある。したがって、プログラマは、実行されるべき加算の予想回数、および必要なアプリケーション用に予想される数値の範囲に応じて、重複サイズ値を設定することができる。
【０２８４】
重複サイズ値は、ある範囲の方法で指定される可能性があるが、場合によっては、ハードウェア内に設けられた制御レジスタにおいて指定される場合がある。場合によっては、制御レジスタは、各レーンの有効桁を設定するプログラム可能なアンカー値を格納するために使用される同じレジスタの可能性がある。
【０２８５】
あるいは、重複サイズ値は、冗長表現を有する少なくとも１つのデータ値を処理するように処理回路を制御する命令によって指定される可能性がある。
【０２８６】
場合によっては、重複ビットの数は、（上述されたようにいかなる重複ビットももたない場合がある最上位Ｎビット部分以外の）冗長表現の各Ｎビット部分について同じであってもよい。この場合、単一の重複サイズ値は、先頭レーン以外の冗長表現の各レーンで使用されるべき重複ビットの数を指定することができる。
【０２８７】
しかしながら、異なる数の重複ビットを有する異なるレーンを設けることも可能である。たとえば、表現可能な極端な数字がまれである場合のように、上位レーンよりも多くの数の重複ビットを下位レーンに提供することは有用であり得るし、重複ビットへの桁上げが上位レーンよりも下位レーンにとってより一般的であることが予想される。したがって、場合によっては、冗長表現のＮビット部分のうちの２つ以上に対して、重複ビットの数を別々に指定する重複サイズ値を提供することが有用であり得る。場合によっては、各レーンは別々に指定されたその重複サイズを有する可能性がある（または、少なくとも先頭レーン以外の各レーンは別々の重複サイズ値を有する可能性がある）。他の例では、レーンのいくつかのサブセットが各々別々の重複サイズ指示を有する可能性があるが、同じサブセット内のレーンはすべて同じ重複サイズを使用することができる。
【０２８８】
上述されたように、冗長表現は、特にそれらが加算を含む場合、一連の演算に有用であり得る。しかしながら、それは特に少なくとも１つの値のアキュムレータレジスタへの累積をトリガする累積命令に有用である。
【０２８９】
Ｎビットレーン間のオーバーフローのリスクなしに冗長表現内の複数の値を加算することができるので、この技法により、所与のタイプの命令が３つ以上の別々のＭビットデータ値の加算を単一の演算でトリガすることも可能であり、そうでない場合、可能ではないはずである。これにより、データ値を累積するときのパフォーマンスをさらに高速化することが可能になる。各Ｎビット加算回路ユニットでは、ウォレスツリーは、少なくとも３つのＭビット値の対応するＮビット部分を結合して２つのＮビット項を生成するために使用される場合があり、次いで、桁上げ伝搬加算器は、２つのＮビット項を加算して、Ｍビット結果の対応するＮビット部分を生成することができる。ウォレスツリーを実装するいくつかの方法があり、任意の既知の技法が使用され得ることが諒解されよう。
【０２９０】
場合によっては、加算されるべき２つ以上のＭビットデータ値は、入力ベクトルのそれぞれの要素から導出されてもよい。これにより、単一の命令が、たとえば、累積されるべき複数の入力値を指定することが可能になる。場合によっては、入力ベクトルのすべての要素に対応するＭビットデータ値を一緒に加算して、対応する結果を形成する可能性がある。
【０２９１】
しかしながら、入力ベクトルの入力データ要素の第１のサブセットに対応するＭビットデータ値を加算するＮビット加算の第１のセットによって生成された第１のＭビット結果と、入力ベクトルの入力データ要素の第２のサブセットに対応するＭビットデータ値を加算するＮビット加算の第２のセットによって生成された第２のＭビット結果とを有する、２つ以上の独立した結果を生成することも可能である。したがって、Ｍは、ハードウェア内に実装されるベクトル幅より小さくてもよい。どの入力データ要素が第１および第２のサブセットに対応するかの割振りは、静的（所与の実装形態の場合は固定）、またはプログラム可能入力マップ情報に基づいて可変である可能性がある。
【０２９２】
本技法のための別のアプリケーションは、加算されるＭビットオペランド値が、２つのオペランド値の乗算の間に生成された部分積である場合である。これは、いくつかのより小さい並列Ｎビット演算を使用してレーン幅Ｎよりも長い２つの値を乗算するのに特に有用であり得る。
【０２９３】
別の例では、処理回路は、第１のデータ値に対して重複伝搬演算を実行して第２のデータ値を生成することができ、第１および第２のデータ値は、複数のＮビット部分を含むＭビットデータ値を使用してＰビット数値を表す冗長表現を有し、ここで、Ｍ＞Ｐ＞Ｎであり、冗長表現において、最上位Ｎビット部分以外の各Ｎビット部分は、次のＮビット部分の複数の最下位ビットと同じ有効桁を有する複数の重複ビットを含み、処理回路は、第１のデータ値の対応するＮビット部分の非重複ビットを、第１のデータ値の先行するＮビット部分の重複ビットに加算することを含む加算演算を実行することにより、最下位Ｎビット部分以外の第２のデータ値の各Ｎビット部分を生成するように構成される。
【０２９４】
この手法は、並列技法を使用して冗長表現内で表現された値からオーバーフローする可能性を低減するのに役立つ。重複伝搬演算のこの特定の例は、（上述されたＲＨＰＡ形式のように可変の有効桁を定義する関連するプログラム可能なアンカー値ではなく）固定の有効桁を有する冗長形式で表される長整数値または固定小数点値に適用される可能性があることが諒解されよう。そのような値に冗長表現を使用すると、長いオペランドの高速加算がさらに可能になり、上記で定義された重複伝搬演算により、比較的高速の並列動作を使用してレーン間のオーバーフローの可能性が低減されることが可能になる。
【０２９５】
重複伝搬演算は、並列に実行された第２のデータ値のＮビット部分のうちの少なくとも２つに対する加算演算を用いて実行することができる。すべての加算演算を並列に実行することは必須ではない。たとえば、いくつかの加算のみを並列に実行するのに十分なハードウェアを有するシステムは、非冗長形式への逐次変換のみを実装するシステムよりもさらに速い場合がある。それにもかかわらず、より良いパフォーマンスのために、処理回路は、最下位Ｎビット部分以外の第２のデータ値のＮビット部分の各々に対して並列に加算演算を実行することができる。処理回路は、それぞれの加算演算を並列に実行するための並列加算回路ユニットを有することができる。
【０２９６】
別の例では、処理回路は、少なくとも１つのオペランドベクトルのそれぞれのデータ要素に対して複数の処理レーンを実行して、結果ベクトルの対応する結果データ要素を生成することができる。レーン位置情報は、処理レーンごとに提供され、所与のレーンについてのレーン位置情報は、結果ベクトルの１つまたは複数の結果データ要素にまたがる対応する結果データ値内の所与のレーンによって生成されるべき対応する結果データ要素の相対位置を識別する。各処理レーンは、そのレーンについて識別されたレーン位置情報に応じて実行することができる。この手法により、所与のベクトルサイズをサポートする処理ハードウェアが、より大きいまたはより小さいサイズのデータ値の処理を柔軟にサポートすることが可能になる。
【０２９７】
これは、通常、ベクトルの各要素に使用されるべき所与のデータ要素のサイズを指定するグローバル入力を受け取るハードワイヤリングされた回路を有するはずの標準の単一命令複数データ（ＳＩＭＤ）技法と対照的であり、それにより、たとえば、ベクトルの部分間の桁上げを伝搬するべきかどうかの判定が可能になる。そのようなＳＩＭＤでは、データ要素のサイズは、結果ベクトルの特定のデータ要素が所与の結果の下端または上端にあるかどうかを識別するのではなく、ベクトル全体に対してグローバルに指定される。生成されるべき対応する結果内の相対位置をレーンごとに別々に指定する能力を提供することにより、ハードウェアがベクトル幅より大きいサイズの結果を生成することを可能にすることと、異なるサイズの複数の結果が単一のベクトル内で並列に計算されることを可能にすることとを含む、所与のサイズのハードウェアを使用して異なるサイズの結果を計算するためのより大きい柔軟性が与えられ、これは標準のＳＩＭＤ技法では可能でないはずである。
【０２９８】
一般に、それぞれのデータ要素に対して実行される処理レーンは、対応するデータ要素に適用される任意の種類の演算を含む場合がある。これは、算術演算または論理演算だけでなく、たとえば、要素をある表現から別の表現に変換する（たとえば、上述されたＲＨＰＡ形式に、またはＲＨＰＡ形式から変換する）演算も含む場合がある。
【０２９９】
レーン位置情報は様々な方法で表される可能性がある。場合によっては、レーン位置情報は、対応する結果データ要素が対応する結果データ値の最上位データ要素であるかどうかを識別することができる。いくつかのタイプの処理動作では、結果の最上位データ要素は、他の要素とは異なるように扱われる場合があるので、（たとえば、１ビットのインジケータを使用して）各要素が結果データ値の最上位ビット要素であるか否かを識別するだけで十分であり得る。
【０３００】
たとえば、所与のレーンについてオーバーフロー状態が検出されると、処理回路は、レーン位置情報がそのレーンを結果の最上位データ要素に対応するものとして識別するかどうかに基づいて、オーバーフローをどのように扱うかを選択することができる。たとえば、利用可能ないくつかのオーバーフロー処理応答が存在する場合があり、レーン位置情報に基づいて、これらのうちの１つが選択される場合がある。たとえば、オーバーフロー処理応答は、何もしないこと、オーバーフローが発生したことを示す情報を設定すること、例外をトリガしてオーバーフローを処理すること、または上述された重複伝搬演算の実行をトリガすることを含む可能性がある。これらのうちのどれが選択されるかは、生成される結果内のオーバーフローするレーンの位置に依存する場合がある。
【０３０１】
レーン位置情報は、結果データ要素が結果の最下位データ要素であるかどうかを識別する可能性もある。たとえば、最下位データ要素の処理は、下位要素からのそのレーンへの桁上げが存在しない点で高次要素と異なる場合があり、いくつかの演算（たとえば、上述された重複伝搬演算）は、低次レーンを他のレーンと異なるように扱うことができる。したがって、最下位のデータ要素を識別することは有用であり得る。
【０３０２】
より一般的には、レーン位置情報は、結果データ値の最下位要素、最上位要素、または中間要素のうちの１つを生成するものとして各レーンを識別する可能性がある。たとえば、２ビットのインジケータはこの情報を示すことができる。これは、最上位レーンと最下位レーンの両方が中間レーンとは異なるように扱われる必要があるときに有用である。
【０３０３】
このタイプのレーン位置インジケータにより、所与のサイズのハードウェアがどのように値を処理するかにおける高度の柔軟性が可能になる。たとえば、処理の最上位レーンまたは最下位レーンについてのレーン位置情報が、対応する結果データ要素が中間データ要素であると識別すると、このことは、結果ベクトル自体よりも大きい数のビットを有する結果値の部分的な部分を表す結果ベクトルを生成するように、処理回路をトリガすることができる。一連のそのような動作は、結果データ値の各それぞれの部分を計算するために実行される場合がある。
【０３０４】
あるいは、処理の中間レーンが対応する結果に対して最下位データ要素または最上位データ要素を生成することであるとレーン位置情報が識別すると、このことは、２つ以上の独立した結果データを含む結果ベクトルを生成するように、処理回路をトリガする。これにより、２つ以上の結果の並列生成を許可することによるパフォーマンスの向上が可能になる。
【０３０５】
いくつかの例では、結果ベクトルが少なくとも２つの独立した結果データ値を含むとレーン位置情報が識別すると、複数の入力データ要素を含む入力ベクトルを識別する所定のタイプの命令に応答して、処理回路は、第１の独立した結果データ値を生成するために、入力ベクトルの入力データ要素の第１のサブセットからマッピングされた少なくとも１つのオペランドベクトルのデータ要素の第１のサブセット上の処理レーンの第１のサブセットを実行することができ、第２の独立した結果データ値を生成するために、入力ベクトルの入力データ要素の第２のサブセットからマッピングされた少なくとも１つのオペランドベクトルのデータ要素の第２のサブセット上の処理レーンの第２のサブセットを実行することができ、を実行することができる。したがって、元の入力ベクトルの要素のうちのいくつかは、処理レーンの第１のサブセット内で結合されてもよく、他の要素は、処理レーンの第２のサブセット内で処理されてもよい。処理回路は、プログラム可能な入力マップ情報に応じて、どの入力データ要素が第１のサブセットまたは第２のサブセットにあるかを選択することができる。これは、入力マップ情報の異なる値を設定することにより、同じタイプの命令が様々な組合せで入力ベクトルの入力データ要素を組み合わせることを可能にするのに有用である。入力マップ情報は、たとえば、命令によって参照されるレジスタに格納される可能性がある。
【０３０６】
レーン位置情報は、レーンごとに処理を順次実行し、各レーンがいかなる他のレーンとも独立して実行されることを可能にするベクトル実装に有用であり得る。しかしながら、それは、複数の処理レーンを並列に実行するための並列回路ユニットが存在するときに特に有用である。
【０３０７】
レーン位置情報は、特定のプログラムを書くプログラマが、処理されるべき値をハードウェア上にどのようにマッピングするかを設定できるようにプログラム可能であり得る。あるいは、レーン位置情報は、プログラマによって書かれたソースコードをコンパイルするコンパイラによって設定される可能性がある。
【０３０８】
場合によっては、レーン位置情報はまた、ハードウェアによって決定される場合もあり、たとえば、プログラマは、生成されるべき全体的な結果サイズを指定することができ、次いでハードウェアは、指定された結果サイズおよび回路化された実装形態内に実装されたハードウェアベクトル長の指示に基づいて、レーン位置情報を決定することができる。これは、プログラマが所与の実装形態のためのハードウェア内に実装された特定のベクトルサイズを知らない場合に有用であり得る。
【０３０９】
レーン位置情報は、たとえば、命令符号化、汎用レジスタ、または専用制御レジスタ内で、様々な方法で指定される可能性がある。
【０３１０】
しかしながら、プログラマのアンカー値と上述された重複値の一方または両方と同じ制御レジスタ内のレーン位置情報を定義することは特に有用であり得る。
【０３１１】
複数のＸビット部分を含む第１のオペランドと、少なくとも１つのＹビット部分を含む第２のオペランドとを乗算するための方法が提供され、方法は、
複数の部分積を生成するステップであって、各部分積が第１のオペランドの選択されたＸビット部分と第２のオペランドの選択されたＹビット部分との積を含む、ステップと、
部分積ごとに、部分積の有効桁を示す有効桁指示情報に応じて、部分積を冗長表現に変換するステップであって、前記冗長表現において、部分積が複数のＮビット部分を使用して表され、冗長表現の少なくとも２つの隣接するＮビット部分のグループ内で、グループの下位Ｎビット部分の複数の重複ビットが、グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有する、ステップと、
冗長表現において表された複数の部分積を加算するステップと
を含む。
【０３１２】
この方法では、冗長表現を使用して部分積を加算することにより、どの桁上げも重複ビットに収容され、レーン間で桁上げを伝搬する必要性を回避することが可能になるので、比較的長いオペランドの乗算を以前の技法よりも高速に実行することができる。また、第１および第２のオペランドを冗長表現に変換する必要はない。
【０３１３】
加算は、冗長表現で表される部分積のそれぞれのＮビット部分を使用して独立したＮビット加算を実行するための複数のＮビット加算回路ユニットを使用して実行することができる。積の全幅に対応するより大きな加算ではなく、いくつかの並列Ｎビット加算を使用することにより、加算がより高速に行われ、比較的長いオペランドをより短時間で乗算することが可能になる。
【０３１４】
場合によっては、最初にすべての部分積を計算し、次いで後続の追加ステップで積を一緒に加算することが可能である。しかしながら、部分積の数が比較的多い場合、これは、すべての部分積を格納するためにかなりの数のレジスタを必要とする場合があり、これにより、レジスタ圧力が増大し、レジスタを必要とする他の演算のパフォーマンスが低下する場合がある。
【０３１５】
したがって、より効率的な技法は、前記冗長表現を有するアキュムレータ値を格納するアキュムレータレジスタに部分積を累積することであり得る。したがって、１つまたは複数の部分積が生成され、これまでに計算された部分積の中間合計を保持するアキュムレータ値に加算されてもよく、一連の積算が第１のオペランドと第２のオペランドの最終積を計算する。
【０３１６】
より詳細には、第１のオペランドと第２のオペランドの乗算は、いくつかの部分積累積演算を使用して実装される場合があり、各部分積累積演算は、前記選択されたＸビット部分および前記選択されたＹビット部分として選択された異なるペアの部分に対応し、
選択されたＸビット部分と選択されたＹビット部分とを乗算して、前記複数の部分積のうちの１つを生成することと、
有効桁指示情報に応じて、前記複数の部分積のうちの前記１つを冗長表現に変換することと、
前記冗長表現内の前記複数の部分積のうちの前記１つを、前記冗長表現を有する累積値に加算して、更新されたアキュムレータ値を生成することと
を含み、
１つの部分積累積演算のための更新されたアキュムレータ値は、次の部分積累積演算のためのアキュムレータ値として使用される。
【０３１７】
部分積を一度に１つ生成し、それらをアキュムレータ値に連続して累積することにより、アキュムレータ値を格納するために使用されるレジスタは１つしか必要とされず、他の演算のためにより多くのレジスタが利用可能なまま残る。
【０３１８】
部分積累積演算はパイプライン化することができ、その結果、１つの部分積累積演算のための部分積とアキュムレータ値との加算は、後続の部分積累積演算のための乗算と並行して実行することができる。乗算自体もパイプライン化される可能性があり、その結果、乗算はいくつかの段階で実行されてもよく、前の部分積累積演算のための後の乗算段階は、後の部分積累積演算のための前の乗算段階と並行して実行されてもよい。
【０３１９】
最終結果は依然として冗長表現であり得る。非冗長表現（たとえば、整数）が必要な場合、冗長表現内の複数の部分積を加算した結果に対して重複伝搬演算を実行して、結果の１つまたは複数のＮビット部分の重複ビットを、結果の１つまたは複数の後続のＮビット部分に伝搬することができる。１つのレーンから次のレーンに重複ビットを伝搬することにより（たとえば、次のレーンの非重複ビットに重複ビットを加算することにより）、重複ビットの各セットがゼロである非冗長形式を取得することができる。重複伝搬演算は、上述された技法のうちのいずれかを使用して実行される可能性がある。
【０３２０】
他の例では、すべての累積が完了するまで待つのではなく、（１つのレーンの重複ビットを次のレーンの非重複ビットに加算する）少なくとも１つの重複伝搬加算が、少なくとも１つの部分積累積演算と並行して行われる可能性がある。たとえば、部分積累積演算が各部分積累積演算で生成された部分積の有効桁の昇順で実行される場合、入力オペランドの積を表す最終アキュムレータの１つまたは複数の下位レーンは、アキュムレータの上位レーンに影響を与える累積が終了する前に準備ができる場合があるので、下位レーンで実行される重複伝搬加算は、上位レーンに影響を与える累積と並行して実行することができる。
【０３２１】
有効桁指示情報は様々な方法で表される場合がある。一般に、有効桁指示情報は、前記第１のオペランド内の前記選択されたＸビット部分と前記第２のオペランド内の前記選択されたＹビット部分との相対位置に依存する場合がある。
【０３２２】
場合によっては、有効桁指示情報は、前記選択されたＸビット部分および前記選択されたＹビット部分のうちの少なくとも１つに関連付けられた有効桁指示パラメータに依存する場合がある。たとえば、入力オペランドがＦＰ値である（またはＦＰ値にマッピングされる）場合、有効桁指示情報はＦＰ値の指数部に依存する可能性がある。
【０３２３】
あるいは、有効桁指示情報は、前記部分積のうちの少なくとも１つを生成するように処理回路を制御するための命令によって指定されたパラメータに依存する場合がある。これは、生成されるべき部分積の有効桁を明示的に識別する命令のパラメータの可能性があり、または、有効桁指示情報は、第１のオペランドの少なくともどのＸビット部分が前記選択されたＸビット部分であるかを識別する命令のパラメータから暗示的である可能性がある（第２のオペランドが２つ以上のＹビット部分を有する場合、どのＹビット部分が選択されたＹビット部分であるかを識別するパラメータも、部分積の有効桁を決定すると考えることができる）。
【０３２４】
いくつかの例では、第１のオペランドおよび第２のオペランドは整数を含む。あるいは、第１／第２のオペランドは、ＦＰまたは冗長表現などの他のフォーマットの可能性がある。また、場合によっては、第１のオペランドは、第２のオペランドとは異なるフォーマットの可能性がある。第１および第２の入力オペランドのフォーマットにかかわらず、それらは、いくつかのより小さい乗算を使用して入力オペランドの乗算を可能にするために、それぞれ、より小さいＸビット部分およびＹビット部分にマッピングすることができる。
【０３２５】
いくつかの例では、第１および第２のオペランドが同じサイズの部分を有するように、Ｘ＝Ｙである。あるいは、ＸとＹは異なっていてもよい。
【０３２６】
ＸおよびＹが両方とも５３に等しいか、または５３より小さい場合、２つの倍精度浮動小数点値の仮数部を乗算するために提供される浮動小数点乗算回路を使用して、部分積乗算が実行される場合がある。ＸまたはＹが５３より小さい場合、これらの部分をパディングして、ＤＰ乗算器によって乗算されるべき５３ビット値を生成することができる。したがって、これにより、既存の乗算ハードウェアが使用されることが可能になる。
【０３２７】
同様に、ＸおよびＹが両方とも２４以下であるか、または１１以下である場合、乗算はそれぞれ単精度または半精度の浮動小数点乗算器を再利用することができる。
【０３２８】
あるいは、Ｘ＊Ｙビットの乗算をサポートする既存の乗算回路が存在しない場合、特注の乗算器を設けてもよい。
【０３２９】
一例では、方法は、第１のオペランドを浮動小数点値の対応するベクトルにマッピングするステップを含む場合があり、各浮動小数点値は、第１のオペランドのそれぞれのＸビット部分からマッピングされた仮数部と、第１のオペランド内のそのＸビット部分の有効桁に依存する指数部とを有し、所与の部分積についての有効桁指示情報は、前記所与の部分積を生成するために使用される選択されたＸビット部分に対応する浮動小数点値の指数部に依存する。入力オペランドを浮動小数点値のベクトルにマッピングすることにより、さらなるパラメータを必要とするのではなく、有効桁指示情報が入力されたＸビット部分およびＹビット部分ならびに部分積自体の符号化内で明示的に表現することができるので、演算を簡略化することができる。また、これにより、既存の浮動小数点ハードウェアが再利用されることが可能になる。
【０３３０】
データ処理装置は、上述されたように第１のオペランドと第２のオペランドを乗算するための方法を実行するように構成された処理回路を含む場合がある。
たとえば、データ処理装置は、
【０３３１】
複数のＸビット部分を含む第１のオペランドの選択されたＸビット部分と、少なくとも１つのＹビット部分を含む第２のオペランドの選択されたＹビット部分とを乗算して、部分積を生成する乗算回路と、
部分積の有効桁を示す有効桁指示情報に応じて、冗長表現を有する変換部分積に部分積を変換する変換回路であって、前記冗長表現において、部分積が複数のＮビット部分を使用して表され、冗長表現の少なくとも２つの隣接するＮビット部分のグループ内で、グループの下位Ｎビット部分の複数の重複ビットが、グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有する、変換回路と、
前記冗長表現を有するアキュムレータ値に変換部分積を加算する加算回路と
を含む場合がある。
【０３３２】
加算回路は、変換部分積の対応するＮビット部分およびアキュムレータ値を使用して、独立したＮビット加算を実行する複数のＮビット加算回路ユニットを含む場合がある。これにより、冗長表現を使用して、より長い値の加算がより速く実行されることが可能になる。
【０３３３】
前記選択されたＸビット部分および前記選択されたＹビット部分として選択された部分の様々な組合せに対応する、冗長表現内の複数の変換部分積を生成するように、乗算回路および変換回路を制御するために、かつ前記複数の部分積の各々をアキュムレータ値に加算するように加算回路を制御するために、少なくとも１つの乗算命令に応答する制御回路（たとえば、命令デコーダ）が設けられる場合がある。場合によっては、第１および第２のオペランドを指定する１つの乗算命令は、すべての部分積の生成を制御することができる。他の例では、乗算され、アキュムレータ値に累積されるべき選択されたＸビット部分および選択されたＹビット部分として様々な組合せの部分を各々が指定する、別個の乗算累積命令が提供される可能性がある。
【０３３４】
さらなる例示的な構成は下記の条項において定義される。
１．Ｍ＞Ｐ＞Ｎとして、複数のＮビット部分を使用してＰビット数値を表す冗長表現を有するＭビットデータ値を処理する処理回路を含む装置であって、
Ｖ＜Ｎとして、前記処理回路が、アンカー値に基づいて前記冗長表現の各Ｎビット部分のビットの有効桁を識別するように構成され、少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有し、
前記処理回路が、複数の独立したＮビット演算を並列に実行する複数の演算回路ユニットを含み、各Ｎビット演算が、前記冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、前記冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む、
装置。
２．前記複数の演算回路ユニットが、複数のＮビット加算を並列に実行する複数の加算回路ユニットを含み、各Ｎビット加算が、前記少なくとも２つのＭビットオペランド値の前記対応するＮビット部分を、前記Ｍビット結果値の前記対応するＮビット部分を生成するために加算することを含む、条項１に記載の装置。
３．前記処理回路が、入力値を、前記冗長表現を有する変換されたＭビットデータ値に変換するために変換動作を実行するように構成される、条項１および２のいずれかに記載の装置。
４．前記変換動作が、前記入力値の符号に依存して前記重複ビットを設定することを含む、条項３に記載の装置。
５．前記入力値が正であるとき、前記処理回路が前記重複ビットを０に設定するように構成され、前記入力値が負であるとき、前記処理回路が前記重複ビットを１に設定するように構成される、条項４に記載の装置。
６．前記入力値が浮動小数点値を含むとき、前記変換動作が、
前記アンカー値および前記浮動小数点値の指数部に依存して、前記浮動小数点値の仮数部のビットを、前記Ｍビットデータ値内の対応する有効桁のビットに、少なくとも１つのＮビット部分の前記重複ビットを０に設定して、マッピングすることと、
前記入力値が正であるとき、前記マッピングの結果を、前記変換されたＭビットデータ値として出力することと、
前記入力値が負であるとき、前記変換されたＭビットデータ値を生成するために、前記マッピングの前記結果をネゲートすることと
を含む、条項４および５のいずれかに記載の装置。
７．前記処理回路が、前記冗長表現を有する第１のＭビット値に対して重複削減演算を実行して、前記冗長表現を有する第２のＭビット値を生成するように構成され、前記第２のＭビット値の少なくとも１つのＮビット部分内の前記重複ビットが、前記第１のＭビット値の少なくとも１つの対応するＮビット部分の前記重複ビットよりも小さい大きさを表す、条項１から６のいずれかに記載の装置。
８．前記重複削減演算が、前記冗長表現を有する第１のＭビット値の１つまたは複数のＮビット部分の前記重複ビットを、前記第１のＭビット値の１つまたは複数の後続のＮビット部分に伝搬して、重複ビットの異なるパターンを使用して前記第１のＭビット値と同じＰビット数値を表す前記冗長表現を有する第２のＭビット値を生成する重複伝搬演算を含む、条項７に記載の装置。
９．前記第２のＭビット値において、前記重複ビットが０に等しい、条項８に記載の装置。
１０．前記重複伝搬演算が、
前記第１のＭビット値の最下位Ｎビット部分の前記重複ビットを、前記Ｍビット値の後続のＮビット部分に加算して、修正された非重複ビットと修正された重複ビットとを生成する初期加算と、
前回の加算からの前記修正された重複ビットを、前記第１のＭビット値の次のＮビット部分に加算して、修正された非重複ビットと修正された重複ビットとを生成する少なくとも１つのさらなる加算と、
を含む、複数の逐次加算を実行することを含み、
前記処理回路が、各逐次加算で生成され、前記重複ビットが０に設定された、前記修正された非重複ビットに基づいて前記第２のＭビット値を生成するように構成される、
条項８および９のいずれかに記載の装置。
１１．前記第２のＭビット値において、重複ビットを有するＮビット部分ごとに、前記２つの最下位重複ビットが、値００、０１、１１のうちの１つを有し、任意の残りの重複ビットが、前記２番目の最下位重複ビットと同じ値を有する、条項８に記載の装置。
１２．前記重複伝搬演算が、複数の並列加算を実行することを含み、
各並列加算が、前記第１のＭビット値の所与のＮビット部分の前記重複ビットを前記第１のＭビット値の後続のＮビット部分の非重複ビットに加算して、前記第１のＭビット値の前記後続のＮビット部分に有効桁において対応する前記第２のＭビット値のＮビット部分を生成することを含む、
条項８および１１のいずれかに記載の装置。
１３．各並列加算が、前記下位Ｎビット部分の前記重複ビットのＮビット符号拡張を、任意の重複ビットが０に設定された前記後続のＮビット部分に対応するＮビット値に加算することを含む、条項１１および１２のいずれかに記載の装置。
１４．前記重複伝搬演算が、前記第２のＭビット値を、すべての重複ビットが０に等しい前記第３のＭビット値に変換することを含む、条項１１から１３のいずれかに記載の装置。
１５．前記第２のＭビット値を前記第３のＭビット値に変換することが、
前記第２のＭビット値の前記重複ビットの総計を表す重複値と、前記第２のＭビット値の前記非重複ビットの総計を表す非重複値と、を生成することと、
前記重複値と、前記非重複値と、のビットパターンに依存して複数の桁上げ値を生成することと、
各加算が、前記重複値および前記非重複値の対応する部分と前記桁上げ値のうちの１つを加算して、前記第３のＭビット値の対応する部分を生成するためである、複数の並列加算を実行することと、
を含む、条項１４に記載の装置。
１６．前記重複削減演算が、前記第１のＭビット値の１つまたは複数のＮビット部分の前記重複ビットを、重複アキュムレータ値の対応するＮビット部分に加算し、前記第１のＭビット値の前記１つまたは複数のＮビット部分の前記重複ビットをゼロに設定して前記第２のＭビット値を生成する重複累積演算を含む、条項７に記載の装置。
１７．前記処理回路が、前記第１のＭビット値を生成するために実行された演算回数を示す演算カウントを保持し、前記演算回数が所定数以上であることを前記演算カウントが示すときに前記重複削減演算を実行するように構成される、条項７から１６のいずれかに記載の装置。
１８．演算の前記所定数が２Ｖ−１−１以下であり、ここでＶは重複ビットを有する前記Ｎビット部分のうちのいずれかによって構成される重複ビットの前記最小数である、条項１７に記載の装置。
１９．前記処理回路が、前記重複削減演算が実行されたときに前記演算カウントをリセットするように構成される、条項１７および１８のいずれかに記載の装置。
２０．前記処理回路が、前記第１のＭビット値の前記Ｎビット部分のうちの１つのための前記重複ビットが所定値を有することを検出することに応答して、前記重複削減演算を実行するように構成される、条項７から１６のいずれかに記載の装置。
２１．前記処理回路が、前記第１のＭビット値に対する処理動作を実行するときに前記第１のＭビットデータ値の前記Ｎビット部分のうちの１つからのオーバーフローを検出することに応答して、前記重複削減演算を実行するように構成される、条項７から１６のいずれかに記載の装置。
２２．前記処理回路が、変換動作を実行して、前記冗長表現を有する第１のＭビット値を異なる表現の変換値に変換するように構成される、条項１から２１のいずれかに記載の装置。
２３．前記変換動作が、重複伝搬演算を実行して、最初のＭビット値の１つまたは複数のＮビット部分の前記重複ビットを前記最初のＭビット値の１つまたは複数の後続のＮビット部分に伝搬して、前記冗長表現を有する前記第１のＭビット値を生成することと、
前記第１のＭビット値を前記変換値に変換することと、
を含む、条項２２に記載の装置。
２４．前記処理回路が、前記アンカー値に依存して、前記第１のＭビット値の各Ｎビット部分を、対応する浮動小数点値にマッピングするように構成される、条項２２に記載の装置。
２５．前記処理回路が、前記変換された値として、前記第１のＭビット値の各Ｎビット部分からマッピングされた前記それぞれの浮動小数点値を含むベクトルを出力するように構成される、条項２４に記載の装置。
２６．前記処理回路が、前記第１のＭビット値の各Ｎビット部分からマッピングされた前記それぞれの浮動小数点値を加算して、前記変換された値として単一の浮動小数点値を生成するように構成される、条項２４に記載の装置。
２７．前記第１のＭビット値が３つ以上のＮビット部分を含むとき、前記処理回路が、前記第１のＭビット値の前記最下位Ｎビット部分からマッピングされた前記浮動小数点値で始まり、前記第１のＭビット値の前記最上位Ｎビット部分からマッピングされた前記浮動小数点値で終わる順序で、前記それぞれの浮動小数点値を加算するように構成される、条項２６に記載の装置。
２８．前記変換された値が浮動小数点値であるとき、前記処理回路が、前記第１のＭビット値の少なくとも１つのＮビット部分の非重複ビットの中から選択されたビットの選択されたグループを、ビットの前記選択されたグループよりも下位の前記第１のＭビット値のビットに基づいて、丸めることにより、前記浮動小数点値の仮数部を形成するように構成される、条項２２に記載の装置。
２９．前記アンカー値がプログラム可能である、条項１から２８のいずれかに記載の装置。
３０．前記Ｎビット部分の各々が、Ｎ／２以下の重複ビットを有する、条項１から２９のいずれかに記載の装置。
３１．前記重複ビットが符号付き整数値を表す、条項１から３０のいずれかに記載の装置。
３２．前記処理回路が、重複サイズ値に基づいて、前記冗長表現の少なくとも１つのＮビット部分のための重複ビットの前記数を識別するように構成される、条項１から３１のいずれかに記載の装置。
３３．前記重複サイズ値がプログラム可能である、条項３２に記載の装置。
３４．前記重複サイズ値が制御レジスタ内で指定される、条項３２および３３のいずれかに記載の装置。
３５．前記アンカー値が、前記重複サイズ値と同じ前記制御レジスタ内で指定される、条項３４に記載の装置。
３６．前記重複サイズ値が、前記冗長表現を有する少なくとも１つのデータ値を処理するように前記処理回路を制御するためのデータ処理命令によって指定される、条項３３に記載の装置。
３７．前記重複サイズ値が、前記冗長表現の前記Ｎビット部分のうちの２つ以上に対して別々に重複ビットの前記数を指定する、条項３２から３６のいずれかに記載の装置。
３８．累積命令に応答して、前記複数の加算回路ユニットが、アキュムレータレジスタに格納されたＭビットアキュムレータ値を含む前記冗長表現を有する前記少なくとも２つのＭビットデータ値のうちの１つとの、前記複数のＮビット加算を実行するように構成され、前記処理回路が、前記アキュムレータレジスタに前記Ｍビット結果値を書き込むように構成される、条項２に記載の装置。
３９．所定のタイプの命令に応答して、各Ｎビット加算が、少なくとも３つのＭビットデータ値の対応するＮビット部分を加算することを含む、条項２に記載の装置。
４０．各加算回路ユニットが、前記少なくとも３つのＭビット値の対応するＮビット部分を結合して、２つのＮビット項を生成するためのウォレスツリーと、前記２つのＮビット項を加算して、前記Ｍビット結果値の前記対応するＮビット部分を生成するための桁上げ伝搬加算器と、を含む、条項３９に記載の装置。
４１．複数の入力データ要素を含む入力ベクトルを識別する所定のタイプの命令に応答して、前記処理回路が、前記入力ベクトルの対応する入力データ要素内で指定されたそれぞれの値に対応する前記少なくとも２つのＭビットデータ値によって、前記Ｎビット演算を実行するように構成される、条項１から４０のいずれかに記載の装置。
４２．前記所定のタイプの命令に応答して、前記処理回路が、前記入力ベクトルの入力データ要素の第１のサブセットに対応するＭビットデータ値に対してＮビット演算の第１のセットを、前記入力ベクトルの入力データ要素の第２のサブセットに対応するＭビットデータ値に対してＮビット加算の第２のセットを、実行するように構成される、条項４１に記載の装置。
４３．前記処理回路が、プログラム可能な入力マップ情報に依存して、どの入力データ要素が前記第１のサブセットまたは前記第２のサブセットにあるかを選択するように構成される、条項４２に記載の装置。
４４．前記少なくとも２つのＭビットオペランド値が、２つのオペランド値を乗算するための少なくとも１つの乗算命令に応答して、前記処理回路によって生成された複数の部分積を含む、条項１から４３のいずれかに記載の装置。
４５．Ｍ＞Ｐ＞Ｎとして、複数のＮビット部分を使用してＰビット数値を表す冗長表現を有するＭビットデータ値を処理するステップを含む、データ処理方法であって、
アンカー値に基づいて前記冗長表現の各Ｎビット部分のビットの有効桁が識別され、少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有し、
前記処理するステップが、複数の独立したＮビット演算を並列に実行するステップを含み、各Ｎビット演算が、前記冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、前記冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む、
方法。
４６．Ｍ＞Ｐ＞Ｎとして、複数のＮビット部分を使用してＰビット数値を表す冗長表現を有するＭビットデータ値を処理するための手段を含む装置であって、
前記処理するための手段が、アンカー値に基づいて前記冗長表現の各Ｎビット部分のビットの有効桁を識別するように構成され、少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有し、
前記処理するための手段が、複数の独立したＮビット演算を並列に実行するための手段を含み、各Ｎビット演算が、前記冗長表現を有するＭビット結果値の対応するＮビット部分を生成するために、前記冗長表現を有する少なくとも２つのＭビットオペランド値の対応するＮビット部分の関数を計算することを含む、
装置。
４７．Ｍ＞Ｐ＞Ｎとして、第２のデータ値を生成するために第１のデータ値に対して重複伝搬演算を実行する処理回路であって、前記第１および第２のデータ値が、複数のＮビット部分を含むＭビットデータ値を使用してＰビット数値を表す冗長表現を有し、前記冗長表現において、最上位Ｎビット部分以外の各Ｎビット部分が、後続のＮビット部分の複数の最下位ビットと同じ有効桁を有する複数の重複ビットを含む処理回路を含む装置であって、
前記処理回路が、前記第１のデータ値の対応するＮビット部分の非重複ビットを、前記第１のデータ値の先行するＮビット部分の前記重複ビットに加算することを含む加算演算を実行することにより、最下位Ｎビット部分以外の前記第２のデータ値の各Ｎビット部分を生成するように構成される、
装置。
４８．前記第２のデータ値において、重複ビットを有するＮビット部分ごとに、前記２つの最下位重複ビットが、値００、０１、１１のうちの１つを有し、任意の残りの重複ビットが、前記２番目の最下位重複ビットと同じ値を有する、条項４７に記載の装置。
４９．前記処理回路が、前記第２のデータ値の前記Ｎビット部分のうちの少なくとも２つについて前記加算演算を並列に実行するように構成される、条項４７および４８のいずれかに記載の装置。
５０．前記処理回路が、前記最下位Ｎビット部分以外の前記第２のデータ値の前記Ｎビット部分の各々について前記加算演算を並列に実行するように構成される、条項４７から４９のいずれかに記載の装置。
５１．前記処理回路が、前記第２データ値の前記Ｎビット部分のうちの少なくとも２つについて前記加算演算を並列に実行する複数の並列加算回路ユニットを含む、条項４７から５０のいずれかに記載の装置。
５２．前記加算演算が、前記先行するＮビット部分の前記重複ビットのＮビット符号拡張を、任意の重複ビットが０に設定された前記第１のデータ値の前記対応するＮビット部分に等価なＮビット値に加算することを含む、条項４７から５１のいずれかに記載の装置。
５３．前記処理回路が、非重複ビットが前記第１のデータ値の前記最下位Ｎビット部分の対応する非重複ビットに等しく、前記重複ビットが０に設定された、前記第２のデータ値の前記最下位Ｎビット部分を生成するように構成される、条項４７から５２のいずれかに記載の装置。
５４．前記重複伝搬演算が、前記第２のデータ値を、前記冗長表現を有する第３のデータ値に変換することをさらに含み、前記第３のデータ値のすべての重複ビットが０に等しい、条項４７から５３のいずれかに記載の装置。
５５．前記処理回路が、
前記第２のＭビット値の前記重複ビットの総計を表す重複値と、前記第２のＭビット値の前記非重複ビットの総計を表す非重複値と、を生成することと、
前記重複値と、前記非重複値と、のビットパターンに依存して、複数の桁上げ値を生成することと、
各加算が、前記重複値および前記非重複値の対応する部分と前記桁上げ値のうちの１つを加算して、前記第３のデータ値の対応する部分を生成するためである、複数の並列加算を実行することと、
により、前記第３のデータ値を生成するように構成される、条項５４に記載の装置。
５６．入力オペランドを識別する命令に応答して、前記処理回路が、
前記加算演算が、
前記第１のデータ値の前記対応するＮビット部分の前記非重複ビットと、
前記第１のデータ値の前記先行するＮビット部分の前記重複ビットと、
前記冗長表現を有し前記入力オペランドに対応する第３のデータ値の対応するＮビット部分と、
を加算することを含む、
前記重複伝搬演算を実行するように構成される、条項４７から５５のいずれかに記載の装置。
５７．前記入力オペランドが前記冗長表現以外の表現を有し、前記命令に応答して、前記処理回路が前記入力オペランドを前記第３のデータ値に変換するように構成される、条項５６に記載の装置。
５８．前記重複ビットが符号付き整数値を表す、条項４７から５７のいずれかに記載の装置。
５９．前記処理回路が、重複サイズ値に基づいて重複ビットの前記数を識別するように構成される、条項４７から５８のいずれかに記載の装置。
６０．前記重複サイズ値がプログラム可能である、条項５９に記載の装置。
６１．前記処理回路が、アンカー値に基づいて前記冗長表現を使用して表されるデータ値の各Ｎビット部分のビットの有効桁を識別するように構成される、条項４７から６０のいずれかに記載の装置。
６２．前記処理回路が、前記第１データ値を生成するために実行される演算の数を示す演算カウントを保持し、演算の前記数が所定数以上であることを前記演算カウントが示すときに前記重複伝搬演算を実行するように構成される、条項４７から６１のいずれかに記載の装置。
６３．前記所定数が２Ｖ−１−２以下であり、ここでＶは重複ビットを有する前記Ｎビット部分のうちのいずれかによって構成される重複ビットの前記最小数である、条項６２に記載の装置。
６４．前記処理回路が、前記重複伝搬演算が実行されたときに前記演算カウントをリセットするように構成される、条項６２および６３のいずれかに記載の装置。
６５．前記処理回路が、前記第１のデータ値の前記Ｎビット部分のうちの１つのための前記重複ビットが所定値を有することを検出することに応答して、前記重複伝搬演算を実行するように構成される、条項４７から６１のいずれかに記載の装置。
６６．前記処理回路が、前記第１のデータ値に対する処理動作を実行するときに前記第１のデータ値の前記Ｎビット部分のうちの１つからのオーバーフローを検出することに応答して、前記重複伝搬演算を実行するように構成される、条項４７から６１のいずれかに記載の装置。
６７．Ｍ＞Ｐ＞Ｎとして、複数のＮビット部分を含むＭビットデータ値を使用してＰビット数値を表す冗長表現を有する第１のデータを受け取るステップであって、前記冗長表現において、最上位Ｎビット部分以外の各Ｎビット部分が、後続のＮビット部分の複数の最下位ビットと同じ有効桁を有する複数の重複ビットを含む、受け取るステップと、
前記冗長表現を有する第２のデータ値を生成するために、前記第１のデータ値に対して重複伝搬演算を実行するステップと、
を含む、データ処理方法であって、
前記第１のデータ値の対応するＮビット部分の非重複ビットを、前記第１のデータ値の先行するＮビット部分の前記重複ビットに加算することを含む加算演算を実行することにより、最下位Ｎビット部分以外の前記第２のデータ値の各Ｎビット部分が生成される、
方法。
６８．Ｍ＞Ｐ＞Ｎとして、第２のデータ値を生成するために第１のデータ値に対して重複伝搬演算を実行するための手段であって、前記第１および第２のデータ値が、複数のＮビット部分を含むＭビットデータ値を使用してＰビット数値を表す冗長表現を有し、前記冗長表現において、最上位Ｎビット部分以外の各Ｎビット部分が、後続のＮビット部分の複数の最下位ビットと同じ有効桁を有する複数の重複ビットを含む実行するための手段を含む装置であって、
前記実行するための手段が、前記第１のデータ値の対応するＮビット部分の非重複ビットを、前記第１のデータ値の先行するＮビット部分の前記重複ビットに加算することを含む加算演算を実行することにより、最下位Ｎビット部分以外の前記第２のデータ値の各Ｎビット部分を生成するように構成される、
装置。
６９．結果ベクトルの対応する結果データ要素を生成するために、少なくとも１つのオペランドベクトルのそれぞれのデータ要素に対して複数レーンの処理を実行する処理回路を含む装置であって、
前記処理回路が、処理のレーンごとにレーン位置情報を識別するように構成され、所与のレーン用の前記レーン位置情報が、前記結果ベクトルの１つまたは複数の結果データ要素にまたがる対応する結果データ値内で前記所与のレーンによって生成されるべき前記対応する結果データ要素の相対位置を識別し、
前記処理回路が、そのレーンについて識別された前記レーン位置情報に依存して、処理の各レーンを実行するように構成される、
装置。
７０．前記所与のレーン用の前記レーン位置情報が、前記対応する結果データ要素が前記対応する結果データ値の最上位データ要素であるかどうかを識別する、条項６９に記載の装置。
７１．処理の前記レーンのうちの１つについて検出されたオーバーフロー状態に応答して、前記処理回路が、前記対応する結果データ要素が前記対応する結果データ値の前記最上位データ要素であることを、処理の前記レーンのうちの前記１つについての前記レーン位置情報が示すかどうかに依存して、複数のオーバーフロー処理応答のうちの１つを選択するように構成される、条項７０に記載の装置。
７２．前記所与のレーン用の前記レーン位置情報が、前記対応する結果データ要素が前記対応する結果データ値の最下位データ要素であるかどうかを識別する、条項６９から７１のいずれかに記載の装置。
７３．前記所与のレーン用の前記レーン位置情報が、前記対応する結果データ要素を、
前記対応する結果データ値の最下位データ要素、
前記対応する結果データ値の最上位データ要素、
前記対応する結果データ値の中間データ要素、
のうちの１つとして識別する、条項６９から７２のいずれかに記載の装置。
７４．前記レーン位置情報が２ビットインジケータを含む、条項７３に記載の装置。
７５．処理の最上位または最下位レーンについての前記レーン位置情報が、前記対応する結果データ要素を前記対応する結果データ値の中間データ要素として識別するとき、前記処理回路が、前記結果ベクトルよりも多い数のビットを有する結果データ値の部分的部分を表す前記結果ベクトルを生成するように構成される、条項７３および７４のいずれかに記載の装置。
７６．処理の最上位または最下位レーン以外の処理の中間レーンについての前記レーン位置情報が、前記対応する結果データ要素を前記対応する結果データ値の前記最下位データ要素または前記最上位データ要素として識別するとき、前記処理回路が、２つ以上の独立した結果データ値を含む前記結果ベクトルを生成するように構成される、条項７３から７５のいずれかに記載の装置。
７７．前記レーン位置情報が、前記結果ベクトルが少なくとも２つの独立した結果データ値を含むことを識別するとき、複数の入力データ要素を含む入力ベクトルを識別する所定のタイプの命令に応答して、前記処理回路が、少なくとも
前記独立した結果データ値の第１を生成するように前記入力ベクトルの入力データ要素の第１のサブセットからマッピングされた前記少なくとも１つのオペランドベクトルのデータ要素の第１のサブセットに対する処理のレーンの第１のサブセットと、
前記独立した結果データ値の第２を生成するように前記入力ベクトルの入力データ要素の第２のサブセットからマッピングされた前記少なくとも１つのオペランドベクトルのデータ要素の第２のサブセットに対する処理のレーンの第２のサブセットと、
を実行するように構成される、条項６９から７６のいずれかに記載の装置。
７８．前記処理回路が、プログラム可能な入力マップ情報に依存して、どの入力データ要素が入力データ要素の前記第１のサブセットまたは入力データ要素の前記第２のサブセットにあるかを選択するように構成される、条項７７に記載の装置。
７９．前記処理回路が、前記複数の処理のレーンを並列に実行する複数の処理回路ユニットを含む、条項６９から７８のいずれかに記載の装置。
８０．前記レーン位置情報がプログラム可能である、条項６９から７９のいずれかに記載の装置。
８１．レーンごとの前記レーン位置情報が制御レジスタ内で指定される、条項６９から８０のいずれかに記載の装置。
８２．前記処理回路が、アンカー値に基づいて、前記少なくとも１つのオペランドベクトルまたは前記結果ベクトルの各データ要素のビットの有効桁を識別するように構成される、条項６９から８１のいずれかに記載の装置。
８３．前記レーン位置情報および前記プログラム可能なアンカー値が、同じ制御レジスタ内で指定される、条項８２に記載の装置。
８４．前記対応する結果値の最上位結果データ要素以外の結果データ要素が、後続の結果データ要素の複数の最下位ビットと同じ前記有効桁を有する複数の重複ビットを含む、条項６９から８３のいずれかに記載の装置。
８５．前記レーン位置情報と重複ビットの前記数を識別する重複値とが、同じ制御レジスタ内で指定される、条項６９から８４のいずれかに記載の装置。
８６．結果ベクトルの対応する結果データ要素を生成するために、少なくとも１つのオペランドベクトルのそれぞれのデータ要素に対して実行されるべき複数の処理レーンの各々についてのレーン位置情報を識別するステップであって、所与のレーン用の前記レーン位置情報が、前記結果ベクトルの１つまたは複数の結果データ要素にまたがる対応する結果データ値内で前記所与のレーンによって生成されるべき前記対応する結果データ要素の相対位置を識別する、識別するステップと、
そのレーンについて識別された前記レーン位置情報に依存して、処理の各レーンを実行するステップと
を含む、データ処理方法。
８７．結果ベクトルの対応する結果データ要素を生成するために、少なくとも１つのオペランドベクトルのそれぞれのデータ要素に対して複数レーンの処理を実行するための手段
を含む装置であって、
前記実行するための手段が、処理のレーンごとにレーン位置情報を識別するように構成され、所与のレーン用の前記レーン位置情報が、前記結果ベクトルの１つまたは複数の結果データ要素にまたがる対応する結果データ値内で前記所与のレーンによって生成されるべき前記対応する結果データ要素の相対位置を識別し、
前記実行するための手段が、そのレーンについて識別された前記レーン位置情報に依存して、処理の各レーンを実行するように構成される、
装置。
８８．複数のＸビット部分を含む第１のオペランドと、少なくとも１つのＹビット部分を含む第２のオペランドとを乗算するためのデータ処理方法であって、
各部分積が前記第１のオペランドの選択されたＸビット部分と前記第２のオペランドの選択されたＹビット部分との積を含む、複数の部分積を生成するステップと、
部分積ごとに、前記部分積の有効桁を示す有効桁指示情報に依存して、前記部分積を冗長表現に変換するステップであって、前記冗長表現において、前記部分積が複数のＮビット部分を使用して表され、前記冗長表現の少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有する、変換するステップと、
前記冗長表現で表される前記複数の部分積を加算するステップと、
を含む、方法。
８９．前記部分積を加算するステップが、前記冗長表現で表される前記部分積のそれぞれのＮビット部分を使用して、独立したＮビット加算を実行するための複数のＮビット加算回路ユニットを使用して実行される、条項８８に記載の方法。
９０．前記部分積を加算するステップが、前記冗長表現を有するアキュムレータ値を格納するアキュムレータレジスタに前記部分積を累積するステップを含む、条項８８および８９のいずれかに記載の方法。
９１．前記乗算が複数の部分積累積演算を含み、各部分積累積演算が、前記選択されたＸビット部分および前記選択されたＹビット部分として選択された異なるペアの部分に対応し、
前記複数の部分積のうちの１つを生成するために、前記選択されたＸビット部分と前記選択されたＹビット部分とを乗算するステップと、
前記有効桁指示情報に依存して、前記複数の部分積のうちの前記１つを前記冗長表現に変換するステップと、
更新されたアキュムレータ値を生成するために、前記冗長表現内の前記複数の部分積のうちの前記１つを、前記冗長表現を有する累積値に加算するステップと、
を含み、
１つの部分積累積演算のための前記更新されたアキュムレータ値が、次の部分積累積演算のための前記アキュムレータ値として使用される、
条項８８から９０のいずれかに記載の方法。
９２．前記冗長表現における前記複数の部分積を加算した結果に対して重複伝搬演算を実行するステップを含み、前記重複伝搬演算が、前記結果の１つまたは複数のＮビット部分の前記重複ビットを、前記結果の１つまたは複数の後続のＮビット部分に伝搬することを含む、条項８８から９１のいずれかに記載の方法。
９３．前記部分積累積演算が、各部分積累積演算において生成された前記部分積の有効桁の昇順で実行され、
当該方法が、各重複伝搬加算が、前記アキュムレータ値の所与のＮビット部分の前記重複ビットを、前記アキュムレータ値の後続のＮビット部分の非重複ビットに加算することを含む、複数の重複伝搬加算を実行するステップを含み、
前記複数の重複伝搬加算のうちの少なくとも１つが、前記部分積累積演算のうちの少なくとも１つの前記加算ステップと並列に実行される、
条項９１に記載の方法。
９４．前記有効桁指示情報が、前記第１のオペランド内の前記選択されたＸビット部分と前記第２のオペランド内の前記選択されたＹビット部分との相対位置に依存する、条項８８から９３のいずれかに記載の方法。
９５．前記有効桁指示情報が、前記選択されたＸビット部分および前記選択されたＹビット部分のうちの少なくとも１つに関連付けられた有効桁指示パラメータに依存する、条項８８から９４のいずれかに記載の方法。
９６．前記有効桁指示情報が、前記部分積のうちの少なくとも１つを生成するように処理回路を制御するための命令によって指定されたパラメータに依存する、条項８８から９５のいずれかに記載の方法。
９７．前記有効桁指示情報が、前記第１のオペランドのどのＸビット部分が前記選択されたＸビット部分であるかを識別する前記命令のパラメータに依存する、条項８８から９６のいずれかに記載の方法。
９８．前記第１のオペランドおよび前記第２のオペランドが整数を含む、条項８８から９７のいずれかに記載の方法。
９９．Ｘ≦５３およびＹ≦５３である、条項８８から９８のいずれかに記載の方法。
１００．各部分積が、２つの浮動小数点値の仮数部を乗算するための浮動小数点乗算回路を使用して生成される、条項９９に記載の方法。
１０１．前記第１のオペランドを浮動小数点値の対応するベクトルにマッピングするステップを含み、各浮動小数点値が、前記第１のオペランドのそれぞれのＸビット部分からマッピングされた仮数部と、前記第１のオペランド内のそのＸビット部分の有効桁に依存する指数部とを有し、
所与の部分積についての前記有効桁指示情報が、前記所与の部分積を生成するために使用される前記選択されたＸビット部分に対応する前記浮動小数点値の前記指数部に依存する、
条項８８から１００のいずれかに記載の方法。
１０２．Ｘ＝Ｙである、条項８８から１０１のいずれかに記載の方法。
１０３．ＸがＹと異なる、条項８８から１０２のいずれかに記載の方法。
１０４．条項８８から１０３のいずれかに記載の方法を実行するように構成された処理回路を含むデータ処理装置。
１０５．部分積を生成するために、複数のＸビット部分を含む第１のオペランドの選択されたＸビット部分と、少なくとも１つのＹビット部分を含む第２のオペランドの選択されたＹビット部分とを乗算する乗算回路と、
前記部分積の有効桁を示す有効桁指示情報に依存して、前記部分積を、冗長表現を有する変換部分積に変換する変換回路であって、前記冗長表現において、前記部分積が複数のＮビット部分を使用して表され、前記冗長表現の少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有する、変換回路と、
前記変換部分積を、前記冗長表現を有するアキュムレータ値に加算する加算回路と、
を含む、データ処理装置。
１０６．前記加算回路が、前記変換部分積の対応するＮビット部分および前記アキュムレータ値を使用して、独立したＮビット加算を実行する複数のＮビット加算回路ユニットを含む、条項１０５に記載のデータ処理装置。
１０７．前記選択されたＸビット部分および前記選択されたＹビット部分として選択された部分の様々な組合せに対応する、前記冗長表現内の複数の変換部分積を生成するように、前記乗算回路および前記変換回路を、かつ、前記複数の部分積の各々を前記アキュムレータ値に加算するように前記加算回路を、制御するために、少なくとも１つの乗算命令に応答する制御回路を含む、条項１０５および１０６のいずれかに記載のデータ処理装置。
１０８．部分積を生成するために、複数のＸビット部分を含む第１のオペランドの選択されたＸビット部分と、少なくとも１つのＹビット部分を含む第２のオペランドの選択されたＹビット部分とを乗算するための手段と、
前記部分積の有効桁を示す有効桁指示情報に依存して、前記部分積を、冗長表現を有する変換部分積に変換するための手段であって、前記冗長表現において、前記部分積が複数のＮビット部分を使用して表され、前記冗長表現の少なくとも２つの隣接するＮビット部分のグループ内で、当該グループの下位Ｎビット部分の複数の重複ビットが、当該グループの少なくとも１つの上位Ｎビット部分の複数の最下位ビットと同じ有効桁を有する、変換するための手段と、
前記変換部分積を、前記冗長表現を有するアキュムレータ値に加算するための手段と、
を含む、データ処理装置。
【０３３５】
本出願において、「…ように構成された」という単語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方式を意味する。たとえば、装置は、定義された動作を提供する専用のハードウェアを有してもよく、またはプロセッサもしくは他の処理デバイスは、機能を実行するようにプログラムされてもよい。「ように構成された」は、定義された動作を提供するために、装置要素が何らかの方法で変更される必要があることを意味しない。
【０３３６】
本発明の例示的な実施形態が添付の図面を参照して本明細書に詳細に記載されたが、本発明はそれらの厳密な実施形態に限定されず、添付の特許請求の範囲によって規定される本発明の範囲および精神から逸脱することなく、様々な変更および修正が当業者によって達成され得ることが理解されるべきである。
【０３３７】
付録Ａ−冗長ＨＰＡ、実例
（この付録では、ｍ．ｓ．ｂ．は「最上位ビット」を指し、ｌ．ｓ．ｂ．は「最下位ビット」を指す。）
【０３３８】
累積用の高精度（ＨＰＡ）形式は、累積値が符号を変えるにつれて非常に長い加算／減算および上位レーンにわたる面倒な符号計算を意味するクロスレーン加算を必要とする場合がある。また、ＨＰＡは、（好ましくは、ベクトルの各要素が独立して処理されることを可能にする）ＳＩＭＤベクトル処理のまさしく概念に違反している。したがって、レーンにわたって桁上げを伝搬するべきではなく、レーン内で桁上げを収容できるいくつかの「重複」ビットをレーンが含む、冗長ＨＰＡ（「ＲＨＰＡ」）が提案される。これにより、ＨＰＡのロングワード長加算がいくつかのより小さいＳＩＭＤの２の補数の加算として実行されることが可能になる。
【０３３９】
ベクトルＺｗ［３：０］が、４つの６４ビットレーンの最下位ビットの重みを６４ビット符号付き要素として含むと仮定する。ＲＨＰＡ値では、これらの値は、レーン幅（６４）ではなく６４−ｏｖｌｐだけレーン間で異なり、ここで、ｏｖｌｐは、隣接するレーン間にある重複ビット数を指定するために使用されるパラメータである。付録Ａの例では、ｏｖｌｐ＝４である。したがって、ＨＰＡのｍ．ｓ．ｂ．が（単精度ＩＥＥＥ浮動小数点数の最大指数部よりも数ビット多く、最終結果が倍精度に変換される必要があることを意味する）＋１４０の有効桁に設定されている場合、ｏｖｌｐ＝４である４つのレーン用のＺｗ［ｎ］の値は、｛＋７７，＋１７，−４３，−１０３｝になる。これにより、非冗長表現の４×６４ビットレーンＨＰＡで取得可能な２５６ビットではなく、２４４ビットの有効ＨＰＡワード長が得られる。
【０３４０】
ＦＰからＲＨＰＡへの変換
入力ＦＰ数は各レーンにブロードキャストされる。各レーン内のロジックは、ＦＰの指数部をそのローカルＺｗ値と比較し、指数部がＺｗ［ｎ］よりも小さい場合、そのレーン内にビットは設定されず、指数部がＺｗ［ｎ］以上である場合、レーンはＺｗ値、ＦＰ指数部、およびＦＰ精度から計算された量だけＦＰ数を左シフトし、左シフト値があるしきい値を上回る場合、そのレーン内にもビットは設定されない。
【０３４１】
変換アルゴリズムの要約：
１．ベクトルレーンＺａ［ｎ］にＦＰ［３１：０］をブロードキャストする
２．計算された量だけ各レーン内の仮数部を左シフトする（またはすべてのビットをゼロに設定する）
３．入力ＦＰ数が負であった場合、すべての符号ビットをｏｖｌｐビットに格納するように、あらゆるレーンの２の補数を別々に取り、符号拡張する。
【０３４２】
例１：正の単精度ＦＰ数をＨＰＡに変換する
入力された３２−ｂのＦＰ数＝＋１．ｆｆｆｆｆｅ×２３９
指数部（ＦＰ）−４レーン用のＺｗ［ｎ］（ｏｖｌｐ＝４である、上記の紹介から取られたＺｗ値）：
レーン３：３９−７７＝−３８；負、したがってすべてゼロ
レーン２：３９−１７＝＋２２；正、したがって２２＋１箇所左にシフトする
レーン１：３９−−４３＝＋８２；正、したがって８２＋１箇所左にシフトする
レーン０：３９−−１０３＝＋１４２；正、１４２＋１＝１４３≧６０＋２４、したがってすべてゼロ
（注：レーン内の左シフト距離≧６４−ｏｖｌｐ＋仮数部ワード長である場合、仮数部はそのレーンの非重複範囲から完全にシフトされるので、レーンは６４’ｂ０に設定される。）
【０３４３】
図３１は最終結果を示し、ここで、下線付き１６進数はｏｖｌｐビットである。
【０３４４】
４つのレーンの数値は以下の通りである（Ｚｗ［ｎ］と乗算された２の補数として書かれている）：
レーン３：  ０
レーン２：  ６４’ｈ００００＿００００＿００７ｆ＿ｆｆｆｆ×２１７＝＋７ｆ＿ｆｆｆｆ×２１７
レーン１：  ６４’ｈ０８００＿００００＿００００＿００００×２−４３＝＋１×２１６
レーン０：  ０
【０３４５】
変換が成功したことを確認するために、レーンの合計は以下の通りである。
Σレーン＝０＋ｆｆ＿ｆｆｆｅ×２１６＋１×２１６＋０＝ｆｆ＿ｆｆｆｆ×２１６＝１．ｆｆｆｆｆｅ×２３９、入力ＦＰ数。
【０３４６】
例２：負の単精度ＦＰ数をＨＰＡに変換する
同じＦＰ数に適用される変換手順があるが、次にネゲートされる。
入力された３２−ｂのＦＰ数＝−１．ｆｆｆｆｆｅ×２３９
指数部（ＦＰ）−４つのレーン用のＺｗ［ｎ］は前と同じである：
レーン３：３９−７７＝−３８；負、したがってすべてゼロ
レーン２：３９−１７＝＋２２；正、したがって２２＋１箇所左にシフトする
レーン１：３９−−４３＝＋８２；正、したがって８２＋１箇所左にシフトする
レーン０：３９−−１０３＝＋１４２；正、１４２＋１＝１４３≧６０＋２４、したがってすべてゼロ
【０３４７】
図３２は最終結果を示し、ここで、下線付き１６進数はｏｖｌｐビットである。
【０３４８】
４つのレーンの数値は以下の通りである（Ｚｗ［ｎ］と乗算された２の補数として書かれている）：
レーン３：  ０（注：０の２の補数を取ると０が返される！）
レーン２：  ６４’ｈｆｆｆｆ＿ｆｆｆｆ＿ｆｆ８０＿０００１×２１７＝−７ｆ＿ｆｆｆｆ×２１７
レーン１：  ６４’ｈｆ８００＿００００＿００００＿００００×２−４３＝−０８００＿００００＿００００＿００００×２−４３＝−１×２１６
レーン０：  ０
Σレーン＝０＋−ｆｆ＿ｆｆｆｅ×２１６＋−１×２１６＋０＝−ｆｆ＿ｆｆｆｆ×２１６＝−１．ｆｆｆｆｆｅ×２３９
【０３４９】
ＲＨＰＡにおける加算
２つのＲＨＰＡ数は、各レーン内で通常の２の補数加算を別々に実行することによって加算される。加算されるＲＨＰＡ数のうちの１つがそのすべてのｏｖｌｐビットが低く設定されていると仮定すると（たとえば、それは上述されたようにＦＰ→ＲＨＰＡ変換の結果なので）、２ｏｖｌｐ−１−１のそのような加算は、レーンのいずれかがオーバーフローする危険なしに順番に実行することができる。ここには、冗長数表現を使用することによって得られる魅力的な利点が存在する。
【０３５０】
例３：（「レーンオーバーフロー」を引き起こす）ＲＨＰＡ加算
図３３の例では、すべての未指定の１６進数はすべて「０」またはすべて「ｆ」のいずれかである。レーン２は、２つの大きい正の数が加算されたためにオーバーフローしており、６４−ｂの２の補数として表されるには正であり過ぎる合計を返す。同様に、レーン０は、２つの大きい負の数が加算されためにオーバーフローしており、６４−ｂの２の補数として表されるには負であり過ぎる合計を返す。最初のケースでは、正しい結果は６５−ｂの２の補数として表され、そのｍ．ｓ．ｂ．は「０」であり、同様に、２番目のケースでは、正しい結果は６５−ｂの２の補数として表され、そのｍ．ｓ．ｂ．は「１」である。
【０３５１】
標準的な２の補数のオーバーフローロジックは、ＲＨＰＡ加算に起因して任意のレーンでオーバーフローが発生したかどうかを検出する（すなわち、ｍ．ｓ．ｂ．における桁上げインと桁上げアウトが同じであるかどうかをチェックする）ために使用することができる。（最上位を除く）任意のレーンにおいて「レーンオーバーフロー」が発生した場合、ｏｖｌｐビットはオーバーフローしているレーンのｍ．ｓ．ｂ．から最上位レーンのｌ．ｓ．ｂ．にシフトされ、レーンの全幅に符号拡張され、そこにある値に加算される。また、オーバーフローしたレーン内のｏｖｌｐビットは０にリセットされる。
【０３５２】
しかしながら、オーバーフローしたそれらのレーンのみを修正すると、レーンに沿って伝搬する桁上げに起因して他の場所でオーバーフローが発生する可能性がある。したがって、１つまたは複数のレーンにおけるオーバーフロー状態に応答するためのより良い技法は、すべてのレーン内のｏｖｌｐビットを１レーンシフトアップし、それらを既存値に加算することである。この手順は、（１対のレーンを他のレーンとは異なるように扱う必要がないおかげで）より簡単であるという利点を有するが、すべてのレーンを同時に更新することができるので遅くはない。
【０３５３】
例４：ＲＨＰＡ数からレーンオーバーフローを除去する
図３４の例では、例３からのオーバーフローする合計は、ｏｖｌｐビットの並列加算によってオーバーフローしていない（制限付き冗長）表現に変換される。
【０３５４】
ＲＨＰＡからＦＰへの変換
最上位レーンから始めて、ガードビットおよびスティッキービットを含む目的フォーマットのＦＰ数を形成するために、レーン内の２の補数をＺｗと結合する。最上位レーンの値が負の場合、これは、ＩＥＥＥ標準ＦＰ形式によって必要とされるように、符号絶対値結果を返すために、レーン内の値に対して２の補数演算を実行することを必要とする。次に、この最初のＦＰ結果は、元のＨＰＡ特許明細書に記載されているように、次のレーンダウン内の６４−ｂ値およびＺｗの次の低い値と結合される。手順はすべてのレーンにわたって繰り返されて、最終的な変換結果に達する。
【０３５５】
あるいは、レーン内の非重複ビットの数がＦＰ形式の仮数部ビットの数よりも小さいか、または等しい場合、各レーンはそれぞれの浮動小数点値に並列にマッピングすることができ、次いで、それらは一緒に加算されて、最終的な変換結果を形成することができる。
【０３５６】
ＲＨＰＡ内のアキュムレータオーバーフロー
ＨＰＡ形式に冗長性を導入すると、ベクトルの全体にわたって桁上げを伝搬する必要なしに、非常に広い加算が可能になり、これにより、ＨＰＡ加算が１サイクルで（快適に）完了することができるので、重要なパフォーマンス上の利点が構成される。しかしながら、すべての冗長数システムと共通して、全幅ＲＨＰＡがベクトルをオーバーフローしたかどうかを正確に検出することは困難になる。すなわち、先頭レーンのみがオーバーフローの発生について評価された場合、２つの誤解を招くケースが発生する：
（ｉ）先頭レーンがオーバーフローしたためオーバーフローが発生しているというフラグが立てられる場合があるが、下位レーンはＨＰＡを範囲内に戻す反対の符号付きの値を含んでいる場合がある
（ｉｉ）先頭レーンがオーバーフローしていなくても、下位レーンがＨＰＡを範囲外に促す同じ符号付きの値を含んでいる可能性があるため、オーバーフローが検出されなくなる場合がある。
【０３５７】
アキュムレータオーバーフローを確実に検出するために、ＲＨＰＡは非冗長形式に変換することができる。そのような変換を実行するためのアルゴリズムは簡単である：最下位レーンから始まり、ｏｖｌｐビットを次の（符号拡張付き）最上位レーンに移動し、そこに含まれる値に加算し、最下位レーン内のｏｖｌｐビットを０にリセットする。１つおいて次の最上位レーン内のｏｖｌｐビットが先頭レーンに加算されるまで、この手順を一度に１レーン繰り返す。すべてのレーン内のｏｖｌｐビットが０なので、ＲＨＰＡ値は次に非冗長２の補数として表される。この方法は、前に記載された「レーン重複」除去の直列版であり、リップル桁上げバイナリ加算に類似している。
【０３５８】
例５：ＲＨＰＡ数を非冗長形式に変換する
図３５の例では、ＲＨＰＡ数の先頭レーンがオーバーフローしている：ＲＨＰＡ値を非冗長形式に変換すると、ＲＨＰＡ数が範囲内にあることがわかる。
【０３５９】
先頭レーンのみに基づく場合、アキュムレータのオーバーフロー検出がいかに不正確であるか、すなわち、どれほど多くの誤警報が発生したかについての疑問が残る。レーンの幅によれば、これは「それほど多くない」と信じられる。また、「本当の」重複条件は、パフォーマンスを改善するために、例えば加算の間ではなく複数のＦＰ数の進行中の累積と並行して検出することができる。非冗長ＲＨＰＡでは、アキュムレータオーバーフローの検出はもちろん簡単である。
【０３６０】
概要
冗長高精度アキュムレータ（「ＲＨＰＡ」）が紹介された。ＲＨＰＡは、そのレーンが次の上位６４−ｂレーンのｌ．ｓ．ｂ．と同じ有効桁を有するいくつかのｍ．ｓ．ｂ．「重複」ビットを含むベクトルである。これにより、ＨＰＡがＳＩＭＤの６４−ｂの２の補数の整数加算として実装されるために必要な非常に長いワード長の加算が可能になる。
【０３６１】
ＲＨＰＡ数をその非冗長「正準」形式に変換して、それによりすべてのｏｖｌｐビットをゼロに設定する方法も説明された。（同様の方式で、レーンオーバーフローを伴うＲＨＰＡをどのようにして「準正準」形式にすばやく変換できるかも示された）。非冗長ＲＨＰＡ表現は、アキュムレータのオーバーフローを正確に検出する信頼性の高い方法を提供する。
【０３６２】
付録Ｂ−桁上げ先見方式による制限付き冗長ＲＨＰＡから非冗長ＲＨＰＡへの変換
【０３６３】
最初に制限付き冗長形式に変換することにより、非冗長形式に変換するプロセスを高速化することができる。それは、伝搬または生成された＋１および−１の値用の重複ビットと非重複ビットの両方を調べる桁上げ先見を行うことを含む。
【０３６４】
「制限付き冗長形式への変換」演算の後、非重複ビットは、レーン当たり６４−ｏｖｌｐビットを有するレーンにわたって分割された２の補数を形成する。加えて、各レーンのｌｓｂにおいて、その値が｛−１，０，＋１｝に制限されている次の最下位レーンからの重複ビットが存在する。制限付き冗長形式から非冗長化形式への変換をすばやく完了するために、すべてのレーンにわたって、桁上げ先見ネットワーク用のビットを導出し、生成し、伝搬したい。
【０３６５】
非冗長ＲＨＰＡ表現が高い基数の２の補数であれば、ｏｖｌｐの２進符号付き数のベクトルを第２の高い基数の２の補数に変換することによって開始するべきである。次いで、２つの数字（ｎｏｎ−ｏｖｌｐおよびｏｖｌｐ）から桁上げ先見情報を抽出して、並列ＳＩＭＤ方式でそれらの加算を加速することに注目することができる。
【０３６６】
４−ｂのｎｏｎ−ｏｖｌｐ＋４−ｂのｏｖｌｐのフォーマット（上記で使用されたように、Ｎ＝８、Ｖ＝４）を使用して、ｏｖｌｐビットを２の補数に変換するいくつかの例から始めよう。
【０３６７】
例Ａ：レーン０／１における−１のｏｖｌｐがレーン２における＋１のｎｏｎ−ｏｖｌｐと結合する；レーン２／３における＋１のｏｖｌｐ
【数２９】
2019500672.tif 000037
正しい非冗長形式は以下の通りである。
【数３０】
2019500672.tif 000038
表現／レイアウトが異なる元の制限付き冗長値：
【数３１】
2019500672.tif 000039
ｏｖｌｐを基数１６の２の補数に変換する：
【数３２】
2019500672.tif 000040
レーンにわたる桁上げ伝搬とともにｏｖｌｐビットとｎｏｎ−ｏｖｌｐビットを加算する：
【数３３】
2019500672.tif 000041
正しい！
【０３６８】
例Ｂ：レーン０／１における＋１のｏｖｌｐがレーン２／３における−１のｏｖｌｐと結合する
【数３４】
2019500672.tif 000042
正しい非冗長形式は以下の通りである。
【数３５】
2019500672.tif 000043
表現／レイアウトが異なる元の制限付き冗長値：
【数３６】
2019500672.tif 000044
ｏｖｌｐを基数１６の２の補数に変換し、レーンにわたる桁上げ伝搬とともにｎｏｎ−ｏｖｌｐビットに加算する：
【数３７】
2019500672.tif 000045
正しい！
【０３６９】
例Ｃ：レーン１／２における−１のｏｖｌｐが、レーン２／３における＋１のｏｖｌｐではなく、レーン０／１における＋１のｏｖｌｐと結合する
【数３８】
2019500672.tif 000046
正しい非冗長形式は以下の通りである。
【数３９】
2019500672.tif 000047
表現／レイアウトが異なる元の制限付き冗長値：
【数４０】
2019500672.tif 000048
ｏｖｌｐを基数１６の２の補数に変換し、レーンにわたる桁上げ伝搬とともにｎｏｎ−ｏｖｌｐビットに加算する：
【数４１】
2019500672.tif 000049
正しい！
【０３７０】
例Ｄ：レーン２／３における＋１のｏｖｌｐがレーン１／２およびレーン０／１における−１のｏｖｌｐと結合する
【数４２】
2019500672.tif 000050
正しい非冗長形式は以下の通りである。
【数４３】
2019500672.tif 000051
表現／レイアウトが異なる元の制限付き冗長値：
【数４４】
2019500672.tif 000052
ｏｖｌｐを基数１６の２の補数に変換し、レーンにわたる桁上げ伝搬とともにｎｏｎ−ｏｖｌｐビットに加算する：
【数４５】
2019500672.tif 000053
正しい！
【０３７１】
例Ｅ：すべてのレーンにおける−１のｏｖｌｐ
【数４６】
2019500672.tif 000054
正しい非冗長形式は以下の通りである。
【数４７】
2019500672.tif 000055
表現／レイアウトが異なる元の制限付き冗長値：
【数４８】
2019500672.tif 000056
ｏｖｌｐを基数１６の２の補数に変換し、レーンにわたる桁上げ伝搬とともにｎｏｎ−ｏｖｌｐビットに加算する：
【数４９】
2019500672.tif 000057
正しい！
【０３７２】
これらの例から、ｏｖｌｐビットは、先頭レーンを除くすべてのレーン内で、それらの数字が｛０，１，２４−１，２４−２｝に制限された数に変換されることがわかり、＋ｖｅ個の数字｛２４−１，２４−２｝は単に｛−１、−２｝によって置き換えられる。
【０３７３】
したがって、変換されたｏｖｌｐベクトル内に４つの可能な結果数値しか存在しないので、ｏｖｌｐビットを基数２６４−ｏｖｌｐの数に変換するために、２−ｂ／レーンの桁上げ伝搬加算器だけが必要である。
【０３７４】
例Ａ
【数５０】
2019500672.tif 000058
は、
【数５１】
2019500672.tif 000059
になる。
【０３７５】
結果の最上位ビット（下線）は、符号付き数ではなく２の補数であるため、常に負の重み付けがされている。
【０３７６】
または、（再び例Ａ）−１のｏｖｌｐの２の補数を取ると
【数５２】
2019500672.tif 000060
同じ結果が得られる。
【０３７７】
例Ｂ
【数５３】
2019500672.tif 000061
は（２の補数で）、
【数５４】
2019500672.tif 000062
になる。
【０３７８】
例Ｃ
【数５５】
2019500672.tif 000063
は（２の補数で）、
【数５６】
2019500672.tif 000064
になる。
【０３７９】
例Ｄ
【数５７】
2019500672.tif 000065
は（２の補数で）、
【数５８】
2019500672.tif 000066
になる（ダブルの場合「ｄ」）。
【０３８０】
例Ｅ
【数５９】
2019500672.tif 000067
は（２の補数で）、
【数６０】
2019500672.tif 000068
になる。
【０３８１】
２−ｂ個の数字は、最後の加算のためにフルレーン幅に符号拡張される。次に、最後の加算がレーンにわたる桁上げを防ぐための桁上げ先見項を導出したい。
【０３８２】
４つの可能なｏｖｌｐの数字が与えられると、ｎｏｎ−ｏｖｌｐビットにおいて対象の４つの相補条件：すべて１（ｐ）、すべて０（ｋ）、１（ｇ）、およびｌｓｂ以外すべて１（ｄ）を有し、他の４つの条件の論理ＮＯＲである１つの余分な条件がプラスされ、理解するために「ｕ」と表記される。下記の表に示されたようにこれらを組み合わせて、レーンレベルのｐ、ｇ、およびｋの条件を導出する。
【表７】
2019500672.tif 000069
【０３８３】
次いで、レーンごとのｇビットが、古典的な接頭理論を使用して導出される
Ｇ［０］＝ｇ［０］＜−レーン１への桁上げイン
Ｇ［１：０］＝ｇ［１］｜ｐ［１］＆ｇ［０］
Ｇ［２：０］＝ｇ［２］｜ｐ［２］＆ｇ［１］｜ｐ［２］＆ｐ［１］＆ｇ［０］
など
【０３８４】
例Ａ…Ｅでこれをチェックしてみよう.
【０３８５】
例Ａ：＋ｖｅ＆−ｖｅは、レーンにわたる借りでビットを桁上げする
【数６１】
2019500672.tif 000070
正解は以下の通りであるべきである。
【数６２】
2019500672.tif 000071
表現が異なる元の制限付き冗長値：
【数６３】
2019500672.tif 000072
上述されたように、ｏｖｌｐおよびｎｏｎ−ｏｖｌｐの数字を変換する。
【数６４】
2019500672.tif 000073
ｏｖｌｐ項およびｎｏｎ−ｏｖｌｐ項をビット単位で結合してレーンレベルの先見項を取得する：
【数６５】
2019500672.tif 000074
桁上げ先見ビットを導出する
【数６６】
2019500672.tif 000075
レーン間の桁上げを無視してＳＩＭＤ加算を実行する：
【数６７】
2019500672.tif 000076
正しい！
【０３８６】
例Ｂ：レーン０／１における＋１のｏｖｌｐがレーン２／３における−１のｏｖｌｐと結合する
【数６８】
2019500672.tif 000077
正しい非冗長形式は以下の通りである。
【数６９】
2019500672.tif 000078
表現が異なる元の制限付き冗長値：
【数７０】
2019500672.tif 000079
上述されたように、ｏｖｌｐおよびｎｏｎ−ｏｖｌｐの数字を変換する。
【数７１】
2019500672.tif 000080
ｏｖｌｐ項およびｎｏｎ−ｏｖｌｐ項をビット単位で結合してレーンレベルの先見項を取得する：
【数７２】
2019500672.tif 000081
桁上げ先見ビットを導出する
【数７３】
2019500672.tif 000082
レーン間の桁上げを無視してＳＩＭＤ加算を実行する：
【数７４】
2019500672.tif 000083
正しい！
【０３８７】
例Ｃ：レーン１／２における−１のｏｖｌｐが、レーン２／３における＋１のｏｖｌｐではなく、レーン０／１における＋１のｏｖｌｐと結合する
【数７５】
2019500672.tif 000084
正しい非冗長形式は以下の通りである。
【数７６】
2019500672.tif 000085
表現が異なる元の制限付き冗長値：
【数７７】
2019500672.tif 000086
上述されたように、ｏｖｌｐおよびｎｏｎ−ｏｖｌｐの数字を変換する。
【数７８】
2019500672.tif 000087
ｏｖｌｐ項およびｎｏｎ−ｏｖｌｐ項をビット単位で結合してレーンレベルの先見項を取得する：
【数７９】
2019500672.tif 000088
桁上げ先見ビットを導出する
【数８０】
2019500672.tif 000089
レーン間の桁上げを無視してＳＩＭＤ加算を実行する：
【数８１】
2019500672.tif 000090
正しい！
【０３８８】
例Ｄ：レーン２／３における＋１のｏｖｌｐがレーン１／２およびレーン０／１における−１のｏｖｌｐと結合する
【数８２】
2019500672.tif 000091
正しい非冗長形式は以下の通りである。
【数８３】
2019500672.tif 000092
表現が異なる元の制限付き冗長値：
【数８４】
2019500672.tif 000093
上述されたように、ｏｖｌｐおよびｎｏｎ−ｏｖｌｐの数字を変換する。
【数８５】
2019500672.tif 000094
ｏｖｌｐ項およびｎｏｎ−ｏｖｌｐ項をビット単位で結合してレーンレベルの先見項を取得する：
【数８６】
2019500672.tif 000095
桁上げ先見ビットを導出する
【数８７】
2019500672.tif 000096
レーン間の桁上げを無視してＳＩＭＤ加算を実行する：
【数８８】
2019500672.tif 000097
正しい！
【０３８９】
例Ｅ：すべてのレーンにおける−１のｏｖｌｐ
【数８９】
2019500672.tif 000098
正しい非冗長形式は以下の通りである。
【数９０】
2019500672.tif 000099
表現が異なる元の制限付き冗長値：
【数９１】
2019500672.tif 000100
上述されたように、ｏｖｌｐおよびｎｏｎ−ｏｖｌｐの数字を変換する。
【数９２】
2019500672.tif 000101
ｏｖｌｐ項およびｎｏｎ−ｏｖｌｐ項をビット単位で結合してレーンレベルの先見項を取得する：
【数９３】
2019500672.tif 000102
桁上げ先見ビットを導出する
【数９４】
2019500672.tif 000103
レーン間の桁上げを無視してＳＩＭＤ加算を実行する：
【数９５】
2019500672.tif 000104
正しい！
【０３９０】
方法の要約
１．入力された制限付き冗長数のｏｖｌｐ部およびｎｏｎ−ｏｖｌｐ部用のレーンごとのｐ項、ｇ項、ｋ項、ｄ項、およびｕ項を別々に並行して導出する
ｏｖｌｐ項は、２ｌビット加算器から取得することができ、ｌはレーン数である
ｎｏｎ−ｏｖｌｐ項は、２ｌビット加算器と同様の深度を有する論理木として容易に実装される
２．ページ３の表を使用して、ｐ項、ｇ項、ｋ項、ｄ項（およびｕ項）の２つのセットを、ｐ項、ｇ項、およびｋ項のみに変換する
３．接頭方程式を使用して、ステップ２で取得されたｐビット、ｇビット、ｋビットからレーン桁上げ入力を導出し、
ｏｖｌｐ項、ｐ項、ｇ項、ｋ項、ｄ項、およびｕ項を２ビットから６４ビットに符号拡張する
４．ＳＩＭＤ方式でｎｏｎ−ｏｖｌｐビット、符号拡張されたｏｖｌｐビット、および桁上げビットを加算して最終結果を取得する。これは、レーンごとの桁上げインを有する６４−ｂ加算器を必要とする。
【０３９１】
ページ３の表についての論理式は以下のような可能性がある。
【表８】
2019500672.tif 000105
【図１】
2019500672.tif 000106
【図２】
2019500672.tif 000107
【図３】
2019500672.tif 000108
【図４】
2019500672.tif 000109
【図５】
2019500672.tif 000110
【図６】
2019500672.tif 000111
【図７】
2019500672.tif 000112
【図８】
2019500672.tif 000113
【図９】
2019500672.tif 000114
【図１０】
2019500672.tif 000115
【図１１】
2019500672.tif 000116
【図１２】
2019500672.tif 000117
【図１３】
2019500672.tif 000118
【図１４】
2019500672.tif 000119
【図１５】
2019500672.tif 000120
【図１６】
2019500672.tif 000121
【図１７】
2019500672.tif 000122
【図１８】
2019500672.tif 000123
【図１９】
2019500672.tif 000124
【図２０】
2019500672.tif 000125
【図２１】
2019500672.tif 000126
【図２２】
2019500672.tif 000127
【図２３】
2019500672.tif 000128
【図２４】
2019500672.tif 000129
【図２５】
2019500672.tif 000130
【図２６】
2019500672.tif 000131
【図２７】
2019500672.tif 000132
【図２８】
2019500672.tif 000133
【図２９】
2019500672.tif 000134
【図３０】
2019500672.tif 000135
【図３１】
2019500672.tif 000136
【図３２】
2019500672.tif 000137
【図３３】
2019500672.tif 000138
【図３４】
2019500672.tif 000139
【図３５】
2019500672.tif 000140
【図３６】
2019500672.tif 000141
【図３７】
2019500672.tif 000142
【図３８】
2019500672.tif 000143
【図３９】
2019500672.tif 000144
【国際調査報告】
2019500672.tif 000145
2019500672.tif 000146