(57)【要約】  入力オペランド値を処理するための装置及び方法が提供される。装置は、ベクトル・データ記憶要素のセットを有し、各ベクトル・データ記憶要素は、データ値を格納するための複数のセクションを提供する。複数のレーンが、記憶要素のセット内に設けられると考えられ、各レーンは、各ベクトル・データ記憶要素からの対応セクションを含む。処理回路が、複数の部分を含む入力オペランド値に、複数の部分の各々に独立した算術演算を実行することによって、算術演算を実行して、複数の結果部分を含む結果値を作り出すように構成される。記憶回路が、複数のレーンのうちの選択されたレーン内に結果値を格納するように構成され、その結果、各結果部分が、選択されたレーンの対応セクション内の異なるベクトル・データ記憶要素に格納される。そのような手法は、ベクトル・データ記憶要素のサイズによって制約されない方法で、特に、ベクトル長不依存の方法で入力オペランド値を効率的に処理することを可能にする。
2020507844.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル・データ記憶要素のセットであり、各ベクトル・データ記憶要素が、データ値を格納するための複数のセクションを提供し、複数のレーンが、前記セット内に設けられ、各レーンが、各ベクトル・データ記憶要素からの対応セクションを含む、ベクトル・データ記憶要素のセットと、
複数の結果部分を含む結果値を作り出すために、複数の部分を含む入力オペランド値に、前記複数の部分の各々に独立した算術演算を実行することによって、算術演算を実行するための処理回路と、
前記複数のレーンのうちの選択されたレーン内に前記結果値を格納し、その結果、各結果部分が、前記選択されたレーンの前記対応セクション内の異なるベクトル・データ記憶要素に格納される記憶回路と
を含む装置。
【請求項２】
前記処理回路が、前記独立した算術演算を実行するときに前記入力オペランド値の各部分を整数値として処理するように構成される、請求項１に記載の装置。
【請求項３】
前記処理回路は、前記処理回路が前記独立した算術演算を実行するたびに前記選択されたレーン内に前記結果値の前記結果部分のうちの１つを作り出すために、前記独立した算術演算を順を追って多数回実行するように構成される、請求項１又は２に記載の装置。
【請求項４】
前記処理回路が、前記入力オペランド値を、前記複数の部分を含む別のオペランド値と累積して、前記複数の結果部分を含む前記結果値を作り出すために、累積演算を前記算術演算として実行するように構成される、請求項１から３までのいずれかに記載の装置。
【請求項５】
前記別のオペランド値が既存の結果値であり、前記処理回路が、前記累積演算を実行して、更新された結果値を生成し、それによって、前記選択されたレーンに格納されるべき前記結果値を形成するように構成される、請求項４に記載の装置。
【請求項６】
前記記憶回路が、前記選択されたレーン内の多数のベクトル・データ記憶要素にわたって前記既存の結果値を格納し、前記累積演算を実行したときに前記処理回路によって生成された前記結果値の前記対応結果部分を前記既存の結果値の各部分に上書きするように構成される、請求項５に記載の装置。
【請求項７】
前記処理回路が、アンカー値に基づいて前記入力オペランド値の各部分のビットの有効桁を識別するように構成される、請求項１から６までのいずれかに記載の装置。
【請求項８】
前記選択されたレーンのメタデータを保持するためのメタデータ記憶装置をさらに含み、前記メタデータは、前記入力オペランド値の各部分のメタデータ部分を含み、前記処理回路が前記入力オペランド値の各部分のビットの前記有効桁を識別できるようにする情報を提供する、請求項７に記載の装置。
【請求項９】
前記処理回路が、提供された値及び対応するメタデータ部分から前記入力オペランド値の各部分を生成するための変換回路を含む、請求項８に記載の装置。
【請求項１０】
前記提供された値が浮動小数点値であり、各独立した算術演算に関連して、前記変換回路が、前記浮動小数点値及び前記対応するメタデータ部分から前記入力オペランド値の対応部分を生成するために使用される、請求項９に記載の装置。
【請求項１１】
前記処理回路が、前記結果値の対応結果部分を作り出すために、前記入力オペランド値からの対応部分を前記複数の部分を含む別のオペランド値の対応部分と累積するための独立した累積演算を独立した算術演算として行うように構成され、
前記変換回路が、前記浮動小数点値と前記対応部分に関連する前記メタデータ部分とから前記入力オペランド値の前記対応部分を生成するために、前記独立した累積演算の間、使用される、請求項１０に記載の装置。
【請求項１２】
前記入力オペランド値及び前記別のオペランド値の対応部分が、同じビット有効桁を有する、請求項１１に記載の装置。
【請求項１３】
前記入力オペランド値が、前記複数の部分を使用してＰビット数値を表す冗長表現を有するＭビット値を含み、ここで、各部分はＮビットを含み、Ｍ＞Ｐ＞Ｎであり、
前記処理回路が、アンカー値に基づいて前記冗長表現の各Ｎビット部分のビットの有効桁を識別するように構成され、少なくとも２つの隣接するＮビット部分のグループ内で、前記グループの下位のＮビット部分の複数の重複ビットが、前記グループの少なくとも１つの上位のＮビット部分の複数の最下位ビットと同じ有効桁を有する、請求項１から１２までのいずれかに記載の装置。
【請求項１４】
前記処理回路が、提供された値を前記冗長表現を有する変換済みＭビット・データ値に変換する変換演算を実行するための変換回路を含む、請求項１３に記載の装置。
【請求項１５】
前記選択されたレーンのメタデータを保持するためのメタデータ記憶装置をさらに含み、前記メタデータは、前記入力オペランド値の各Ｎビット部分のメタデータ部分を含み、前記処理回路が各Ｎビット部分のビットの前記有効桁と各Ｎビット部分のいくつかの重複ビットとを識別できるようにする情報を提供する、請求項１３又は１４に記載の装置。
【請求項１６】
前記処理回路が、前記冗長表現を有する第１のＭビット値に重複削減演算を実行して、前記冗長表現を有する第２のＭビット値を生成するように構成され、前記第２のＭビット値の少なくとも１つのＮビット部分の前記重複ビットが、前記第１のＭビット値の少なくとも１つの対応するＮビット部分の前記重複ビットよりも小さい量を表す、請求項１３から１５までのいずれかに記載の装置。
【請求項１７】
前記処理回路が、複数の選択されたレーンの各々に対して複製され、入力オペランド値が、前記複数の選択されたレーンの各々に提供され、前記複数の入力オペランド値の各々が前記複数の部分を含み、各独立した算術演算が、前記複数の選択されたレーンにわたって並列に実行されて、各々が複数の結果部分を含む複数の結果値を作り出すように構成され、
前記記憶回路が、前記複数の選択されたレーンのうちの対応する選択されたレーン内に前記複数の結果値の各々を格納するように構成され、その結果、各結果値の対応結果部分が、同じベクトル・データ記憶要素の対応セクションに格納される、請求項１から１６までのいずれかに記載の装置。
【請求項１８】
選択されたレーンごとにメタデータを保持するためのメタデータ記憶装置をさらに含み、前記メタデータは、前記対応する入力オペランド値の各部分のメタデータ部分を含み、前記処理回路が、前記対応する入力オペランド値の各部分のビットの前記有効桁を識別できるようにする情報を提供する、請求項１７に記載の装置。
【請求項１９】
前記複数の入力オペランド値の対応部分が、同じビット有効桁を有し、前記メタデータが、選択されたレーンごとに複製される、請求項１８に記載の装置。
【請求項２０】
前記処理回路が、削減演算を実行して前記多数の結果値を単一の結果値に結合させるようにさらに構成される、請求項１７から１９までのいずれかに記載の装置。
【請求項２１】
複数の部分を有する入力オペランド値を処理する方法であって、
ベクトル・データ記憶要素のセットを用意することであり、各ベクトル・データ記憶要素が、データ値を格納するための複数のセクションを提供し、複数のレーンが、前記セット内に設けられ、各レーンが、各ベクトル・データ記憶要素からの対応セクションを含む、用意することと、
複数の結果部分を含む結果値を作り出すために、前記複数の部分の各々に独立した算術演算を実行することによって前記入力オペランド値に算術演算を実行することと、
前記複数のレーンのうちの選択されたレーン内に前記結果値を格納することであり、その結果、各結果部分が、前記選択されたレーンの前記対応セクション内の異なるベクトル・データ記憶要素に格納される、格納することと
を含む、方法。
【請求項２２】
命令実行環境を提供するためにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
ベクトル・データ構造のセットであり、各ベクトル・データ構造が、データ値を格納するための複数のセクションを提供し、複数のレーンが、前記セット内に設けられ、各レーンが、各ベクトル・データ構造からの対応セクションを含む、ベクトル・データ構造のセットと、
複数の結果部分を含む結果値を作り出すために、複数の部分を含む入力オペランド値に、前記複数の部分の各々に独立した算術演算を実行することによって、算術演算を実行するための処理プログラム論理と、
前記複数のレーンのうちの選択されたレーン内に結果値を格納し、その結果、各結果部分が、前記選択されたレーンの前記対応セクション内の異なるベクトル・データ構造に格納される記憶プログラム論理と
を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。
【背景技術】
【０００２】
データ処理システムでは浮動小数点（ＦＰ）表現を使用することが一般的である。浮動小数点数は、仮数と、仮数のビットの有効桁を示す指数とを含む。これにより、広い範囲にわたる数値を有限数のビットを使用して表すことができる。しかしながら、浮動小数点演算に関する問題は、計算が一般に非結合的であることであり、和が問題になることである。特に、プログラマは、少数の値を追加する場合さえ、異なる結果を得ることについて心配する必要がある。
【０００３】
結合性の問題に対処しようとして、高精度アンカー固定（ＨＰＡ）数と呼ばれる新しいデータタイプが提案された。高精度アンカー固定（ＨＰＡ）数は、長い２の補数整数ｉ（例えば、２００ビット）と、一般にｉの最小ビットの有効桁を指定することによってｉのビットの重みを表すより小さいアンカー整数ａとからなるペア（ｉ，ａ）である。浮動小数点値は、ＨＰＡ形態に変換することができ、その後、加算は結合的な方法で実行することができる。
【０００４】
ＨＰＡ値はベクトル処理回路で処理することができ、ＨＰＡ数の各長整数は別個のベクトル・レジスタに格納することができる。しかしながら、いかに効率的にＨＰＡ数を処理できるかは、特定のベクトル処理回路によって扱われるベクトル長に依存することになる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願第６２／０７４，１４９号
【特許文献２】米国特許出願第１４／５８２，９７４号
【特許文献３】米国特許出願第１４／５８２，８７５号
【特許文献４】米国特許出願第１４／５８２，８１２号
【特許文献５】米国特許出願第１４／５８２，８３６号
【特許文献６】米国特許出願第１４／５８２，９７８号
【特許文献７】米国特許出願第１４／６０６，５１０号
【特許文献８】米国特許出願第１４／５８２，９６８号
【非特許文献】
【０００６】
【非特許文献１】Ｙ．Ｈｉｄａ、Ｘ．Ｓ．  Ｌｉ、及びＤ．Ｈ．  Ｂａｉｌｅｙ、「Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  Ｑｕａｄ−Ｄｏｕｂｌｅ  Ｐｒｅｃｉｓｉｏｎ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ａｒｉｔｈｍｅｔｉｃ」、Ｐｒｏｃ．  １５ｔｈ  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ、Ｖａｉｌ  ＣＯ、２００１年６月、１５５〜１６２頁
【非特許文献２】「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁
【発明の概要】
【課題を解決するための手段】
【０００７】
第１の実例の構成によれば、ベクトル・データ記憶要素のセットであり、各ベクトル・データ記憶要素が、データ値を格納するための複数のセクションを提供し、複数のレーンが、セット内に設けられ、各レーンが、各ベクトル・データ記憶要素からの対応セクションを含む、ベクトル・データ記憶要素のセットと、複数の結果部分を含む結果値を作り出すために、複数の部分を含む入力オペランド値に、複数の部分の各々に独立した算術演算を実行することによって、算術演算を実行するための処理回路と、前記複数のレーンのうちの選択されたレーン内に結果値を格納し、その結果、各結果部分が、選択されたレーンの対応セクション内の異なるベクトル・データ記憶要素に格納される記憶回路とを含む装置が提供される。
【０００８】
第２の実例の形成によれば、複数の部分を有する入力オペランド値を処理する方法が提供され、この方法は、ベクトル・データ記憶要素のセットを用意することであり、各ベクトル・データ記憶要素が、データ値を格納するための複数のセクションを提供し、複数のレーンが、セット内に設けられ、各レーンが、各ベクトル・データ記憶要素からの対応セクションを含む、用意することと、複数の結果部分を含む結果値を作り出すために、複数の部分の各々に独立した算術演算を実行することによって入力オペランド値に算術演算を実行することと、前記複数のレーンのうちの選択されたレーン内に結果値を格納することであり、その結果、各結果部分が、選択されたレーンの対応セクション内の異なるベクトル・データ記憶要素に格納される、格納することとを含む。
【０００９】
別の実例の構成によれば、ベクトル・データ記憶手段のセットであり、各ベクトル・データ記憶手段が、データ値を格納するための複数のセクションを提供し、複数のレーンが、セット内に設けられ、各レーンが、各ベクトル・データ記憶手段からの対応セクションを含む、ベクトル・データ記憶手段のセットと、複数の結果部分を含む結果値を作り出すために、複数の部分を含む入力オペランド値に、複数の部分の各々に独立した算術演算を実行することによって、算術演算を実行するための処理手段と、前記複数のレーンのうちの選択されたレーン内に結果値を格納し、その結果、各結果部分が、選択されたレーンの対応セクション内の異なるベクトル・データ記憶手段に格納される記憶手段とを含む装置が提供される。
【００１０】
さらなる実例の構成において、命令実行環境を提供するためにホスト・データ処理装置を制御するためのコンピュータ・プログラムが提供され、コンピュータ・プログラムは、ベクトル・データ構造のセットであり、各ベクトル・データ構造が、データ値を格納するための複数のセクションを提供し、複数のレーンが、セット内に設けられ、各レーンが、各ベクトル・データ構造からの対応セクションを含む、ベクトル・データ構造のセットと、複数の結果部分を含む結果値を作り出すために、複数の部分を含む入力オペランド値に、複数の部分の各々に独立した算術演算を実行することによって、算術演算を実行するための処理プログラム論理と、前記複数のレーンのうちの選択されたレーン内に結果値を格納し、その結果、各結果部分が、選択されたレーンの対応セクション内の異なるベクトル・データ構造に格納される記憶プログラム論理とを含む。
【００１１】
本技法が、添付の図面に示されるようなその実例を参照して、単なる例示として、さらに説明される。
【図面の簡単な説明】
【００１２】
【図１】データ処理装置を概略的に示す図である。
【図２】数値の異なる表現を概略的に示す図である。
【図３】倍精度浮動小数点値と高精度アンカー（ＨＰＡ）値との間の関係の一実例を概略的に示す図である。
【図４】重複する有効桁をもついくつかのＮビット部分を含む冗長表現を使用して数値を表す冗長ＨＰＡ値の一実例を示す図である。
【図５】１つの実例において、ＨＰＡ整数が、多数のベクトル・レジスタにわたって、選択されたレーン内にどのように格納され得るかを概略的に示す図である。
【図６】１つの実例の形成による、浮動小数点数がどのようにＨＰＡ形態に変換され処理され得るかを概略的に示すブロック図である。
【図７】１つの実例において使用することができるメタデータの形態を概略的に示す図である。
【図８】１つの実例において、各レーンに関連して設けられ得る変換及び処理回路をより詳細に示す図である。
【図９】多数のＨＰＡ数を累積するために１つの実例に従って実行されるプロセスを示す流れ図である。
【図１０Ａ】図９に示された動作の具体的な実例を提供する図である。
【図１０Ｂ】図９に示された動作の具体的な実例を提供する図である。
【図１０Ｃ】図９に示された動作の具体的な実例を提供する図である。
【図１０Ｄ】図９に示された動作の具体的な実例を提供する図である。
【図１０Ｅ】図９に示された動作の具体的な実例を提供する図である。
【図１０Ｆ】図９に示された動作の具体的な実例を提供する図である。
【図１０Ｇ】図９に示された動作の具体的な実例を提供する図である。
【図１１】冗長ＨＰＡ形態を使用するときに重複を解消するために実行され得るプロセスを示す図である。
【図１２】多数のレーンで作り出されたＨＰＡ結果を単一のＨＰＡ結果に低減するために使用することができるプロセスを示す図である。
【図１３】１つの実例による、ＨＰＡ結果がどのように一連の浮動小数点数に変換されて戻され得るかを示す図である。
【図１４】使用することができるシミュレータ実施態様を示す図である。
【発明を実施するための形態】
【００１３】
前に述べたように、浮動小数点演算に関する問題は、計算が一般に非結合的であることであり、和が問題になることである。例えば、いくつかの浮動小数点値を加算するとき、別の値が前の加算の結果に加算されるたびに、結果は丸められ正規化され、それは、値が加算される順序によって、全体の結果が異なることを意味する。これは、和が正確に同じ順序で計算されない限り再現可能でないので、浮動小数点算術を並列化することを困難にする。再現性のある結果を生成するには、一連の加算又は減算が、一般に、順を追って実行されなければならず、それは、浮動小数点演算を比較的に遅くする可能性がある。
【００１４】
それゆえに、プログラマは、そのような異なる結果を避けることを目指して、必要とするよりも高い精度を使用する。それゆえに、プログラマは、和が正確に同じ順序で計算されない限り再現可能でないので、コードを容易に並列化することができない。
【００１５】
その問題は、プログラムが何百万もの値を加算する必要がある可能性がある高性能コンピューティング（ＨＰＣ）では特に深刻である。プログラマはこれらの問題を並列化することを望むが、再現性の欠如がデバッグを困難にしている。すべての異なるマシン構成は、それらのマシンのための再プログラミングが完全に行われた場合でさえ、異なる答えをもたらすであろう。
【００１６】
上記のように、結合性の問題に対処しようとして、高精度アンカー固定（ＨＰＡ）数と呼ばれる新しいデータタイプが提案された。ＨＰＡ数は、長い２の補数整数ｉ（例えば、２００ビット）と、一般にｉの最小ビットの有効桁を指定することによってｉのビットの重みを表すより小さいアンカー整数ａとからなるペア（ｉ，ａ）である。ペアは、ＦＰ数の仮数及び指数値に多少類似しているが、長整数ｉが正規化されておらず、通常、ＦＰ仮数よりもはるかに大きい点で、及びアンカー値ａが、ＨＰＡ演算のすべてのオペランドに対して固定されている点で異なる。ＦＰ数の加算は、指数を変化させることがあるが、ＨＰＡ数の加算はアンカーを変化させない。
【００１７】
自明な実例として、１０ビットのｉとアンカー値ａ＝−４とからなるＨＰＡ表現を考える。この形式（ｆｏｒｍａｔ）でのいくつかの値が、表１に与えられている。
【００１８】
【表１】
2020507844.tif 000003
【００１９】
これらの数のうちの２つ、例えば、０．５及び１．５を加算する場合、アンカー（−４）は変化せず、和は、ｉ値を単に加算することによって便利に与えられる。ＨＰＡの和は単に２の補数の加算であるので、範囲が十分である場合、ＨＰＡの和は結合的で、正確で、反復可能である。
【００２０】
ＦＰ数は大きい範囲を有する。倍精度数（ＦＰ６４）は、２−１０００よりも小さく、２１０００よりも大きくすることができるが、大部分の累積はこの範囲全体にまたがらない。実際は、その範囲のすべてわたる値を有意義に累積するという種類の問題を想像することは難しく、ＨＰＣの場合でさえ、大部分の累積は限られた範囲にわたって起こる。倍長精度演算よりも広いことを必要とするほとんどすべての用途にとって、２００ビット程度が十分以上であると予想される。プログラマは、特定の和のためのデータのすべてが２１００より小さい大きさを有し、２−５０未満の大きさを有するビットが、有意義には和に影響を与えないはずであると決定すると仮定する。データが、２００ビットのｉを用い、ＨＰＡ形式（ｉ，−５０）を使用して加算される場合、累積は結合的であり、これらの数のうちの少なくとも２４９は、オーバーフローを心配することなく任意の順序で加算することができる。
【００２１】
ほとんどの最新のアーキテクチャは、長整数を表すために使用することができるＳＩＭＤ（単一命令多重データ）ユニットを有する。６４ビット・レーン間の桁上げを容易にするための少しの追加の論理により、２５６ビットＳＩＭＤユニットを使用して２５６ビット整数を加算することができる。代替として、レーン間の桁上げは、後でより詳細に論じる冗長表現を使用することによって、大部分の加算では避けることができる。これらの方法は両方とも単一のＳＩＭＤレジスタ内に長整数を保持する。
【００２２】
しかしながら、ＨＰＡ整数をそのようなＳＩＭＤユニット内で処理することができる効率は、ＳＩＭＤユニットのベクトル幅に依存する。その結果、特定のＳＩＭＤユニットによって処理されるベクトル幅と無関係である、ＨＰＡ数を扱うとき処理を必要とするものなどの長整数値の効率的な処理を可能にし、それゆえに、この技法を多種多様な異なるシステムで取り入れられることを可能にする機構を提供することが望ましい。
【００２３】
１つの実例の形成によれば、ベクトル・データ記憶要素のセットを有する装置が提供され、各ベクトル・データ記憶要素は、データ値を格納するための複数のセクションを提供する。複数のレーンが、ベクトル・データ記憶要素のセットを通って延び、その結果、各レーンが、各ベクトル・データ記憶要素からの対応セクションを含むと考えられる。記憶要素は、様々な形態をとることができるが、１つの実例の形成では、ベクトル・レジスタ・ファイルのベクトル・レジスタがある。
【００２４】
処理回路は、複数の部分を含む入力オペランド値に算術演算を実行するように構成される。算術演算は、複数の部分の各々に独立した算術演算を実行することによって実施され、複数の結果部分を含む結果値を作り出すことになる。
【００２５】
しかしながら、単一のベクトル・データ記憶要素内に結果値を格納するのではなく、代わりに、記憶回路が、複数のレーンのうちの選択されたレーン内に結果値を格納するように構成される。そのような手法によって、各結果部分は、次いで、選択されたレーンの対応セクション内の異なるベクトル記憶要素に格納される。
【００２６】
上述の技法によれば、結果値は、今後、複数のベクトル・データ記憶レジスタにわたって共通レーンに格納されることが分かる。これにより、多くの柔軟性が提供される。特に、結果値のサイズは、個々のベクトル・データ記憶要素の幅によって制約されず、代わりに、最大サイズは、セット内のベクトル・データ記憶要素の数によってのみ制限される。
【００２７】
さらに、そのような手法により、ベクトル・データ記憶要素の非効率的な利用が避けられる。特に、ベクトル・データ記憶要素のサイズと結果値のサイズとの間の不整合によって、ベクトル・データ記憶要素内のスペースを無駄にする必要がない。実際、１つの実例の形成では、多数の入力オペランド値の並列処理をＳＩＭＤ方法で実行することができ、対応する結果値は関連するレーンに格納される。１つの実例の形成では、これは、個々のベクトル・データ記憶要素は、そのそれぞれのセクション内に多数の結果値の対応部分を格納することができ、各結果値は、それぞれのレーン内の多数のベクトル・データ記憶要素を通って延びることを意味する。
【００２８】
その結果、上述の方法で結果値を格納することによって、これは、入力オペランド値及び結果値の選ばれるサイズが装置により処理されるベクトルの幅によって制約されないという点で、著しくスケーラビリティを改善し、ベクトル長不依存の技法を提供することが分かる。
【００２９】
１つの実例では、処理回路は、独立した算術演算を実行するときにオペランド値の各部分を整数値として処理するように構成される。これにより、多数の入力オペランド値は、完全に結合的な方法で任意の順序で確実に処理することができる。
【００３０】
本明細書に記載の技法を使用して、任意の形態の整数値を処理することができる。しかしながら、１つの特定の実例では、入力オペランド値は、ＨＰＡ数の長整数成分である。関連するアンカー値に関する情報を別々に維持することができ、次いで、同じアンカーを有する多数のＨＰＡ数の長整数オペランドを、上述の技法を使用して完全に結合的な方法で非常に効率的に処理することができる。
【００３１】
１つの実例では、処理回路は、処理回路が独立した算術演算を実行するたびに選択されたレーン内に結果値の結果部分のうちの１つを作り出すために、独立した算術演算を順を追って多数回実行するように構成される。独立した算術演算の順序づけは、所望に応じて変えることができる。例えば、１つの実例では、独立した算術演算は、部分の処理が、上位ビットを表すものから始めて低位ビットを表すものに進むように順序づけられてもよいが、代替として、独立した算術演算は、低位ビットに関連する部分が上位ビットに関連する部分の前に処理されるように逆の順序で処理されてもよい。実際、それらの部分によって表されるビットの有効桁によって規定される順序でそれらの部分を処理することも必要でない。
【００３２】
実行される算術演算は様々な形態をとることができる。しかしながら、１つの実例の形成では、処理回路は、複数の結果部分を含む結果値を作り出すために、入力オペランド値を、複数の部分を含む別のオペランド値と累積するための累積演算を算術演算として実行するように構成される。
【００３３】
そのような累積演算は、大量の数を一緒に加算する必要がある高性能コンピュータ環境では頻繁に必要とされており、その結果、上述の機構はそのような数を処理するために非常に効率的な技法を提供することができる。他のオペランド値は様々な形態をとることがあるが、１つの実施例では既存の結果値であり、処理回路は、累積演算を実行して、更新された結果値を生成し、それによって、選択されたレーンに格納されるべき結果値を形成するように構成される。
【００３４】
１つの実例では、記憶回路は、選択されたレーン内の多数のベクトル・データ記憶要素にわたって既存の結果値を格納し、累積演算を実行したときに処理回路によって生成された結果値の対応結果部分を既存の結果値の各部分に上書きするように構成することができる。その結果、多数の入力オペランドの対応部分を一緒に加算して累積結果部分を作り出すために、同じ独立した累積演算を繰り返して何回も実行することができる。次いで、そのプロセスを部分の各々に対して順番に繰り返して、多くの入力オペランド値の累積を表す結果値を作り出すことができる。さらに、前に述べたように、このプロセスを多数のレーンにわたって並列に繰り返すことができ、各レーンは異なる多入力オペランド値を処理し、それにより、多くの入力オペランド値を累積するための非常に高い性能技法が提供される。
【００３５】
１つの実例の形成では、処理回路は、アンカー値に基づいて入力オペランド値の各部分のビットの有効桁を識別するように構成される。そのような形成では、入力オペランド値はＨＰＡ数の長整数部分を表し、長整数は多数の部分に分割される。アンカー値が分かれば、処理回路は、次いで、各部分によって表されたビットの有効桁を決定することができる。この有効桁は、様々な方法で表すことができる。例えば、それは、各部分の最下位ビットの有効桁を識別することができる。
【００３６】
この有効桁情報を維持する方法は、実装に応じて変わることができる。１つの実例では、装置は、選択されたレーンのメタデータを保持するためのメタデータ記憶装置をさらに含み、メタデータは、入力オペランド値の各部分に対するメタデータ部分を含み、処理回路が入力オペランド値の各部分のビットの有効桁を識別できるようにする情報を提供する。
【００３７】
したがって、単に実例として、入力オペランド値が４つの部分を含む場合、選択されたレーンに関して保持されているメタデータは、４つの部分の各々に対してメタデータ部分を識別することになる。各独立した算術演算がそれらの部分のうちの１つに実行されるので、対応するメタデータ部分は、必要に応じてアクセスされ得る。
【００３８】
１つの実例では、処理回路は、提供された値及び対応するメタデータ部分から入力オペランド値の各部分を生成するための変換回路を含む。したがって、そのような実例では、提供された値を入力オペランド値に変換しようとするとき、関連するメタデータ部分が参照される。
【００３９】
１つの特定の実例では、提供された値は、浮動小数点値であり、各独立した算術演算に関連して、変換回路は、浮動小数点値及び対応するメタデータ部分から入力オペランド値の対応部分を生成するために使用される。特に、メタデータ部分は、入力オペランド値の対応部分に関連するビットの有効桁を識別することになるので、変換回路は、浮動小数点値から、もしあれば、浮動小数点値の仮数のどのビットを入力オペランド値の現在の部分内に表す必要があるかを決定し、それらのビットが、メタデータ部分によって提供された有効桁情報を考慮して、入力オペランド値の部分内の適切なビット位置に位置づけられるように準備をする。
【００４０】
１つの実例では、処理回路は、結果値の対応結果部分を作り出すために、入力オペランド値からの対応部分を、複数の部分を含む別のオペランド値の対応部分と累積するための独立した累積演算を独立した算術演算として行うように構成され、変換回路は、浮動小数点値と、対応部分に関連するメタデータ部分とから入力オペランド値の対応部分を生成するために、独立した累積演算の間、使用される。
【００４１】
したがって、そのような形成では、入力オペランド値の対応部分は、独立した累積演算の実行の間に変換回路によって「オンザフライで」生成され、その結果、次いで、別のオペランド値の対応部分に加算されて、結果値の対応結果部分を作り出すことができる。これにより、累積を実行するための非常に効率的な技法が提供される。
【００４２】
１つの実例では、入力オペランド値及び別のオペランド値の対応部分は、同じビット有効桁を有する。
【００４３】
入力オペランド値の多数の部分は、１つの実施例では、離散的で重複しない部分となるように構成することができる。しかしながら、１つの実例では、様々な部分は、いくつかのビットだけ重複するように構成される。特に、そのような実例では、入力オペランド値は、複数の部分を使用してＰビット数値を表す冗長表現を有するＭビット値を含むことができ、ここで、各部分はＮビットを含み、Ｍ＞Ｐ＞Ｎである。処理回路は、アンカー値に基づいて冗長表現の各Ｎビット部分のビットの有効桁を識別するように構成することができ、少なくとも２つの隣接するＮビット部分のグループ内で、グループの下位のＮビット部分の複数の重複ビットは、グループの少なくとも１つの上位のＮビット部分の複数の最下位ビットと同じ有効桁を有する。そのような手法によって、結果値のより重要なビットを表す次の部分へのオーバーフローの可能性を考慮する必要なしに、特定の部分に対して独立した算術演算の多数のインスタンスを実行することが可能である。代わりに、演算は、さらなる演算が重複ビットからのオーバーフローをもたらすことがあると評価される時点に達するまで続くことができる。その時点に、次いで、重複ビットで表されている情報を次の最上位結果部分に移動させるためのステップを行うことができ、その後、その部分の独立した処理を続けることができる。これにより、潜在的なオーバーフローを考慮する必要がある頻度を低減することによって著しく向上した性能が提供される。
【００４４】
１つの実施例では、処理回路は、提供された値を冗長表現を有する変換済みＭビット・データ値に変換する変換演算を実行するための変換回路を含む。１つの特定の実例では、前に論じたように、変換回路は、関連するＮビット部分に関連してオンザフライで変換を実行することができ、その結果、関連するＮビット部分は、提供された値（例えば、浮動小数点値）から作り出され、次いで、関連する独立した算術演算によって処理されて結果部分を作り出す。
【００４５】
前に述べたように、メタデータ記憶装置を使用して、選択されたレーンのメタデータを保持することができる。入力オペランド値が冗長表現を有する上述の実例では、メタデータは、入力オペランド値の各Ｎビット部分に対するメタデータ部分を含み、処理回路が各Ｎビット部分のビットの有効桁と各Ｎビット部分のいくつかの重複ビットとを識別できるようにする情報を提供することができる。所望ならば、例えば、当該の部分が、入力オペランド値の最下位ビット、入力オペランド値の最上位ビットを表しているか、又は中間部分であるかを識別するために、他の情報が、さらに、メタデータ内に含まれてもよい。
【００４６】
前に述べたように、冗長表現を使用すると、オーバーフローの可能性への配慮が必要になる前、独立した算術演算の多数の繰返しを部分に実行することができる。しかしながら、潜在的なオーバーフロー状態が近づいていると決定されると、処理回路は、１つの実例では、冗長表現を有する第１のＭビット値に重複削減演算を実行して、冗長表現を有する第２のＭビット値を生成するように構成することができ、第２のＭビット値の少なくとも１つのＮビット部分の重複ビットは、第１のＭビット値の少なくとも１つの対応するＮビット部分の重複ビットよりも小さい大きさを表す。後続の加算の間のさらなる桁上げを収容するためにより多くの余地があるように重複ビットの所与のセットをゼロまで低減することによって、部分間のオーバーフローの機会が低減される。
【００４７】
重複削減演算は、いくつかの実例では、冗長表現の第１のＭビット値の１つ又は複数のＮビット部分から第１のＭビット値の１つ又は複数の後続の部分に重複ビットを伝搬させて、冗長表現を有する第２のＭビット値を生成するための重複伝搬演算とすることができる。第２のＭビット値は、第１のＭビット値と同じＰビット数値を表すが、異なるパターンの重複ビットを使用する。重複削減を達成するために重複伝搬演算を使用することには、重複削減で削減された重複ビットの値を保存するために追加レジスタが必要とされないという利点がある。重複ビットの値を次の部分に伝搬させることによって、次の部分内の重複していないビットは、前の部分の重複ビットによって表された値と同じ値を保存するように調節されて、さらなる演算が冗長的に表された第２のＭビット値に実行されるとき、より多くの桁上げを収容するために前の部分の重複ビットの空間を解放することができる。
【００４８】
重複伝搬演算は、様々な方法で実行することができる。１つの実例では、重複伝搬演算は、すべての重複ビットがゼロに等しい第２のＭビット値に第１のＭビット値を変換するようなものである。
【００４９】
前に述べたように、上述の技法は、多数のレーン内に複製されて、多数の入力オペランド値の処理のための非常に高い性能の機構を生じさせることができる。特に、１つのそのような実例では、処理回路は、複数の選択されたレーンの各々に対して複製され、入力オペランド値が、前記複数の選択されたレーンの各々に提供され、複数の入力オペランド値の各々は複数の部分を含み、各独立した算術演算が、複数の選択されたレーンにわたって並列に実行されて、各々が複数の結果部分を含む複数の結果値を作り出すように構成される。記憶回路は、複数の選択されたレーンのうちの対応する選択されたレーン内に複数の結果値の各々を格納するように構成され、その結果、各結果値の対応結果部分は、同じベクトル・データ記憶要素の対応セクションに格納される。
【００５０】
使用されるレーンの数は所望に応じて変更することができるが、１つの実例では、すべてのレーンを利用することができ、その結果、多数のベクトル・データ記憶要素内の記憶空間全体をプロセスの間利用することができる。単に実例として、各オペランド値が３つの部分を有する場合、３つのベクトル・データ記憶要素が多数の結果値の結果部分を保持するために指定され、各レジスタがそれらの結果値の対応部分を格納してもよい。ベクトル・データ記憶要素の幅が、例えば、１６個のレーンを設けることができるようなものである場合、これにより、１６個の入力オペランド値に並列に演算を実行することが可能になり、関連する結果値は、関連するレーン内に格納されて、３つのベクトル・データ記憶要素にわたって分配される。
【００５１】
そのような形成では、メタデータ記憶装置は、選択されたレーンごとにメタデータを保持するように構成することができ、メタデータは、対応する入力オペランド値の各部分に対するメタデータ部分を含み、処理回路が、対応する入力オペランド値の各部分のビットの有効桁を識別できるようにする情報を提供する。任意の特定のレーン内で、処理されたオペランド値は、一般に、同じ有効桁を有するように構成されることになる。所望ならば、異なるレーンは、他のレーンによって処理されたオペランド値には、異なる有効桁を有するオペランド値で演算することができる。しかしながら、１つの実例では、複数の選択されたレーンに関連する複数の入力オペランド値の対応部分は、同じビット有効桁を有し、メタデータは選択されたレーンごとに複製される。そのような手法によって、同じ有効桁を有する多数の入力オペランド値は、多数のレーンを使用して並列に処理することができ、同じメタデータがレーンのすべてにわたって使用される。
【００５２】
そのような手法の結果として、レーンにわたって並列に算術演算を実行すると、関連する結果部分を有する多数の結果値が生成されることになることが理解されよう。その場合、それらの結果値の各々の対応結果部分は同じ有効桁を有することになる。
【００５３】
所望のとき、１つの実施例では、処理回路は、次いで削減演算を実行して多数の結果値を単一の結果値に結合させるようにさらに構成することができる。多数の結果値の対応部分は同じ有効桁を有するので、そのような演算は、それらの多数の結果値から単一の結果値を作り出すために容易に実行することができる。所望ならば、次いで、その単一の結果値は、別の形態に変換することができ、例えば、１つ又は複数の浮動小数点値に変換し直すことができる。そのような変換を実行して浮動小数点形式に戻すことによって、アンカー情報を別々に維持する必要がなく、それにより、値をメモリに格納し直すことができる。
【００５４】
次に、図を参照して特定の実例を説明する。
【００５５】
高精度アンカー（ＨＰＡ）形式を以下で論じる。ＨＰＡ形式に関するさらに多くの情報は、米国特許出願第６２／０７４，１４９号、第１４／５８２，９７４号、第１４／５８２，８７５号、第１４／５８２，８１２号、第１４／５８２，８３６号、第１４／５８２，９７８号、第１４／６０６，５１０号、及び第１４／５８２，９６８号に見いだすことができ、それらの内容は、参照によりその全体が本明細書に組み込まれる。
【００５６】
浮動小数点数
浮動小数点（ＦＰ）は、少数のビットを使用して実数を近似する有用な方法である。ＩＥＥＥ  ７５４−２００８  ＦＰ規格は、ＦＰ数のための多数の異なる形式を提案しており、それらのうちのいくつかは、２進数６４（倍精度又はＤＰとしても知られている）、２進数３２（単精度又はＳＰとしても知られている）、及び２進数１６（半精度又はＨＰとしても知られている）である。数字６４、３２、及び１６は、各形式で必要とされるビット数を指す。
【００５７】
表現
ＦＰ数は、科学の授業で教えられる「科学的記数法」に完全に似ており、ここで、マイナス２００万の代わりに、−２．０×１０６と書く。この数の部分は、符号（この場合は負）、仮数（２．０）、指数の底（１０）、及び指数（６）である。これらの部分はすべてＦＰ数では類似形を有しているが、違いがあり、その最も重要なことは、構成部分が２進数で格納され、指数の底が常に２であることである。
【００５８】
より正確には、ＦＰ数は、符号ビット、いくつかの数のバイアスされた指数ビット、及びいくつかの数の小数ビットからなる。特に、ＤＰ、ＳＰ、及びＨＰ形式は、以下のビットからなる。
【００５９】
【表２】
2020507844.tif 000004
【００６０】
符号は、負数では１、正数では０である。０を含むすべての数には符号がある。
【００６１】
指数はバイアスされ、それは、真の指数が、数に格納されているものと異なることを意味する。例えば、バイアスされたＳＰ指数は、８ビット長であり、０から２５５の範囲である。指数０及び２５５は特殊な場合であるが、すべての他の指数はバイアス１２７を有し、それは、真の指数が、バイアスされた指数よりも１２７小さいことを意味する。最小のバイアスされた指数は１であり、これは、真の指数−１２６に対応する。最大のバイアスされた指数は２５４であり、それは真の指数１２７に対応する。ＨＰ及びＤＰの指数は同じように機能し、バイアスは上記の表に示されている。
【００６２】
ＳＰの指数２５５（又はＤＰの指数２０４７、又はＨＰの指数３１）は、ＮａＮ（数ではない）と呼ばれる無限大及び特殊記号のために予約されている。無限大（正又は負であり得る）は、ゼロの小数を有する。指数２５５及び非ゼロ小数をもついかなる数もＮａＮである。無限大は飽和値を提供し、そこで、それは、実際には、「この計算は、この形式で表すことができるものよりも大きい数をもたらした」のようなことを意味する。ＮａＮは、実数に対して数学的に定義されていない演算、例えば、ゼロでの除算、又は負の数の平方根をとることに対して返される。
【００６３】
指数ゼロは、形式のいずれにおいても、非正規数及びゼロのために予約されている。正規数は、値の−１ｓｉｇｎ×１．ｆｒａｃｔｉｏｎ×２ｅを表し、ここで、ｅはバイアスされた指数から計算された真の指数である。１．ｆｒａｃｔｉｏｎという用語は仮数と呼ばれ、１はＦＰ数の一部として格納されないが、代わりに指数から推測される。ゼロ及び最大指数を除くすべての指数は、１．ｆｒａｃｔｉｏｎの形態の仮数を示す。指数ゼロは、０．ｆｒａｃｔｉｏｎという形態の仮数、及び所与の形式の１−ｂｉａｓに等しい真の指数を示す。そのような数は非正規（ｓｕｂｎｏｒｍａｌ）と呼ばれる（歴史的に、これらの数は非正規（ｄｅｎｏｒｍａｌ）と呼ばれていたが、最近の用法では非正規（ｓｕｂｎｏｒｍａｌ）という用語が好まれる）。
【００６４】
指数と小数の両方がゼロに等しい数はゼロである。
【００６５】
以下の表は、ＨＰ形式のいくつかの例示の数を有する。エントリは２進数であり、読みやすくするために「＿」文字が追加されている。非正規エントリ（指数部がゼロである表の４行目）は、前の行の正規エントリと異なる仮数を生成することに注目されたい。
【００６６】
【表３】
2020507844.tif 000005
【００６７】
ＦＰ実装の複雑さの大部分は非正規に起因しており、それゆえに、非正規は、多くの場合、マイクロコード又はソフトウェアによって処理される。一部のプロセッサは、非正規をハードウェアで処理し、ソフトウェア又はマイクロコードの実施と比較して、これらの演算を１０倍から１００倍高速化する。
【００６８】
整数、固定小数点、浮動小数点
ＦＰの符号処理方法は符号絶対値と呼ばれ、それは、整数がコンピュータに格納される通常の方法（２の補数）とは異なる。符号絶対値表現では、同じ数の正と負のバージョンは、符号ビットにおいてのみ異なる。符号ビットと３つの仮数ビットからなる４ビットの符号絶対値整数は、
＋１＝０００１
−１＝１００１
としてプラス１及びマイナス１を表すことになる。
【００６９】
２の補数表現では、ｎビット整数ｉは、２進数ｎ＋１ビット値２ｎ＋ｉの下位ｎビットによって表され、そこで、４ビットの２の補数整数は、プラス１及びマイナス１を、
１＝０００１
−１＝１１１１
として表すことになる。
【００７０】
２の補数形式は、コンピュータ算術を簡易化するので、符号付き整数では事実上普遍的である。
【００７１】
固定小数点数は、全く整数のように見えるが、実際には、特定の数の小数ビットを有する値を表す。センサ・データは、多くの場合、固定小数点形式であり、ＦＰが広く採用される前に書かれた多量の固定小数点ソフトウェアが存在する。固定小数点数は、プログラマが「２進小数点」、すなわち数の整数部と小数部との間の分離記号を把握しなければならず、さらに、正しい場所にビットを保つために数を絶えずシフトしなければならないので、作業するのが全く冗長である。ＦＰ数にはこの難点がなく、そこで、固定小数点数とＦＰ数との間で変換できることが望ましい。変換を行うことができるということは、固定小数点のソフトウェア及びデータを依然として使用できるが、新しいソフトウェアを書くときに固定小数点に限定されないことも意味する。
【００７２】
ＦＰ数の丸め
ほとんどのＦＰ演算は、演算が無限の範囲と精度で行われたかのように計算され、次いで、ＦＰ数に収まるように丸められることをＩＥＥＥ−７５４規格によって要求されている。計算がＦＰ数と正確に一致する場合、その値は常に返されるが、通常、計算は２つの連続する浮動小数点数の間に位置する値をもたらす。丸めは、２つの連続する数のうちのどちらが返されるべきかを選ぶプロセスである。
【００７３】
丸めモードと呼ばれるいくつかの丸めの方法がありこれらのうちの６つは以下の通りである。
【００７４】
【表４】
2020507844.tif 000006
【００７５】
この定義は、実際の方法でどのように丸めるかを教えていない。１つの一般の実施態様は、演算を行い、切捨て値（すなわち、ＦＰ形式に収まる値）並びに残りのすべてのビットを調べ、次いで、特定の条件が当てはまる場合切り捨てられる値を調節することである。これらの計算はすべて以下に基づく。
Ｌ−（最小）切捨て値の最下位ビット
Ｇ−（ガード）次の最上位ビット（すなわち、切捨てに含まれない最初のビット）
Ｓ−（スティッキー）切捨ての部分ではないすべての残りのビットの論理和
【００７６】
これらの３つの値及び切捨て値が与えられると、以下の表に従って、正しく丸められた値を常に計算することができる。
【００７７】
【表５】
2020507844.tif 000007
【００７８】
例えば、２つの４ビット仮数を乗算し、次いで、４ビットの仮数に丸めることを考える。
ｓｉｇ１＝１０１１（１０進数１１）
ｓｉｇ２＝０１１１（１０進数７）
乗算は、
ｓｉｇ１×ｓｉｇ２＝１００１＿１０１（１０進数７７）
Ｌ  Ｇｓｓ
をもたらす。
【００７９】
切り捨てられた４ビットの結果の最下位ビットはＬとラベル付けされ、次のビットはＧとラベル付けされ、Ｓはｓとラベル付けされた残りのビットの論理和（すなわち、Ｓ＝０｜１＝１）である。丸めるために、丸めモード及び上記の表の計算に従って、４ビットの結果（１００１）を調節する。そこで、例えば、ＲＮＡ丸めでは、Ｇが設定され、そこで、１００１＋１＝１０１０を返す。ＲＸ丸めでは、Ｇ｜Ｓは真であり、そこで、Ｌを１に設定し（それは既に１であり、そこで、この場合、何も変わらない）、１００１を返す。
【００８０】
整数及び固定小数点数の丸め
ＦＰ数を整数又は固定小数点に変換する場合、同様に丸める。概念は、基本的に、ＦＰの丸めと同じである。偶然にも整数であるＦＰ数は、常にその整数に丸められる。すべての他のＦＰ数は２つの連続する整数の間にあり、丸めはどの整数が戻されるかを規定する。残念ながら、整数の丸め論理は、２の補数と符号絶対値形態との間の差異のために、若干難しくなる。符号絶対値数をインクリメントすると、常に大きさが増加するので、そこで、インクリメントされた数はゼロからさらに離れる。同じことが正の２の補数にも起こるが、負の２の補数はインクリメントされるとゼロに近くなる。これは、整数が正であるか負であるかに基づいて丸め論理が変更されなければならないことを意味する。それはまた基底値（インクリメントされるか又はされない値）を選ぶ際に注意しなければならないことを意味する。正の整数では、その値は単に切り捨てられたＦＰの仮数であり、そこで、１．３７は、１の基底値と、１又は２のいずれかの結果とを有することになる。負の整数では、この場合もやはり仮数を切り捨て、その結果の１の補数（１の補数は、元の数のすべてのビットを反転したものである）を取り、−１．３７は１に切り捨てられ、次いで反転され、−２の基底値が与えられる。次いで、結果を−２又は（インクリメントされる場合）−１のいずれかにしたいので、すべてが良い結果となる。
【００８１】
さらに複雑なこととして、この変換の方法は、負の整数ではＬ、Ｇ、及びＳを見いだすために若干の計算を必要とする。正確な丸めには、２の補数プロセスを完了し（反転及び１の加算）、次いで、Ｌ、Ｇ、及びＳを計算することが必要とされるが、その１の加算は、単に反転することと比べて遅い。理想的には、元のシフトされた入力から実際のＬ、Ｇ、及びＳを計算したい（すなわち、符号について何かを行う前の入力から。そのため、浮動小数点１．３７又は−１．３７は両方とも整数１へと右にシフトされることになる）。
【００８２】
Ｌ０、Ｇ０、及びＳ０を反転の前の最下位ビット（ｌｓｂ）、ガード、及びスティッキーとし、Ｌｉ、Ｇｉ、及びＳｉを反転の後のガード、及びスティッキーとし、最後に、Ｌ、Ｇ、及びＳを反転及び１の加算の後のｌｓｂ、ガード、及びスティッキーとする。
【００８３】
Ｓ０がゼロである場合、Ｓｉに寄与するビットはすべて１であり、したがって、Ｓ（それらのＳｉビットに１を加算して得られる）もゼロである。Ｓ０が非ゼロである場合、Ｓｉはすべてが１ではなく、したがって、Ｓは非ゼロである。そこで、すべての場合にＳ０＝Ｓである。
【００８４】
Ｇ０がゼロである場合、Ｇｉは１であり、Ｇはまた、Ｓ０がゼロである場合にのみ起こるＳビットからの桁上げイン（ｃａｒｒｙ−ｉｎ）が存在する場合を除いて、１である。Ｇ０が１である場合、Ｇｉはゼロであり、この場合もやはり、Ｇはまた、Ｓ０がゼロである場合にのみ起こるＳビットからの桁上げインが存在する場合を除いて、１である。そこで、Ｇ＝Ｇ０＾Ｓ０である。
【００８５】
非常に似た論理によって、Ｌ＝Ｌ０＾（Ｇ０｜Ｓ０）である。
【００８６】
いまや負の整数と正の整数の両方に対するＬ、Ｇ、及びＳがあるので、丸め規則を考え出すことができる。
【００８７】
【表６】
2020507844.tif 000008
【００８８】
固定小数点数は、整数と全く同じ方法で丸められる。符号なしの変換（整数又は固定小数点への）に関する規則は、正の変換に関する規則と同じである。
【００８９】
注入丸め
丸めを行うためのより速い方法は、ほぼすべてのＦＰ演算の一部である仮数加算の一部として丸め定数を注入することである。これがどのように機能するかを調べるために、ドル及びセントの数を加算し、次いで、ドルに丸めることを考える。加算の場合、
【数１】
2020507844.tif 000009
である。
【００９０】
和３．６２ドルは３ドルよりも４ドルに近く、そこで、最近接丸めモードのいずれも４ドルを返すべきであることが分かる。２進数で数を表した場合、前のセクションからのＬ、Ｇ、Ｓ方法を使用して同じ結果に達することができる。しかし、５０セントだけ加算し、次いで、結果を切り捨てると仮定する。
【００９１】
【数２】
2020507844.tif 000010
【００９２】
和（４．１２ドル）から金額（４ドル）をちょうど返した場合、ＲＮＡ丸めモードを使用して正しく丸めている。０．５０ドルの代わりに０．９９ドルを加算した場合、ＲＰ丸めを使用して正しく丸めることになる。ＲＮＥはわずかに複雑であり、０．５０ドルを加算し、切り捨て、次いで、残りのセントを調べる。残っているセントが非ゼロである場合、切り捨てられた結果は正しい。ゼロセントが残っている場合、注入前に２ドルの金額のちょうど中間にあり、そこで、偶数ドルの金額を選ぶ。２進ＦＰでは、これはドル金額の最下位ビットをゼロに設定することになる。
【００９３】
３つの数の加算は２つの数の加算よりもわずかに遅いだけであり、そこで、２つの仮数を加算し、Ｌ、Ｇ、及びＳを検査し、次いで、丸めモードに従って結果をインクリメントした場合よりも、注入丸めの使用によって、大幅に速く丸め結果を得る。
【００９４】
注入丸めの実装
ＦＰでは、丸め注入は、３つの異なる値のうちの１つであり、これらの値は、丸めモードと、（時には）結果の符号とに依存する。
【００９５】
ＲＮＡとＲＮＥの両方は、Ｇの位置に１を注入することを必要とする（これはドル及びセントの実例では０．５０ドルを加算するようなものである）。
【００９６】
ＲＰ及びＲＭの丸めは、符号並びにモードに依存する。ＲＰは、正の結果を丸める（仮数の大きさを正の無限大に向かって増加させる）が、負の結果を切り捨てる（正の無限大により近い仮数を選ぶ）。同様に、ＲＭは負の結果を切り上げる（仮数の大きさを負の無限大に向かって増加させる）が、正の結果を切り捨てる（負の無限大により近い仮数を選ぶ）。このように、ＲＭ及びＲＰは、２つの場合、すなわち、符号が丸め方向に一致するときに切り上げる（ＲＵ）と、符号が丸め注入と異なるときに切り捨てる（ＲＺ）とに分けられる。ＲＵの場合には、Ｇビットの位置と、Ｓに論理的に寄与するすべての位置とに１を注入する（これは、ドル及びセントの実例では０．９９ドルを加算するようなものである）。
【００９７】
ＲＺモード及びＲＸモードでは、並びにＲＺモードに変わるＲＰモード及びＲＭモードでは、ゼロを注入する。
【００９８】
丸めモードの大部分では、丸め注入を加算し、次いで、切り捨てると、正しく丸められた結果が与えられる。２つの例外は、ＲＮＥ及びＲＸであり、これらは、加算の後Ｇ及びＳを検査することを必要とする。ＲＮＥでは、Ｇ及びＳが両方ともゼロである場合、Ｌを０に設定する。ＲＸでは、Ｇ又はＳが非ゼロである場合、Ｌを１に設定する。
【００９９】
ＦＰ数は実数ではない
ＦＰ数は実数と同様であると考えたくなるが、ＦＰ数は、最も基本的な特性についてでさえ基本的に異なる。
【０１００】
ＦＰ数は結合的ではない。例えば、ＳＰでは、３つの数を加算し、１００万又は０を返すことがあり、おそらく人々が丸め誤差と考えるものではない。
（２４５＋−２４５）＋２２０＝２２０
２４５＋（−２４５＋２２０）＝０
【０１０１】
ＦＰ数は分配法則に従わない。再びＳＰでは、
３，０００，００１＊（４．００００１＋５．００００１）＝０ｘ４ｂｃｄｆｅ８３
（３，０００，００１＊４．００００１）＋（３，０００，００１＊５．００００１）＝０ｘ４ｂｃｄｆｅ８２
であり、オーバーフローがある状態では、事態はより悪化する。
２５０＊（２７８−２７７）＝２１２７
（２５０＊２７８）−（２５０＊２７７）＝無限大
【０１０２】
いくつかの実施態様では、ＦＰ数は、一般に、ｎａｎＡ＋ｎａｎＢ！＝ｎａｎＢ＋ｎａｎＡであるので、デフォルトのＮａＮモード（すべてのＮａＮを単一のＮａＮに変換するモード）でない限り、可換でさえない。数値の加算及び乗算は可換である。
【０１０３】
ＩＥＥＥ  ＮａＮ規則のために、乗法的単位元又は加法的単位元は存在しない。１及びゼロが、数値の単位元として機能する。
【０１０４】
ＦＰ数について考える１つの有用な方法は、ＦＰ数を、せいぜい２、３個（ＤＰでは５３個）の連続したビットが非ゼロであり得る非常に長い固定小数点数であると考えることである。例えば、無限でないＤＰ数は、２０４６桁のいずれかに仮数の最初のビットを有することができその最初のビットに５２個の他の仮数ビットが続き、そして符号ビットがあり、そこで、いかなる有限のＤＰ数も、２０４６＋５２＋１＝２０９９ビットの固定小数点数として表すことができる。この方法で検査すると、２つのＦＰ数の加算は、一般に、別のＦＰ数をもたらさないことが非常に明白になり、加算の結果は、ＦＰ数になるように丸められる必要がある。
【０１０５】
浮動小数点（ＦＰ）演算に関する既知の問題は、計算が非結合的であることであり、和が問題になることである。
・プログラマは、３つの数を加算する場合でさえ、大きく異なる結果について心配する必要がある。
・プログラマは、大きく異なる結果を避けることを希望して、必要以上に広い形式を使用する。
・プログラマは、正確に同じ順序で計算されない限り和が再現可能でないので、コードを簡単に並列化することができない。
例えば、単精度では、
２２０＋（−２４４＋２４４）＝２２０
であるが、
（２２０＋−２４４）＋２４４＝０
である。
【０１０６】
演算が実行される順序によって、結果は１００万又はゼロである。これは、指数が２４だけ異なるので、極端な実例であるが、指数が１だけ異なる場合、又は指数のすべてが同じであり、４つ以上のものを加算する場合でも、異なる答えを得ることがある。Ｃプログラミング言語は、和が左から右へ順番に評価されることを要求することによって再現性問題に対処するが、これは正確性に対しては何の効果もなく、並列化を不可能にする。
【０１０７】
この問題は、プログラムが何百万のものを加算する必要があり得る高性能コンピューティング（ＨＰＣ）にとって特に深刻である。プログラマはこれらの問題を並列化することを望むが、再現性の欠如が、デバッグを通常よりもさらに困難にする。異なる構成のマシンは、それらのマシンの再プログラミングが完璧に行われた場合でさえ、異なる答えを生成することになる。
【０１０８】
ＨＰＡ表現
プログラマの選択可能な範囲で浮動小数点（ＦＰ）数の速くて正確な累積を可能にする新しいデータタイプが開示されている。ほとんどの問題に適合する適度の範囲では、累積は、ＦＰ加算よりも速く、結合的である。結合的な加算は、依然として再現可能で正しい結果を与えながら問題を並列化することを可能にし、例えば、既存のハードウェアと比較して１００倍以上の高速化を可能にする。これらの利点は、高性能コンピューティング（ＨＰＣ）空間では非常に魅力的であり、多くの非ＨＰＣアプリケーションにとって注目せずにはいられないものとなると考えられる。
【０１０９】
図１は、プログラム命令の制御下でデータ処理動作を実行するためのデータ処理装置２を概略的に示す。データ処理装置２は、プログラム命令６及び処理されるべきデータ８を格納するメモリ４を含む。プロセッサ・コア１０は、メモリ４に結合され、レジスタ・バンク１２、処理回路１４、命令フェッチ・ユニット１６、命令パイプライン・ユニット１８、及び命令デコーダ２０を含む。実際には、データ処理システム２は、多くの追加の要素を含むことがあり、図１の表現は理解を助けるために簡略化されていることが理解されよう。動作中、プログラム命令６は、命令フェッチ・ユニット１６によってメモリ４から取り出され、命令パイプライン１８に供給される。プログラム命令が命令パイプライン１８内の適切な段階に達すると、プログラム命令は、命令デコーダ２０によって復号され、復号されたプログラム命令によって指定された処理動作を実行するように、レジスタ・バンク１２及び処理回路１４の動作を制御する働きをする制御信号を生成する。多数の入力オペランドが、レジスタ・バンク１２から読み出され、処理回路１４に供給され、操作され、次いで、結果値がレジスタ・バンク１２に書き戻される。
【０１１０】
レジスタ・バンク１２は、様々な異なる形態を有することができる。操作されるべきオペランドは、例えば、浮動小数点オペランド、固定小数点オペランド、整数オペランド、及びＨＰＡ数オペランド又はＲＨＰＡ数オペランド（後述されるような）を含むことができる。レジスタ・バンク１２は、レジスタ・バンク１２の構成に応じてこれらのタイプのオペランドの混合物を格納するように働くことができる。オペランドは、それらの形式によって事前定義され得るように、又はＨＰＡ数オペランドに関して後述するようなレジスタに関連するメタデータを使用してプログラム可能に指定され得るように、異なる精度レベルを有することができる。
【０１１１】
図１に示すように、レジスタ・バンク１２は、レジスタ・バンク１２の対応するデータレジスタに格納されたＨＰＡ値又はＲＨＰＡ値に関連するメタデータを指定するためのメタデータ・レジスタ２２を含むことができる（メタデータの内容の実例が以下で与えられる）。ある場合には、各データレジスタは、対応するメタデータ・レジスタ２２を有することができ、一方、他の場合には、２つ以上のデータレジスタが、単一のメタデータ・レジスタ２２によって指定されたメタデータを共有することができる。
【０１１２】
図２は、浮動小数点オペランドを概略的に示す。浮動小数点オペランドは、符号、指数、及び仮数から形成される。浮動小数点オペランドは、指数値によって示される多種多様な大きさをもつ値を表すことができる。数が表すことができる精度は、仮数のサイズによって制限される。浮動小数点演算は、一般に、整数演算よりも実施することが複雑で遅い。
【０１１３】
図２は、６４ビット整数オペランドも示す。そのような整数オペランドは、符号なし整数では０から（２６４−１）、又は符号付き整数では−２６３から２６３−１の範囲の数を表すことができる。整数演算は、一般に高速であり、実行するのに比較的少ないエネルギーしか消費しない（浮動小数点演算と比較して）が、浮動小数点値によって表され得る数の範囲と比較して、指定され得る数の値の範囲が比較的限定されるという欠点がある。
【０１１４】
図２は、さらに、この実例では、各々が６４ビット整数を含む多数の成分（この実例では３つ）のベクトルを含むＨＰＡ（高精度アンカー）数を示す。ＨＰＡ数は、それに関連するメタデータを有する。メタデータは、ＨＰＡ数の一部を形成する成分のビットの有効桁を示すアンカー値を含む。アンカー値は、直接的に又は間接的に、ビット有効桁の下方境界及びビット有効桁の上方境界を指定する。以下で使用するメタデータという用語は、ＨＰＡ数のビット有効桁を指定するアンカー値を含むデータに対応すると考えることができる。様々な成分は、一緒に、ビット有効桁のこの範囲を連続してまたがるビット値を指定する。ビット有効桁の下方境界及びビット有効桁の上方境界の位置に応じて、ビット有効桁の範囲は２進小数点位置を含むことがある。２進小数点位置が、特定のＨＰＡ値に対して指定されたビット有効桁の範囲の外にあり得ることも可能である。
【０１１５】
アンカー値は、浮動小数点値（例えば、倍精度ＦＰ値）によって表され得る最小の有効桁から、その浮動小数点値によって表され得る最大のビット有効桁まで延びるビット有効桁の範囲を表すことができるように定められてもよい。
【０１１６】
ＨＰＡ数を形成する成分の数は、様々な実装の間で異なってもよい。成分のサイズは、ある実施例では固定されることがあり、他の実施例では変わることがある。ビット有効桁の範囲の全幅は、実施例によっては、固定成分サイズの単位で変わるように制約されることがある（例えば、６４ビット成分では、ビット有効桁の範囲は、例えば、６４、１２８、１９２、２５６、…の幅を有してもよい）。ビット有効桁の範囲の幅は、１ビット幅のステップで連続的に変わることも可能である。
【０１１７】
アンカー値（メタデータ内の）は、プログラマが、対応するＨＰＡ値の有効桁を設定できるようにプログラム可能とすることができる。アンカー値は、様々な異なる方法でビット有効桁を指定することができる。１つの実例は、各ベクトル成分のビット有効桁の下方境界を指定することである。したがって、各ベクトル成分は、その成分内の最下位ビットの有効桁を表す（アンカーする）メタデータと一緒に、ビット有効桁の全範囲内の値の有効ビットの部分を表す整数値を含むことができる。別のオプションは、アンカー値が、ビット有効桁の範囲の全幅と一緒にＨＰＡ数全体のビット有効桁の下方境界を指定することである。さらなるオプションは、アンカー値が、ビット有効桁の範囲の下方境界及び上方境界を指定するデータを含むことができるというものである。固定幅成分であることが分かっている成分の数と一緒にビット有効桁の範囲の下方境界をアンカー値が含むなどのさらなる変形形態も可能である。
【０１１８】
図３は、倍精度浮動小数点で表現可能な値の範囲と、ＨＰＡ数の有効桁範囲との間の関係を概略的に示す。倍精度浮動小数点数の場合、指定することができるビット値の範囲は、ほぼ２−１０７４から２＋１０２３に及ぶ（非正規数を数えない）。
【０１１９】
図示のように、ＨＰＡ数は、浮動小数点値を使用して表現可能なビット有効桁の範囲内のビット有効桁のウィンドウとして考えることができるプログラム可能なビット有効桁の範囲を有する。このプログラム可能なビット有効桁は、下方境界及び上方境界によって指定することができ、下方境界及び上方境界の値に応じて、浮動小数点値によって与えられるビット有効桁の範囲に沿ってスライドすると考えることができる。ウィンドウの幅、並びにその開始点及び終了点は、ビット有効桁を指定するプログラム可能なメタデータ（アンカー値を含む）の適切な値で指定することができる。したがって、ＨＰＡ数は、実行されるべき計算に適合するようにプログラマによって選択された形態を有することができる。
【０１２０】
ＨＰＡ形式は、２つ以上の値の加算を速く、正確に、及び結合的に実行することを可能にするが、依然として、広範囲の有効桁にわたる値を表すことを可能にする。ＨＰＡ値は単に２の補数なので、それは、整数加算器を使用して加算することができ、浮動小数点演算のように丸め又は正規化を行う必要がなく、それにより、値が加算される順序に関係なく結果は同じであるので一連の加算を並列化することが可能になる。それにもかかわらず、次いで、ＨＰＡ値のプログラム可能な有効桁を指定するメタデータを定義することによって、等価な浮動小数点値の有効桁の全範囲をさらに表すことができるが、非常に広い加算器を用意する必要がなく（例えば、倍精度浮動小数点値によって表現可能な全範囲にわたって２の補数を加算するには、２０９８ビット加算器を必要とする）、その代わり、プログラム可能な有効桁により、より小さい加算器がより広い範囲内のプログラム可能なビット有効桁の特定のウィンドウに集中することが可能になる。実際には、大部分の計算は、倍精度浮動小数点で利用可能な有効桁の全範囲を必要としない。例えば、原子内部での問題は、非常に小さい値を累積することがあり、天体の複雑な状況は、非常に大きい値を累積することがあるが、陽子の幅を銀河間の距離に加算することは、一般に、有用ではない。高性能コンピューティングの場合でさえ、ほとんどの累積は限定された範囲にわたって行われる。
【０１２１】
通常、プログラムを書くプログラマは、（用途に応じて）有用な結果が収まる可能性がある値の予想範囲を知るであろう。プログラマは、特定の和のためのデータのすべてが２６０よりも小さい大きさを有し、２−５０未満の大きさをもつ値がいかなる意味でも和に影響を与えないと決定することができ、そこで、この場合、１２８ビットのデータ幅全体と、最下位ビットの有効桁を−５０と指定するアンカー値とを有するＨＰＡ形式使用してデータを加算することによって、この特定の適用での数値は任意の順序で結合的に加算することができる。
【０１２２】
したがって、結果が計算されている有効範囲を制限するためにアンカー値を使用することによって、比較的小さいハードウェアを使用して、プログラム可能に定義されたウィンドウ内で結果を計算することができる。加算結果が、定義された範囲の上方有効桁境界を超えるオーバーフロー又は下方有効桁境界を下回るアンダーフローをもたらす場合、例外が起こることがあり、これは、プログラマが誤った有効桁境界を定義したこと、及び結果に対して異なる有効桁ウィンドウを定義するために、異なるメタデータ（例えば、異なるアンカー値又はＨＰＡ値の異なる全サイズ）を用いて処理を繰り返すべきであることを知らせることができる。
【０１２３】
２つのＨＰＡ値を加算又は減算するとき、アンカー値は両方のＨＰＡ値に対して同じであり、結果も同じアンカー値を有する、−  これは、２つの値の加算又は減算が、結果の正規化に起因して入力のいずれかに異なる指数をもつ結果をもたらすことがある浮動小数点演算とは異なる。入力が、異なるアンカー・メタデータを与えられた場合、入力は、結果のための必要とされる目標有効桁範囲と入力を整合させるようにシフトされる。入力がＨＰＡ以外の表現（例えば、整数又は浮動小数点）で供給された場合、入力は、同じアンカー値を共有するＨＰＡ値に変換され、加算されて、同じアンカー値を有する結果を形成する。したがって、ＨＰＡレジスタのためのメタデータは、そのレジスタで生成されるべき結果値に対する有効桁の目標範囲を定義するものと見なすことができ、有効桁の目標範囲外のビットは、入力値の実際の有効桁に関係なくハードウェアによって計算されないことになる。
【０１２４】
ＲＨＰＡ表現
ＨＰＡ形式は浮動小数点に比べてはるかに速い加算を可能にするが、ＨＰＡ値のサイズが比較的大きくなると、整数算術を用いた２つのＨＰＡ値の加算は依然として比較的遅いことがある。例えば、ＨＰＡ形式は、複数のレーンにまたがるオペランドの加算を必要とすることがあり、それは、より大きいベクトルの実装では望ましくないことがある。例えば、２つの２５６ビット又は５１２ビット値の加算は、入力される１つのレーンから次のレーンへの桁上げを収容するために、加算の各６４ビットのレーンが順次実行されることがあるので、ある程度時間がかかることがある。
【０１２５】
加算は、図４に示す冗長高精度アンカー（ＲＨＰＡ）形式を使用することによってより速く実行することができる。ＨＰＡ形式におけるように、ＲＨＰＡ数は、処理回路１４が各成分のビットの有効桁を識別することを可能にするアンカー値を定義するメタデータをもつ可変数の成分を含む。再び、アンカー値はプログラム可能とすることができる。ＲＨＰＡでは、メタデータは、ＨＰＡに関して上述した方法のいずれかで各成分の有効桁を識別することができる。しかしながら、ＲＨＰＡ形式では、数値は、ベクトルの隣接するレーンが重複する有効桁のビットを含む冗長表現を使用して表され、それにより、計算されているレーンの数に関係なく一定時間の加算が可能になる。冗長性は、加算、累積、及び乗算などの演算を、より短い加算器で、加算器間で桁上げ情報を伝搬することなく実行することを可能にする。これは、データ値の処理を大幅に高速化する。
【０１２６】
図４のパート（１）に示すように、ＲＨＰＡ表現を使用するＭビット・データ値は、各々がＮビットを含むそれぞれのベクトル・レーン（成分、要素、又は部分とも呼ばれる）に分割され、ここで、Ｎ＜Ｍである。この実例では、Ｎは６４ビットであるが、これは単に１つの実例であり、他のレーン・サイズ（例えば、３２ビット又は１２８ビット）も可能である。各Ｎビット部分は、ある数Ｖの重複ビットと、Ｎ−Ｖの非重複ビットとに分割される。この実例では、重複ビットの数Ｖは、各Ｎビット部分に対して同じであるが、異なる数の重複ビットをもつ異なるＮビット部分を有することも可能である。
【０１２７】
整数又は浮動小数点数がＲＨＰＡ形式に変換されると、非重複ビットの一部は、元の整数又は浮動小数点数からマッピングされた非符号情報が入れられ、一方、重複ビットは符号ビットが入れられる。レーンベースの加算及び減算の目的のために、各レーンは（必要な場合、非重複部分から重複部分に伝搬する桁上げを有する）Ｎビットの符号付きの２の補数のように振る舞うが、マルチレーンの観点から見ると、レーンは、より大きいＰビット数の冗長混合符号表現を形成する。図４の実例では、４つのレーンがあり、そこで、Ｍ＝２５６であるが、レーンの数は、ハードウェア実装及び／又は所与のＲＨＰＡ数に対して定義されたメタデータに応じて変わることができる。
【０１２８】
図４のパート（２）は、パート（１）に示したＲＨＰＡ数の各ビットの相対的な有効桁を示す。最下位レーンの重複ビットＶ［０］は、次のレーンの非重複ビットＮＶ［１］のＶの最下位ビットと同じ有効桁を有する。同様に、重複ビットＶ［１］及びＶ［２］は、それぞれ、非重複ビットＮＶ［２］及びＮＶ［３］のＶの最下位ビットと同じ有効桁を有する。レーン間の有効桁の重複は、ＲＨＰＡ数が、全体として、格納されるビットの総数Ｍよりも小さいＰビット値を表すことを意味する。Ｖが各Ｎビット部分（先頭部分以外の）に対して同じである場合、
【数３】
2020507844.tif 000011
である。より一般的には、異なるレーンが異なる数の重複ビットを有することができる場合、Ｐ＝Ｍ−ΣＶであり、ここで、ΣＶは先頭レーン以外の各レーンの重複ビットの数の合計である。
【０１２９】
Ｐビット値の重複部分ごとに、そのＰビット数の実際のビット値は、下位レーンの重複ビットＶと上位レーン内の非重複ビットＮＶとの和によって表される（下位レーン内の非重複ビットＮＶと重複ビットとを加算することによって引き起こされることがある任意の桁上げを考慮に入れて）。したがって、ＲＨＰＡ値を等価な整数値に変換する１つの方法が、図４のパート（３）に示され、ここで、各レーンの重複ビットは符号拡張され、上位レーンの非重複ビットに加算される（低次から高次に、各レーンの加算後に重複ビットを調整する）。
【０１３０】
ＲＨＰＡ数は、ＲＨＰＡ値のＭビットを使用して所与のＰビット数を表すための２つ以上の方法があるという意味で冗長である。例えば、最下位の２つのレーンの重複を考えると、重複ビットの数Ｖ＝４の一実例では、Ｐビット値の対応ビットが１１１１である場合、これを表す１つの方法は、下位レーンで重複ビットＶ［０］＝０ｂ００００、及び次の高位のレーンで非重複ビットＮＶ［１］＝０ｂ１１１１を有することである。しかしながら、同じ値を表す他の方法は、例えば、Ｖ［０］＝０ｂ０１０１及びＮＶ［１］＝０ｂ１０１０、又はＶ［０］＝０ｂ１１１１及びＮＶ［１］＝０ｂ００００とすることができる。
【０１３１】
最上位レーンの重複ビットＶ［３］は、重複する高次レーンがないので、実際には重複ビットではないことに留意されたい。したがって、高次レーンをすべて非重複ビットを有すると考えることは多くの場合有用であり得る。したがって、場合によっては、先頭レーンは、完全に非重複ビットから形成されると考えることができる（その結果、Ｐビット値の最上位ビットは全体として、先頭レーンのＭビット値の最上位ビットに対応する）。
【０１３２】
しかしながら、他の実施例では、ＲＨＰＡによって表されるＰビット数値の最上位ビットが、先頭レーンの非重複部分（重複部分を除く）の最上位ビットに対応するように、先頭レーンも重複ビットを有するとして扱うことが好ましいことがある。この手法は、各レーンをより対称的な方法で処理できる（他のレーンと比較して先頭レーンを処理する方法への少ない修正で）場合、回路実現をより容易にすることができる。
【０１３３】
図４に示したようにＰビット数値を冗長形式で表現することによって、所与のレーン内の非重複部分の加算からのいかなる桁上げも、次のレーンまで桁上げを伝搬する必要なしに同じレーンの重複部分内に収容することができるので、レーン間の桁上げなしに、いくつかのＲＨＰＡ数を加算することができる。各レーンで実行される加算は、従来のＮビットの２の補数加算を実行することによって加算される２つ以上のＮビット符号付き整数を単に参照し、これは、他のレーンの対応するＮビット加算とは完全に独立している。これは、Ｎビット加算の各々を並列に実行することができることを意味し、その結果、レーンの数に関係なく、Ｎビット加算を実行するのにかかる時間内でＭビット値全体を加算することができる。
【０１３４】
実際には、少なくとも（２Ｖ−１−１）個のそのようなＲＨＰＡ数は、レーン間の桁上げなしに加算することができ、非重複部分の加算からのいかなる桁上げも重複部分に収集される（異なる数の重複ビットを有するレーンがある場合、この式のＶは、重複ビットを有する任意の所与のレーンの重複ビットの最小数になる）。（２Ｖ−１）番目の加算は、レーン間の桁上げを生成する可能性がある最初のものである（その理由は、先頭重複ビットが符号ビットであり、すべてのビットが０であるＲＨＰＡ数から始まるとき、最少の２Ｖ−１個のさらなる加算が実行された後に発生することがある２番目の最上位重複ビットからの正又は負のオーバーフローがあるときにレーン・オーバーフローが発生するからである）。例えば、Ｖ＝１４の場合、これは、単一レーンからオーバーフローするリスクが生じる前に、少なくとも８１９１個のＲＨＰＡ数をアキュムレータに追加する（すなわち、合計８１９２個の値を追加する）ことを可能にする。これは、多くの入力値の加算が一般的である高性能コンピューティング分野にとって特に有用である。実際には、すべての加算がオーバーフロー部分への桁上げを引き起こすのではないので、時には、Ｎビット部分の先頭ビットからのオーバーフローなしに２Ｖ−１個を超える累積が可能である。
【０１３５】
場合によっては、Ｎビット・レーンの先頭ビットからのオーバーフローのリスク（又は実際のオーバーフロー）を引き起こすのに十分な加算が実行された場合、重複ビットが所与のＲＨＰＡ値の重複ビットよりも小さい大きさを表す第２のＲＨＰＡ値に所与のＲＨＰＡ値を変換して、より多くの桁上げを収容するための重複部分のビット空間を効果的に解放するために、重複削減演算を実行することができる。また、ＲＨＰＡ数を整数又は浮動小数点などの別の形式に変換し直すとき、そのような重複削減が、さらに、実行されてもよい。しかしながら、実際には、そのような重複削減演算は多くの場合必要とされず、そこで、Ｎビット加算にかかる時間内に多数の入力のＭビット加算を実行できるようにすることによって、ＲＨＰＡは処理時間を大幅な節約を可能にする。「重複削減」という用語は、すべてのレーン内の重複ビットがより小さい大きさにされなければならないことを意味していないことに留意されたい。少なくとも１つのレーンが重複ビットの大きさを削減することで十分であり、いくつか形態の重複削減は、所与のレーン内の重複ビットの大きさを増加させる可能性がある。
【０１３６】
ＨＰＡ数の効率的な記憶及び操作
以下の説明では、使用されるＨＰＡ形態は、各部分がいくつかの重複ビットを含む上述で論じたＲＨＰＡ形態であると仮定するが、本明細書で説明する技法は、他のＨＰＡ形式、例えば、異なる部分が重複ビットを含まないＨＰＡ形態に同様に適用可能である。今後、ＨＰＡという用語は、ＨＰＡ値が冗長形態であるかどうかに関係なく、操作されているＨＰＡ値を参照するために使用される。
【０１３７】
前に論じた図４から明らかであるように、ＨＰＡ数の異なるＨＰＡ部分は、単一のベクトル・レジスタの異なるレーン内に配置することができる。しかしながら、これは、いくつかの潜在的な問題を引き起こす。例えば、浮動小数点オペランドからＨＰＡ形態を作り出すとき、浮動小数点オペランドの小数は、所望のアンカー値と一緒に、関連するベクトル・レジスタ内のレーンのすべてに伝搬される必要がある。次いで、各レーンは、アンカー値に基づいて異なるレーン・アンカーを有することになる。さらに、それは、ベクトル・レジスタがＨＰＡ数の長整数値よりも著しく大きい状況では、例えば、１０２４ビットレジスタがＨＰＡ数の２００ビットの長整数を保持する状況では、ベクトル・レジスタ・リソースの無駄な使用をもたらすことがある。さらに、ベクトル・レジスタがＨＰＡ数の長整数の部分のすべてを表すには不十分なビット数を有している場合、例えば、ベクトル・レジスタが１２８ビット幅であり、ＨＰＡ数の２００ビットの長整数を表す必要がある場合、処理が問題となることがある。
【０１３８】
以下で論じる実例では、代替の記憶設置が、ＨＰＡ数の様々な部分に対して提供される。特に、ＨＰＡ数の長整数は、図５に概略的に示されるように、多数のベクトル・レジスタにわたって共通レーン内に格納されるように構成される。特に、１組のベクトル・レジスタ１００が設けられ、各ベクトル・レジスタは、データ値を格納するための複数のセクションからなると考えることができる。さらに、複数のレーンがベクトル・レジスタを通って（図５に示された方位において垂直方向に）延びると考えることができ、最初の４つのレーンが、図５において参照番号１０２、１０４、１０６、１０８によって表されている。次いで、ＨＰＡ数の長整数は、ＨＰＡ整数値の異なる部分を異なるベクトル・レジスタに格納することによって、共通レーン内に格納することができる。これが、例示のＨＰＡ整数１１０に対して概略的に示されており、それは、４つの部分からなり、１つの部分が、ベクトル・レジスタＺ０、Ｚ１、Ｚ２、及びＺ３の各々に格納されていると考えられる。さらに、部分のすべては、共通レーン１０２内に格納されている。ＨＰＡ数の整数をこのように格納することによって、これは、いくつかの著しい利益を生み出す。例えば、整数のサイズは、個々のベクトル・レジスタの幅によって制約されない。さらに、多数のＨＰＡ整数を、異なるレーンにおいて、様々なベクトル・レジスタにわたって格納することができ、次いで、それらの整数値をＳＩＭＤ方式で並列に演算することができるので、ベクトル・レジスタの非効率な利用を避けることができる。例えば、図５を考えると、図５に示したベクトル・レジスタの各々が１６個のレーンを備える場合、１６個のＨＰＡ数を、４つのベクトル・レジスタＺ０からＺ３内に格納することができ、各ＨＰＡ数は異なるレーンを占める。したがって、この手法は、スケーラビリティを著しく改善し、ベクトル長不依存の技法を提供することが分かる。したがって、これにより、この技法は、各々が異なるサイズのベクトル・レジスタを使用して演算することができる多種多様の異なるシステムに採用され得る。したがって、ＨＰＡ値のためのそのような記憶技法の使用は、著しい性能利益を生み出すことになる多くの用途があるが、１つの実例は、ＡＲＭ  Ｌｉｍｉｔｅｄによって提案されたスケーラブル・ベクトル拡張（ＳＶＥ）を採用するシステムに関連する。
【０１３９】
ＡＲＭ  Ｌｉｍｉｔｅｄは、科学ＨＰＣ用途を対象とする６４ビットＩＳＡへのスケーラブル・ベクトル拡張（ＳＶＥ）を発表した。ＳＶＥは、現在、ＨＰＡサポートを含んでいないが、進化し続けており、その命令セットへのいくつかのわずかな追加により、非常に高いＨＰＡ性能が可能になる。ＳＶＥの「スケーラブルな」部分は、すべての実装に同じベクトル長を必要としないことを意味し、ＳＶＥベクトルは、６４ビット・レーンの倍数のペアとしてハードウェアに、１２８ビットから２０４８ビットまで実装することができる。小さいチップは１２８ビット・ベクトルしか実装することができないが、スーパーコンピュータは１０２４ビット・ベクトル又は２０４８ビット・ベクトルさえ実装することができる。単一のＳＶＥレジスタ内に２００ビットの整数を保持することは、１２８ビット実装では不可能であり、２０４８ビット実装では無駄であるが、これらのレジスタのうちの４つにわたって分配されたいくつかの２００ビット整数を保持することは、ＳＶＥのスケーラビリティを全面的に利用しており、小さいものから大きいものまで任意のハードウェア実装で十分に機能する。それにより、さらに、プログラマは、必要に応じて自由により短い又はより長い整数を自由に使用することができ、１００ビット整数は、２つのベクトル・レジスタの対応するレーンに入れることができ、５００ビット整数は、１０個のベクトル・レジスタの対応するレーンに入れることができる。
【０１４０】
性能と面積の理由で、ＳＶＥは、６４ビット・レーン内の算術を実行する。発明者等は、大きいｉ  ＨＰＡ数を小さい冗長部分に分けることによってＨＰＡ加算を行うことを提案する。各６４ビット・レーンは、ｉの指定された部分を保持することになり（例えば、ｐ＝５０ビットであるが、これはプログラマブルとすることができる）、残りの６４−ｐビットは、レーン内の桁上げを保つために使用される。これらの残りのビットは、それらが次の最上位レーンのｌｓｂと同じ数的重みを有するので、「重複」ビットと呼ばれる。レーン内の加算は、単に通常の６４ビットの整数加算である。２６４−ｐサイクルごとに（すなわち、ｐ＝５０では１６０００サイクル程度ごとに）、冗長度除去ステップが、レーン・オーバーフローを防止するために必要とされることがあり、非冗長な答えを得るために、すべての計算の終わりに、レーンごとのプロセスが必要とされることになる。
【０１４１】
ＦＰ入力ｆをＨＰＡ数形式（ｉ，ａ）に変換するために、各６４ビット・レーンは、ｆの指数を検査し、それをアンカーａと比較し、次いで、ｆの仮数のいずれかの部分が検討中のｉの部分に追加されるべきかどうかを決定する。この比較は、すべての適用可能なレーンにわたって並列に行うことができる。ｆの仮数は２つの部分（又はｐの値に応じて、ＦＰ６４製品では３つの部分）にまたがることがあるが、各部分は、独立に作り出し操作することができる。
【０１４２】
ａが０になるように選ばれ、ｐが５０になるように選ばれている２つの部分ＨＰＡへのＦＰ３２数の実例の変換が、以下に記載される。この実例では、ＦＰ３２数はベクトル・レジスタ・レーンの「右側」の３２最下位ビットを占めると仮定され、ＨＰＡ数は６４ビットレジスタ・レーン（５０ビット値と１４重複ビットとを含む）を占めると仮定される。ＦＰ数が
ｆ＝＋１．０１１０  １０１１  １０１０  ００１０  １１１１  ０１１  ×  ２６０
である場合、
ＦＰ３２仮数、ｆ［２３：０］＝１  ０１１０  １０１１  １０１０  ００１０  １１１１  ０１１
である。
【０１４３】
ＨＰＡ数の部分１は、調節部分アンカー＝５０を有し、以下のように計算される。
ｉ［１］＝（指数−２３）だけ左シフトされたｆ［２３：０］−部分アンカー＝３７−５０＝−１３桁
（−ｖｅ左シフトは＋ｖｅ右シフトであり、−＞  ｉ［１］＝｛｛１４  ０’ｓ｝，｛３９  ０’ｓ｝，ｆ［２３：１３］＝１  ０１１０  １０１１  １０｝）
（２３だけ指数を調節するのは、浮動小数点値の指数が２３ビットの小数の最上位ビットの左側の暗黙の１０進小数点の有効桁を表し、一方、アンカーは小数の最下位ビットの有効桁を表すことを考慮している）。
【０１４４】
ＨＰＡ数の部分０は調節部分アンカー＝０を有することになり、以下のように計算される。
ｉ［０］＝（指数−２３）だけ左シフトされたｆ［２３：０］−部分アンカー＝３７−０＝３７桁−＞ｉ［１］＝｛｛１４  ０’ｓ｝，ｆ［１２：０］＝１０  ００１０  １１１１  ０１１，｛３７  ０’ｓ｝｝
【０１４５】
これは、以下のようなＨＰＡ形態をもたらす。
【０１４６】
【表７】
2020507844.tif 000012
【０１４７】
一般的に言えば、ＨＰＡ結果を単一のＦＰ結果に正しく丸めるには、桁上げ及び丸め情報のレーンごとの伝搬を必要とする逐次プロセスでなければならない。それは、数サイクルを必要とすることになるが、累積ごとに１回だけ生じる必要がある。代替として、ｐ≦５３である場合、いくつかの６４ビット・レーンを占める非冗長ＨＰＡ数は、ＦＰ６４数のベクトルに並列に変換することができる。次いで、結果として生じるベクトルは、最上位要素が０．５ｕｌｐの精度まで完全ＨＰＡ数を表すように「再正規化」されるべきである。
【０１４８】
ここでＨＰＡ処理の基本を高いレベルで説明したので、次に、ＨＰＡアキュムレータをＳＶＥにどのように実装することができるかを極めて詳しく説明する。
【０１４９】
ＳＶＥは、ｋ×１２８ビットのベクトル・レジスタ長を、現在の最大の２０４８ビット（すなわち１≦ｋ≦１６）までサポートし、「ベクトル長不依存」（ＶＬＡ）処理の概念に基づいており、それによって、異なるＳＶＥベクトル・レジスタ長をもつ異なるＣＰＵがすべて同じＳＶＥプログラムを実行することができる。ＳＶＥプログラムは、システム・レジスタから利用可能なベクトル長を読み取り、利用可能なベクトル・レジスタ長を利用するために「自己調節する」。その結果、ＳＶＥプログラムは、１２８ビット・グラニュール内で実行され、ＣＰＵは、利用可能なベクトル・ハードウェア長がサポートできるのと同じ数のグラニュールを並列に処理する。
【０１５０】
図５を参照して前に述べたように、ベクトル長不依存を達成するために、ＨＰＡ数は、多数のＳＶＥレジスタにわたって配置することができる。各レジスタは、異なるＨＰＡ数の同じ有効桁のビットを保持することができる、すなわち、各レジスタは、ＨＰＡ数の各部分の位置に対して調節された数のアンカーの値を与える有効桁に関連する。
【０１５１】
ｐ＝５０が各部分に保持されている２００ビットＨＰＡ数の前の実例に戻ると、ＨＰＡ数のアンカーが−８０である場合、４つの部分の有効桁情報は、６４ビット部分当たり１４個の重複ビットをもつ（＋７０、＋２０、−３０、−８０）となることになる。ＨＰＡ数の個々の部分が図５の実例の通りに連続したレジスタに格納される必要はないことに留意されたい。
【０１５２】
このようにＨＰＡ数を配置することの主な利点は、ＨＰＡ数（又は長整数）を、長いＨＰＡ数よりも短いことがあるＳＩＭＤ実装（例えば、１２８ビット・ベクトル）にわたってさえ、ＳＩＭＤ方式で扱うことができることである。二次的な利点は、より長いＳＩＭＤ実装（例えば、１０２４ビット・ベクトル）が、各ベクトル内に非常に短いＨＰＡ数を格納することによって無駄にされないことである。十分に多くの整数又はＨＰＡ数がある場合は、ベクトルは、ＳＶＥ実装長に関係なく完全に利用される。
【０１５３】
ＨＰＡ数をいくつかのレジスタにわたって配置することにより、さらに、ＦＰ数のベクトルをそれ自体の６４ビット・レーン内に累積してＨＰＡ算術を高度に並列化することができる。加えて、メモリからの大量のＦＰ数のロードは、簡単で効率的な連続したベクトル・ロードになる。最後に、ＨＰＡ数のこの配置により、いくつかのＨＰＡ整数をすべて下位ビットから上位ビットまで並列で処理することができるので、既存のＳＶＥ命令を使用して重要なＨＰＡ計算（冗長度を除去すること、又はＨＰＡ数を一緒に加算することなど）を実行することができる。この方式はまた、この場合もやはり、多数のＨＰＡ数をすべて上位レーンから下位レーンまで又は下位レーンから高位レーンまで同時に処理できるので、ＨＰＡ数からＦＰへの変換及び再正規化を高速化する。
【０１５４】
図６は、図５で論じた方法で配置されたＨＰＡ数を、次いで、ＳＩＭＤ方法でどのように処理できるかを示す。特定のこの実例では、一連の浮動小数点数がソース・ベクトル・レジスタ１６５にロードされると仮定する。この実例では、各浮動小数点数は倍精度浮動小数点数であり、したがって、各浮動小数点数はソース・レジスタ１６５内の６４ビット・セクションを占めると仮定する。
【０１５５】
複数の６４ビット・レーン１５２、１５４、１５６は、ベクトル・レジスタのセットを通って延びると考えられ、別個の変換及び処理回路１７０、１７２、１７４が各レーンに関連している。回路１７０、１７２、１７４は、宛先レジスタ１８０に格納されるべき対応結果部分を作り出すために、一度ずつＨＰＡ数の単一の部分に演算するように構成される。ＨＰＡ結果数の各結果部分は異なる宛先レジスタを占めることになり、その結果、回路がＨＰＡ数の異なる部分を処理するとき、対応結果部分は異なる宛先レジスタに書き込まれることになることが、前に論じた図５から理解されよう。
【０１５６】
後でより詳細に論じるように、メタデータは、変換及び処理ステップを実行するとき、変換及び処理回路１７０、１７２、１７４による参照のために提供される。特に、この実例では、メタデータは、レーンごとに、さらなるソース・レジスタ１６０内に格納される。レーンのメタデータ内で、メタデータ部分は、そのレーン内で処理されるＨＰＡ数の部分ごとに提供される。メタデータは、対応部分に関連する有効桁（調節されたアンカー）を識別することになり、重複ビットの数などの他の情報を識別することができる。回路１７０、１７２、１７４は、ＨＰＡ数の特定の部分を処理しているとき、ソース・レジスタ１６０内に維持されているレーン・メタデータから関連するメタデータ部分を検索することになる。
【０１５７】
図６に示した実例では、各変換及び処理回路は、入力浮動小数点オペランドと、処理されるべきＨＰＡ数の部分に対するに関連するメタデータ部分とを受け取ることになり、次いで、例えば、表７に示した実例を参照して前に説明した技法を使用して、入力浮動小数点オペランドから関連するＨＰＡ部分を生成することになる。次いで、生成されたＨＰＡ部分は、結果レジスタ１８０に直接格納することができ、又は関連する結果部分を生成するためにいくつかの処理機能を受けることができる。例えば、１つの実施例では累積演算を実行することができ、現在のＨＰＡ結果部分が、宛先レジスタから検索され、次いで、入力浮動小数点オペランドから生成されたＨＰＡ部分と累積されて、更新された結果部分を作り出し、次いで、それは宛先レジスタ１８０の関連セクションに書き戻される。
【０１５８】
そのような手法によって、多数の繰返しの実行を介して、多数の累積演算が、各レーン内で並列に実行されて、累積結果を表す結果部分を生成することができることが分かる。このプロセスを、さらに、ＨＰＡ数の部分の各々に対して繰り返して、一連の結果部分を各レーン内に作り出し、それらは、ひとまとめにして結果ＨＰＡ値を表すことができる。
【０１５９】
１つの実例の形成では、ＨＰＡ処理は、アンカー、レーン重複、及びレーン・タイプ又は広い数の内の位置、すなわち、上部、下部、若しくは中間部に関する情報（「メタデータ」）を必要とする。ＨＰＡ数は、一般に、ＨＰＡアキュムレータが通常せいぜい４つの部分を含むようにＩＥＥＥ  ＦＰ３２と同様のアンカー範囲をもつせいぜい２００ビット幅になると予想される。次いで、４つの６４ビット部分を横切る２００ビット・アキュムレータのためのＨＰＡメタデータは、図７に示すように、４つの１６ビット・フィールドとして組織化することができる。
【０１６０】
特に、ソース・レジスタ１６０を指定することができ、各レーン（例えば、６４ビット）内に、参照番号１６２、１６４、１６６、１６８によって示されるような４つのメタデータ部分が設けられる。次いで、各メタデータ部分は、アキュムレータ結果の関連部分にメタデータを提供することができる。図７の拡大部分によって示されるように、有効桁（調節されたアンカー）情報は、例えば９ビットを使用して第１のサブ部分１９２に含まれ得るが、重複情報は、例えば５ビットを含む第２のサブ部分１９４に捕捉され得る。所望ならば、関連する部分が、上部部分（すなわち、最上位ビットを表す）、下部部分（最下位ビットを表す）、又は中間部分であるかどうかを識別するために、タイプ情報が、さらに、第３のサブ部分１９６に捕捉されてもよい。
【０１６１】
特定のレーン内で、累積されるＨＰＡ値はすべて同じアンカーを有するように構成されることになり、その結果、レーンのメタデータは、レーン内で処理されるＨＰＡ値のすべてに同じように適用することになる。
【０１６２】
原理的に、異なるメタデータが、レーンの各々に指定されてもよく、その結果、１つのレーンで処理される値は、別のレーンで処理される値と同じアンカーを有する必要はない。しかしながら、多くの場合、すべてのレーン内で処理されるすべての値がすべて同じアンカー値を有するように構成されるということであり、この場合には、６４ビットのメタデータは、ベクトル・レジスタ１６０全体にわたって格納及び複製され得る。これにより、レーンの各々に対して作り出された様々なＨＰＡ結果は、次いで、やがて、容易に互いに累積されて、単一のスカラーＨＰＡ結果を作り出すことができる。
【０１６３】
そのような形成では、メタデータを参照する必要があるＨＰＡのためのＳＶＥ命令は、処理されているＨＰＡ部分の特定の１６ビットのメタデータへの２ビット・ポインタと一緒に、メタデータ・レジスタを指定することができる。
【０１６４】
図７はメタデータを提供するための１つの機構を示しているが、より圧縮した方法でメタデータを格納する代替の方式が、例えば、８レーンのメタデータを６４ビットで格納できるように工夫することもできることに留意されたい。特に、「タイプ」フィールドは必要とされないことがあり、ｏｖｌｐ及び有効桁フィールドは、多分、限られた数の利用可能な構成を反映するようにサイズを減少させることができる。
【０１６５】
単一の最も重要なＨＰＡ演算は、ＦＰ数をＨＰＡ形式に変換し累積することである。この演算は、累積されるべきすべてのＦＰ数に実行されなければならないが、他のＨＰＡ演算（ＦＰへの変換戻し、ＨＰＡ冗長度の除去など）は、数千分の１の頻度でしか行われない。その結果、ＦＰ数を変換し累積するために効率的なハードウェア・サポートを提供することが望ましい。
【０１６６】
図８は、ベクトル・ユニットにわたって繰り返されることになるこの演算のための可能な６４ビット・データ経路を示しており、したがって、図８は、図６に示した変換及び処理回路１７０、１７２、１７４の各々のための実例の構成をより詳細に示している。
【０１６７】
入力浮動小数点データ２１０は、符号部分２１２、指数部分２１４、及び小数部分２１６からなる。次いで、レーンに対して保持されているメタデータからの関連するメタデータ部分が、メタデータ部分２００として抽出され、これは、タイプ・フィールド２０２、重複フィールド２０４、及び有効桁フィールド２０６を含む。ＯＲ機能２２０が、指数のビットにＯＲ演算を実行して仮数の最上位ビットを生成し、それは、次いで、小数ビット２１６の先頭に追加されて仮数が形成される。特に指数がゼロでない場合、これは、浮動小数点数が通常の浮動小数点数であり、その結果、仮数の最上位ビットが論理１の値であることを示している。しかしながら、指数のビットのすべてがゼロである場合、これは非正規値を示しており、その結果、仮数の最上位ビットは０に設定されるべきである。
【０１６８】
シフト量を作り出し、次いで、それを使用して、適切な量だけ浮動小数点仮数をシフトさせるようにシフト回路２２４を制御する（必要に応じて右シフト又は左シフトのいずれかを実行する）ために、減算ブロック２２２は、例えば、表７を参照して前に説明した技法を使用して、指数２１４から有効桁２０６を減算するように構成される（指数バイアス及び小数ワード長に対して必要に応じて調節される）。
【０１６９】
次いで、ＡＮＤ回路２２６は、重複情報２０４を受け取り、シフト回路からの出力を特定の数の重複ビット（６４−ｐに等しい）だけマスクする。その後、ＸＯＲ回路２２８は、浮動小数点数が符号値２１２によって示されたとき負であった場合、ＡＮＤ回路２２６からの出力に２の補数関数を実行する。この時点で、所与の有効桁及び重複量をもつ特定のＨＰＡ部分に関係のある入力浮動小数点数のビットは、２の補数として利用可能であり、１つの入力として加算器回路２３０に供給することができる（加算器は、さらに、浮動小数点オペランドが負である場合、１の桁上げイン値をとる）。その結果、関連するＨＰＡ部分が、入力浮動小数点値から「オンザフライで」生成され、次いで、対応結果部分を生成するために適切な処理演算を受けることができることが分かる。
【０１７０】
図示の実例では、処理演算は選択的な累積演算であると仮定する。特に、ＡＮＤ回路２４０を選択的に使用して、レジスタ２３５に保持されている現在値を第２の入力として加算器２３０に伝搬して戻し、それにより、前の結果部分が、変換回路からの入力オペランド部分出力と累積されて、レジスタ２３５に格納される更新された結果部分を作り出すことができる。６４ビット加算器とレジスタを図示の方法で合体させると、連続的なＨＰＡ変換−累積命令のパイプライン化された実行がサポートされる。
【０１７１】
上述の演算を実行するために図８に示した回路をトリガできるいくつかの方法があるが、１つの実施例では、単一の命令を使用して、図８の上述の機能を開始する。そのような命令は、ＦＰからＨＰＡへの変換−加算命令と呼ぶことができる。
【０１７２】
１つの実例におけるＦＰからＨＰＡへの変換−加算命令のためのオペコード（ニーモニック「ＦＣＶＴＨ｛Ａ｝」、ここで、｛Ａ｝はオプションの累積を表す）は、ＦＰソース・レジスタ、メタデータ・レジスタ、宛先アキュムレータ・レジスタ、及びメタデータ・レジスタのサブフィールドを選択するためのインデクスのための識別子を含む。これは、オペコードがせいぜい３つのベクトル・レジスタを参照するというＳＶＥ  ＩＳＡ設計原理に十分適合する。
【０１７３】
他の重要なＨＰＡ演算を実施する既存のＳＶＥ命令の短いシーケンスを構築することができる。
【０１７４】
定期的に、部分オーバーフローを避けるためにＨＰＡ数の冗長度を除去することが重要である。これは、下位ＨＰＡ部分の重複領域内の累積された桁上げビットを次に高いＨＰＡ部分のＬＳＢに単に追加することによって達成することができる。ＳＶＥでは、これは、３つの命令手順で達成することができる。
（ｉ）下部部分をｐ桁だけ右に算術シフトする、
（ｉｉ）シフトされた重複ビットを次に高いＨＰＡ部分に追加する、
（ｉｉｉ）下位ＨＰＡ部分のｐから導き出されたマスクを用いて重複ビットをＡＮＤイミディエートして、重複ビットを強制的にゼロにする。
【０１７５】
この手順は、最下位レーンから上方に作業して、隣接するＨＰＡ部分のすべてのペアに適用することができる。
【０１７６】
大量のＦＰ数が累積された後、その結果は、いくつかのＳＶＥレーンにわたって用意された多数のアキュムレータに格納されることになる。次いで、これらのアキュムレータを一緒に加算して、同じインデクスをもつＨＰＡレーンのベクトルごとにスカラー結果を返すことができる。ＳＶＥでは、これは、スカラーＨＰＡ結果を形成するために、多数のＨＰＡレーンに保持されているアキュムレータにベクトル縮減を実行することによって容易に達成することができる。結果として生じるスカラーＨＰＡ数は、各部分の重複領域に桁上げビットをかなり含むことがあり、したがって、次いで、冗長度除去ルーチンをスカラーＨＰＡ数に実行し、その後、それをＦＰ形態に変換し直すことができる。
【０１７７】
最後に、累積された再現可能なＨＰＡ結果は、浮動小数点形式に変換し直すことができる。ＨＰＡ部分を正規化ＦＰ６４数に正確に変換する（すなわち、ｐ≧５３を仮定して）ためのアルゴリズムは、以下の通りである。
（ｉ）先頭の「１」の位置を捜し出すためにＣＬＺを実行する、
（ｉｉ）有効桁＋（６３−ＣＬＺ）＋ＦＰ６４指数バイアスとして指数を計算する、
（ｉｉｉ）最も高いＨＰＡ部分以外のすべてに対して、ＦＰ６４結果のビット［６３］を０に設定する；ＦＰ６４結果のビット［６２：５２］を、計算された指数に設定する；バイアスされた指数＞０である場合、ＨＰＡ部分をＣＬＺ−１１桁だけ左に論理的にシフトする。他の場合には、ＦＰ６４結果をゼロに設定する。
（ｉｖ）最も高いＨＰＡ部分に対してのみ、その部分が負である場合、ＦＰ６４結果のビット［６３］を１に設定し、正の２の補数を得るためにその部分を符号反転する；ＦＰ６４結果のビット［６２：５２］を、計算された指数に設定する；バイアスされた指数＞０である場合、ＨＰＡ部分をＣＬＺ−１１桁だけ左に論理的にシフトする。他の場合には、ＦＰ６４結果をゼロに設定する。
【０１７８】
この変換アルゴリズムは、一般にＨＰＡレーン当たり１５個のＳＶＥ命令で実装することができる。
【０１７９】
所望ならば、最上位でない部分が負になる可能性がある場合をカバーするように上述のステップ（ｉｉｉ）及び（ｉｖ）を以下のように結合させることができることに留意されたい。
（ｉｉｉ）その部分が負である場合、ＦＰ６４結果のビット［６３］を１に設定し、正の２の補数を得るためにその部分を符号反転する；ＦＰ６４結果のビット［６２：５２］を計算された指数に設定する；バイアスされた指数＞０である場合、ＨＰＡ部分をＣＬＺ−１１桁だけ左に論理的にシフトする。他の場合には、ＦＰ６４結果をゼロに設定する。
【０１８０】
所望の場合、最終の累積値をできるだけ的確に表す単一のＦＰ６４結果を作り出すことができる。これは、例えば、Ｙ．Ｈｉｄａ、Ｘ．Ｓ．  Ｌｉ、及びＤ．Ｈ．  Ｂａｉｌｅｙ、「Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  Ｑｕａｄ−Ｄｏｕｂｌｅ  Ｐｒｅｃｉｓｉｏｎ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ａｒｉｔｈｍｅｔｉｃ」、Ｐｒｏｃ．  １５ｔｈ  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ、Ｖａｉｌ  ＣＯ、２００１年６月、１５５〜１６２頁によって提案されたアルゴリズムを適用することによって達成することができる。
【０１８１】
レーンの下部ペアから上方に作業して、Ｆａｓｔ２Ｓｕｍ演算が次の上位レーンに連続的に適用され、上位和がＦａｓｔ２Ｓｕｍから得られる。次いで、プロセスが繰り返され、ちょうど今得られた一番上のペアの値から下方に作業して、次の下位値に連続的に適用され、下位和がＦａｓｔ２Ｓｕｍから得られる。次いで、結果として生じたＦＰ６４数のベクトルの一番上の要素がＨＰＡ数の０．５ｕｌｐ内にあることが保証され得る。
【０１８２】
ｌ個の部分を含むＨＰＡアキュムレータは、ｌ・ｐビットのワード長を有し、ｌ個のＳＶＥベクトル・レジスタを占める。ｋ×１２８ビットＳＶＥベクトル・ユニットで実行されたＦＣＶＴＨ｛Ａ｝命令は、２ｋ個のＦＰ６４数又は４ｋ個のＦＰ３２数を２ｋ個のＨＰＡアキュムレータの１つの部分に変換し累積することができる。ＦＣＶＴＨ｛Ａ｝命令は、ｎ個のＦＰ６４加数からのブロックが、ｎ・（ｌ／２ｋ）＋１サイクルで、２ｋ個のｐ・ｌビットＨＰＡアキュムレータに累積されるように完全にパイプライン化される。ｌ及びｋの典型的な値は２〜４であり（ｋは１６もの高さにすることができるが）、その結果、ｌ＝ｋの場合、ｎ個のＦＰ６４数（又は２ｎ個のＦＰ３２数）は、ｎ／２サイクルでｋ並列アキュムレータに累積され得る。対照的に、ＡＲＭのＣｏｒｔｅｘ−Ａ７２では、和は順番に生じなければならず、依存融合型乗加算（ＦＭＡ）は加算の間に３サイクルを必要とするので、同じ再現可能な累積は３ｎサイクルを必要とすることになる。したがって、ＨＰＡは、一般に、ＦＰ３２累積では従来のＦＰ処理と比較して１２倍の加速を提供する。
【０１８３】
上記のように、ＨＰＡ冗長度は、定期的に除去又は解消される必要があることになる。上述の方法は、３・（ｌ−１）個の命令を必要とし、２６４−ｐの累積ごとに１回実行される必要があることになる。ｐ＝５０の典型的な値では、これは、＜０．１％の小さい処理オーバーヘッドを表す。同様に、ＨＰＡアキュムレータのベクトルをスカラー形態に変え、スカラーＨＰＡの冗長度を解消し、スカラーＨＰＡをＦＰ６４形式に変換し直すのは、ｌの代表値に対して、一般に、ｎ≒１０３以上の場合のｎ個の数のＨＰＡ累積での≒ｎ／４サイクルと比較して、ｌ＋３・（ｌ−１）＋１５・ｌ≒１９・ｌ−３＝３５〜７３個の命令を必要とすることになる。
【０１８４】
上述の議論から明らかなように、主要な頻繁に使用される演算は、変換及び累積演算である。図９は、１つの実例の形成でのそのような演算の実行を示す流れ図である。ステップ３００において、１つ又は複数の連続したロード演算が、いくつかのベクトル・ソース・レジスタに浮動小数点オペランドを入力するために実行される。これが図１０Ａの上部に概略的に示されており、連続したベクトル・ロード演算を実行することによって、浮動小数点ソース・オペランドが３つのベクトル・レジスタに入力される。この実例では、各ベクトル・レジスタが４つのレーンを備えると仮定されている。
【０１８５】
ステップ３０５において、ＨＰＡ表現のアンカー及びサイズが決定される。前に述べたように、ＨＰＡ表現のアンカー及びサイズはプログラマブルとすることができ、その意図は、多数のオペランドを累積するときに最上位ビットを捕捉できるように適切な範囲を確立することである。その結果、１つの実例の形成では、累積されるべきグループ内の浮動小数点数のすべてを考慮して、どの浮動小数点オペランドが最大かを決定するために、走査動作を実行することができる。次いで、ＨＰＡ表現のための所望の数の部分を決定することができ（この数は、累積されるべき浮動小数点数のすべてを走査することなく選ぶことができる）、最上位部分は、最大の浮動小数点オペランドの最上位ビットを捕捉できるようにするのに十分な有効桁を有するように選ばれる（累積されるべき浮動小数点数のすべてを走査することから決定されるように）。したがって、これは、ステップ３０５におけるアンカーの選択を規定する。
【０１８６】
ステップ３１０において、次いで、メタデータが、ＨＰＡ部分ごとに設定され、ソース・レジスタＺｍのレーンの各々にわたって複製される。
【０１８７】
前に論じたように、各レーンのメタデータは、実際には、いくつかのメタデータ部分を含むことになり、各メタデータ部分は、そのレーン内のＨＰＡ部分のうちの関連するものに対応する。次いで、特定のメタデータ部分は、適切なインデクス値を使用してソース・レジスタＺｍにアクセスされ得る。これが、図１０Ａの下部に概略的に示されている。特に、ソース・レジスタ識別子及びインデクス値に基づいて、各レーン内の特定のメタデータ部分がアクセスされ得る。前に述べたように、特定の実例として、１つの形成では、レーンは６４ビット幅とすることができ、各レーンのメタデータは４つの１６ビット・メタデータ部分を含むことができ、それは、例えば、０と３との間の値をとるインデクス値ｉによって識別することができる。
【０１８８】
ステップ３１５において、２つのパラメータＡ及びＢがゼロに等しく設定され、次いで、ステップ３２０において、ソース・レジスタＡ及びＨＰＡ部分Ｂが選択される。その後、ステップ３２５において、レーンの各々にわたり並列に、ソース・レジスタＡのそのレーンの関連する浮動小数点オペランドが、次いで、部分Ｂのメタデータを使用して、検討中の現在のＨＰＡ部分に変換され、次いで、部分Ｂの宛先レジスタの現在の結果部分と累積されて、更新された結果部分を生成する。
【０１８９】
その後、ステップ３３０において、重複削減状態が検出されたかどうかが決定され、検出されている場合、ステップ３３５において、重複調節プロセスが、例えば前に論じた技法を使用して実行される。
【０１９０】
重複削減状態が存在しない場合、又はそれがある場合には重複調節プロセスの実行に続いて、プロセスはステップ３４０に進み、さらに多くのソース・レジスタがあるかどうかが決定される。図１０Ａに示した実例では、３つのソース・レジスタがあり、その結果、この時点で、プロセスは「はい」経路を辿ることになり、パラメータＡがステップ３４５においてインクリメントされ、プロセスはステップ３２０に戻ることが分かる。
【０１９１】
図１０Ｂから図１０Ｄは、第１のＨＰＡ部分（部分０と呼ばれる）に対するステップ３２０からステップ３４５のプロセスの３つの繰返しを概略的に示す。この実例では、部分０の結果部分は、宛先レジスタＺｄ内に累積される。図１０Ｂから図１０Ｄに示された各結果部分は、形態Ａ［ｑ］［ｒ］で示され、ここで、「ｑ」は部分を示し、「ｒ」はＨＰＡ数を示す。したがって、Ａ［０］［１］は、ＨＰＡ結果１の部分０を示す。
【０１９２】
図１０Ｂから分かるように、第１の命令は累積命令ではなく、その結果、各レーン内で、関連する浮動小数点値が、変換演算を受けて、第１のＨＰＡ部分を生成し、それは、次いで、宛先レジスタＺｄに格納される。
【０１９３】
図１０Ｃに示すように、次の繰返しにおいて、ソース・レジスタはＺｎ＋１に移り、同じメタデータ部分が参照され、累積演算が、各レーンにおいて実行されて、変換された部分を前に格納された結果部分と宛先レジスタにおいて累積する（宛先レジスタは、ここでは、累積レジスタであることを識別するためにＺｄａと呼ばれる）。
【０１９４】
次いで、図１０Ｄは、第３の繰返しの同じプロセスを示し、ここで、ソース・レジスタはＺｎ＋２である。
【０１９５】
その後、ステップ３４０において、ソース・レジスタがもうないことが決定され、プロセスはステップ３５０に進むことになり、処理すべき部分がさらにあるかどうかが決定される。この実例では、それがあると決定され、プロセスはステップ３５５に進むことになり、パラメータＡはゼロに再設定され、次いで、パラメータＢはステップ３６０においてインクリメントされ、その後、プロセスはステップ３２０に戻る
【０１９６】
図１０Ａから図１０Ｇを参照して示した実例では、次いで、ステップ３２０からステップ３４５の３つのさらなる繰返しが、図１０Ｅ及び図１０Ｆによって概略的に示されるように、ＨＰＡ数の次の部分に対して実行されることになる。図示のように、このプロセスの間に累積された結果部分は、別個の宛先レジスタＺｄ（ａ）＋１に格納される。
【０１９７】
ステップ３５０において、処理すべき部分がもうないと決定された後、プロセスはステップ３６５において終了する。これが、各ＨＰＡ値がちょうど２つの部分からなる実例に対して図１０Ｇに概略的に示されている。図１０Ｇから分かるように、上述のプロセスの後、次いで２つの宛先レジスタにわたって格納された４つのＨＰＡアキュムレータ値がある。
【０１９８】
ステップ３３０において重複削減状態が検出されたと決定されたときはいつでも、図１１に概略的に示すように、重複調節プロセスをステップ３３５において実行することができる。
【０１９９】
図１１に示すように、第１のプロセスの間に、Ｚｄａの上位（すなわち、重複）ビットが、Ｚｄａ＋１の下位ビットに加算され、次いで、図示のシフト、加算、及びＡＮＤ命令を使用してゼロに再設定される。したがって、これらの命令は、前に論じたシフト、加算、及びＡＮＤ演算を実行する。その後、このプロセスをさらなる部分に対して繰り返すことができる。したがって、ＨＰＡ数の各々が図１１に示すように３つの部分を有する場合、次いで、後続の一連のシフト、加算、及びＡＮＤ演算を実行して、Ｚｄａ＋１の上位ビットをＺｄａ＋２の下部ビットに加算することができる。
【０２００】
所望の変換及び累積演算が実行された後、一連のＨＰＡ結果値が作り出されていることになり、各々は、図１２に概略的に示すように、一連のレジスタ内の異なるレーンを占める。１つの実例の形成では、これらの様々な結果は、一連の加算演算により、図１２に示すような単一のスカラーＨＰＡ結果に累積され得る。この実例では、重複が最初に解消され、その結果、重複ビットの値を指定する必要性がないと仮定されている。同じレジスタ内のすべてのＨＰＡ部分が同じアンカー情報を有するということも仮定されている。図示のように、一連の既存のＳＶＥ削減命令を実行して、関連する最終結果部分３７０、３７２、及び３７４を作り出すことができ、これらの３つの部分は１つの最終ＨＰＡ数を表す。
【０２０１】
図１３は、そのような最終ＨＰＡ結果の１つ又は複数の浮動小数点値への変換を概略的に示す。図示の実例では、ＨＰＡ数内で利用可能な精度を保持するために、所望ならば、浮動小数点値がＨＰＡ部分の各々に対して生成されてもよい。値をＦＰ形式に変換し直すことによって、メタデータ情報を維持する必要がなく、その結果、浮動小数点値は、例えば、それをメモリに書き戻すことによって、将来の参照のために取っておくことができる。所望ならば、作り出された浮動小数点値は、図１３の下部部分に示すように、単一のレジスタ内に格納されるように並べ替えることができる。図１３に示すように、例えば前に論じたプロセスを使用して、一連の命令を実行し、一度に１つのＨＰＡ部分を演算してその部分を浮動小数点値に変換することができる。
【０２０２】
図１４は、使用することができるシミュレータ実施態様を示す。前に説明した実例は、関係する技法をサポートする特定の処理ハードウェアを操作するための装置及び方法に関して本発明を実施しているが、コンピュータ・プログラムの使用によって実施される、本明細書で説明した実例に従った命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、ハードウェア・アーキテクチャのソフトウェアベース実装を提供する限りにおいて、しばしば、シミュレータと呼ばれる。多種多様なシミュレータ・コンピュータ・プログラムには、エミュレータ、仮想マシン、モデル、及び動的バイナリ・トランスレータを含むバイナリ・トランスレータが含まれる。一般に、シミュレータ実施はホスト・プロセッサ４３０で実行することができ、オプションとして、シミュレータ・プログラム４１０をサポートするホスト・オペレーティング・システム４２０を稼働させることができる。いくつかの形成では、ハードウェア及び提供される命令実行環境及び／又は同じホスト・プロセッサに備えられた多数の別個の命令実行環境の間にシミュレーションの多数のレイヤがあることがある。歴史的に、妥当な速度で実行するシミュレータ実施を実現するために強力なプロセッサが要求されているが、そのような手法は、特定の状況、例えば、互換性又は再使用の理由で別のプロセッサに固有のコードを実行したい場合などでは正当化されてもよい。例えば、シミュレータ実施は、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能を命令実行環境に提供することができ、又は一般に異なるハードウェア・アーキテクチャに関連する命令実行環境を提供することができる。シミュレーションの概要は、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁に与えられている。
【０２０３】
特定のハードウェア構成又は機能を参照して実例が前に説明された限りでは、シミュレートされた実例において、同等の機能が、適切なソフトウェア構成又は機能によって提供され得る。例えば、特定の回路が、シミュレートされた実例では、コンピュータ・プログラム論理として実施されてもよい。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアが、シミュレートされた実例では、ソフトウェア・データ構造として実装されてもよい。前に説明した実例で参照したハードウェア要素のうちの１つ又は複数が、ホスト・ハードウェア（例えば、ホスト・プロセッサ４３０）に存在する形成では、いくつかのシミュレートされた実例は、適切な場合には、ホスト・ハードウェアを利用することができる。
【０２０４】
シミュレータ・プログラム４１０は、コンピュータ可読記憶媒体（非一時的媒体とすることができる）に格納することができ、シミュレータ・プログラム４１０によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インタフェースと同じであるプログラム・インタフェース（命令実行環境）を目的コード４００（アプリケーション、オペレーティング・システム、及びハイパーバイザを含むことができる）に提供する。したがって、それぞれのレーン内のＨＰＡ値の上述の変換及び累積を実行するための命令を含む目的コード４００のプログラム命令は、シミュレータ・プログラム４１０を使用して命令実行環境内から実行することができ、その結果、上述の装置のハードウェア機能を実際には有していないホスト・コンピュータ４３０がこれらの機能をエミュレートすることができる。
【０２０５】
大部分のＦＰ累積は、ＦＰ数の範囲のごく一部しか使用せず、そこで、ＨＰＡ数を使用してより速く正しく計算することができる。ＨＰＡ累積は、再現可能で並列化可能であり、適切なデータ範囲では、非常に的確であり、又は正確でさえある。ＨＰＡの使用は、プログラマにとってＦＰよりも明らかに難しくなく、ＦＰの結合性の欠如が問題を引き起こす場合に、ＨＰＡは、プログラマには非常に簡単である。ＦＰ計算が不十分な結果を与える状況を分析するために訓練された人はほとんどいない。１つの常習的な対応は、より広いＦＰ形式を使用して再コード化することであるが、より広い形式は、ＦＰ６４よりも大きいものでは性能が不十分であり、不必要な電力及びシリコン面積を消費する。ＨＰＡの使用は、より良好な性能を与え、最も有害な丸め問題を取り除く。
【０２０６】
第１の実例の形成では、装置は、処理回路、例えば、１つ又は複数のＣＰＵ、ＧＰＵ、又は他の適切な処理回路を含むことができる。処理回路は、少なくとも１つの長整数オペランドで１つ又は複数の算術演算を実行するように構成することができる。一実例では、少なくとも１つの長整数オペランドは、２の補数整数ｉとすることができる。長整数オペランドは、１２８ビット以上を含むことができる。
【０２０７】
装置は、追加として、複数のベクトル・データ記憶レジスタを含むことができ、例えば、ベクトル記憶レジスタは、データ（ベクトル）の１つ又は複数の１次元アレイを格納するように構成された、処理回路にアクセス可能な静的又は動的メモリの区域とすることができる。一実例では、１つ又は複数のベクトルの各々は、ベクトル処理、例えば、ＳＩＭＤ処理のために使用することができる。一実例では、複数のレジスタの各々は、多数の領域０、…、Ｎに分割することができる。各レジスタの同じ領域は並列に演算することができ、例えば、ベクトル算術命令は、単に、第１のベクトル・レジスタの領域Ｎに格納されている要素が、複数の他のベクトル・レジスタからの領域Ｎに格納されている要素とともに演算に参加することを可能にすることができる。本明細書に記載した実例では、並列に演算することができるレジスタの各々の領域は、レーンとして記載されている、例えば、各レジスタの領域０は単一のレーンを形成する、領域１はさらなるレーンを形成する、などである。一実例では、少なくとも１つの長整数オペランドが、複数のベクトル・データ記憶レジスタにわたる単一のレーンに格納され、このレーンは、本明細書では、共通レーンとして記載されている。共通レーンは、複数のレーンを含むことができる。さらなる実例では、１つ又は複数の長整数オペランドの各々は、複数のベクトル記憶データレジスタにわたる複数のレーン、例えば、レーン０、…、Ｎのうちの１つ又は複数に格納される。一実例では、１つ又は複数の算術演算の各々は、複数の長整数オペランドの各々で同時に実行される。複数のベクトル記憶レジスタにわたる共通レーンのサイズは可変である。
【０２０８】
一実例では、１つ又は複数の算術演算は、長整数オペランドのうちの１つ又は複数に基づいて結果値を生成することができ、少なくとも１つの算術演算では、処理回路は、結果値の目標有効桁を表すプログラマブルな有効桁データに応答する。上述のように、一実例では、高精度アンカー固定数は、一対の数（ｉ，ａ）、すなわち、長整数オペランドとプログラマブルな有効桁データとで構成され、例えば、長整数オペランドは高精度固定小数点オペランドとすることができる。プログラマブルな有効桁データは、長い２の補数整数ｉのビットの重みの値を表すより小さいアンカー整数とすることができる。一実例では、長整数オペランドのうちの１つ又は複数の各々は、同じプログラマブルな有効桁データを有する。
【０２０９】
１つの実例では、処理回路は、低位ビットから上位ビットまでの少なくとも１つの長整数オペランドに１つ又は複数の算術演算を実行するように構成することができる。代替の実例では、処理回路は、高位ビットから低位ビットまでの少なくとも１つの長整数オペランドに１つ又は複数の算術演算を実行するように構成される。
【０２１０】
複数のデータ記憶レジスタは、制御フィールドで指定された順序で配置されてもよい。一実例では、制御フィールドは、命令、例えばアーキテクチャ命令内に含まれてもよい。別の実例では、制御フィールドは、レジスタ内に含まれてもよい。
【０２１１】
一実例では、方法は、前記の処理回路で実行することができ、この方法は、少なくとも１つの長整数オペランドに１つ又は複数の算術演算を実行することを含み、少なくとも１つの長整数オペランドは、複数のベクトル・データ記憶レジスタにわたって共通レーンに格納される。この方法は、複数の長整数オペランドに１つ又は複数の算術演算を実行することをさらに含むことができ、複数の長整数オペランドの各々は、複数のベクトル記憶データレジスタにわたって複数の共通レーンに格納される。この方法はまた、複数の長整数オペランドに基づいて結果値を生成することをさらに含むことができ、少なくとも１つの算術演算に対して、処理回路は、結果値の目標有効桁を表すプログラマブルな有効桁データに応答し、複数の長整数オペランドの各々は、同じプログラマブルな有効桁データを有する。
【０２１２】
一実例では、この方法は、高精度固定小数点オペランドである長整数オペランドに実行することができる。
【０２１３】
本出願において、「ように構成される（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ…）」という語は、装置の要素が定義済み動作を実行できる構成を有することを意味するように使用される。この状況において、「構成」は、ハードウェア又はソフトウェアの相互接続の設置又は方法を意味する。例えば、装置は、定義済み動作を行う専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスが機能を実行するようにプログラムされてもよい。「ように構成される」は、定義済み動作を行うために何らかの方法で装置要素が変更される必要があることを意味しない。
【０２１４】
本発明の例示の実施例を、本明細書において添付の図面を参照して詳細に説明したが、本発明はそれらの厳密な実施例に限定されないこと、及び様々な変更、追加、及び変形が、本発明に関して、添付の特許請求範囲によって定義されるような本発明の範囲及び趣旨から逸脱することなく、当業者によって達成され得ることを理解されたい。例えば、従属請求項の特徴の様々な組合せが、本発明の範囲から逸脱することなく、独立請求項の特徴とともに行われてもよい。
【図１】
2020507844.tif 000013
【図２】
2020507844.tif 000014
【図３】
2020507844.tif 000015
【図４】
2020507844.tif 000016
【図５】
2020507844.tif 000017
【図６】
2020507844.tif 000018
【図７】
2020507844.tif 000019
【図８】
2020507844.tif 000020
【図９】
2020507844.tif 000021
【図１０Ａ】
2020507844.tif 000022
【図１０Ｂ】
2020507844.tif 000023
【図１０Ｃ】
2020507844.tif 000024
【図１０Ｄ】
2020507844.tif 000025
【図１０Ｅ】
2020507844.tif 000026
【図１０Ｆ】
2020507844.tif 000027
【図１０Ｇ】
2020507844.tif 000028
【図１１】
2020507844.tif 000029
【図１２】
2020507844.tif 000030
【図１３】
2020507844.tif 000031
【図１４】
2020507844.tif 000032
【国際調査報告】
2020507844.tif 000033
2020507844.tif 000034
2020507844.tif 000035