JP2022519258A - アンカーデータ要素における特殊値の符号化 - Google Patents

アンカーデータ要素における特殊値の符号化 Download PDF

Info

Publication number
JP2022519258A
JP2022519258A JP2021544755A JP2021544755A JP2022519258A JP 2022519258 A JP2022519258 A JP 2022519258A JP 2021544755 A JP2021544755 A JP 2021544755A JP 2021544755 A JP2021544755 A JP 2021544755A JP 2022519258 A JP2022519258 A JP 2022519258A
Authority
JP
Japan
Prior art keywords
anchor data
data element
value
anchor
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021544755A
Other languages
English (en)
Inventor
バーゲス、ネイル
ニール ヒンズ、クリストファー
レイモンド ルッツ、デビット
Original Assignee
アーム・リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アーム・リミテッド filed Critical アーム・リミテッド
Publication of JP2022519258A publication Critical patent/JP2022519258A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/14Conversion to or from non-weighted codes
    • H03M7/24Conversion to or from floating-point codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Nonlinear Science (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)

Abstract

Figure 2022519258000001
【解決手段】 装置は、データ処理を実行するための処理回路と、アンカーデータ処理動作を実行してアンカーデータ要素を生成するように処理回路を制御する命令デコーダとを含む。アンカーデータ要素は、アンカーデータ要素が、アンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応する2の補数のビットの一部分を表すか、又は2の補数のビットの当該一部分以外の特殊値を表すか、を示す型情報を含む符号化を有する。
【選択図】図9

Description

本技術は、データ処理分野に関するものである。
データ処理システムでは、浮動小数点(FP)表現を使用するのが一般的である。浮動小数点数は、仮数と、その仮数のビットの有意性を示す指数とを含む。これにより、有限数のビットを用いて広い範囲の数値を表現することができる。しかし、浮動小数点演算の問題点は、一般的に計算が非結合的であるため、和が問題となる点である。特にプログラマは、少数の値を加算するときでさえ、異なる結果を得ることを気にしなければならない。
この結合性の問題を解決するために、高精度アンカー(HPA)数と呼ばれる新しいデータ型が提案されている。高精度アンカー(HPA)数は、通常iの最小ビットの有意性を指定することにより、長い2の補数(例えば200ビット)の整数iと、iのビットの重みを表す小さいアンカー整数aと、を含むペア(i,a)で構成され得る。浮動小数点値をHPA形式に変換し、その後、結合的に加算を実行することができる。
少なくともいくつかの例は、装置であって、データ処理を実行するための処理回路と、アンカーデータ処理動作を実行してアンカーデータ要素を生成するように処理回路を制御する命令デコーダと、を備え、アンカーデータ要素は、アンカーデータ要素が、アンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応する2の補数のビットの一部分を表すか、又は2の補数のビットの当該一部分以外の特殊値を表すか、を示す型情報を含む符号化を有する、装置、を提供する。
少なくともいくつかの例は、命令を実行するための命令実行環境を提供するようにホストデータ処理装置を制御するためのコンピュータプログラムであって、コンピュータプログラムは、データ処理を実行するようにホストデータ処理装置を制御する、ターゲットコードのプログラム命令をデコードするための命令デコードプログラムロジックを含み、当該命令デコードプログラムロジックは、アンカーデータ要素を生成するためにアンカーデータ処理動作を実行するようにホストデータ処理装置を制御するアンカーデータ処理プログラムロジックを含み、アンカーデータ要素は、アンカーデータ要素が、アンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応する2の補数のビットの一部分を表すか、又は2の補数のビットの当該一部分以外の特殊値を表すかを示す型情報を含む符号化を有する、コンピュータプログラムを提供する。
コンピュータプログラムは、記憶媒体に格納されてもよい。記憶媒体は、非一時的な記憶媒体であってもよい。
少なくともいくつかの例は、データ処理方法であって、1つ以上の命令をデコードすることと、デコードされた命令に応答して、アンカーデータ要素を生成するためのアンカーデータ処理動作を実行するように処理回路を制御することと、を含み、アンカーデータ要素は、アンカーデータ要素が、アンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応する2の補数のビットの当該一部分を表すか、又は2の補数のビットの当該一部分以外の特殊値を表すか、を示す型情報を含む符号化を有する、データ処理方法を提供する。
本技術の更なる態様、特徴、及び利点は、添付の図面と併せて読まれるべき以下の実施例の説明から明らかとなるであろう。
図1は、データ処理装置を模式的に示す図である。 図2は、数値の異なる表現を模式的に示す図である。 図3は、倍精度浮動小数点値と高精度アンカー(HPA)値との関係の一例を模式的に示す図である。 図4は、有意性が重複する複数のNビット部分を含む冗長な表現を用いて数値を表す冗長HPA値の一例を示す図である。 図5は、一例において、HPA整数がどのように複数のベクトルレジスタをまたがる選択されたレーン内に格納され得るかを模式的に示す図である。 図6は、1つの例示的な構成による、どのように浮動小数点数をHPA形式に変換して処理し得るかを模式的に示したブロック図である。 図7は、一例において使用され得るメタデータの形態を模式的に示す図である。 図8は、一例における、各レーンに関連して提供され得る変換及び処理回路をより詳細に示す図である。 図9は、アンカーデータ要素が2の補数のビットの一部分を表すのか、又は、特殊値を表すのか、を示す型情報を含むアンカーデータ要素の符号化を示す図である。 図10は、型情報の符号化を示す図である。 図11は、第1オペランド及び第2オペランドの型情報に基づいて、結果アンカーデータ要素の型情報を設定する際の異なる結果を示す図である。 図12は、型情報を含む2つのアンカーデータ要素の加算を実装するための回路ロジックの一例を示す図である。 図13は、重複伝搬命令の一例を示す図である。 図14は、重複クリア命令の一例を示す図である。 図15は、使用され得るシミュレータの例を示す図である。
発明を実施するための実施例
前述したように、浮動小数点演算の問題点は、一般的に計算が結合的であることであり、これが和算の問題点となっている。例えば、複数の浮動小数点値を加算する場合、前の加算の結果に別の値を加算するたびに、結果は丸められ、正規化され、これは値を加算する順序によって全体の結果が異なることを意味する。このため、全く同じ順序で加算しないと和の再現性がないため、浮動小数点演算の並列化が困難である。再現性のある結果を得るためには、通常、一連の加算又は減算を連続して実行しなければならず、これにより浮動小数点演算は、相対的に遅くなる。
そのため、プログラマは、このような異なる結果を回避するために、必要以上に高い精度を使用する。そのため、同じ順序で計算しないと和は再現性がないため、プログラマは簡単にコードを並列化することができない。
この問題は、プログラムが数百万の値を加算する必要があり得るハイパフォーマンスコンピューティング(HPC)では特に顕著である。プログラマはこれらの問題を並列化したいが、そうすると再現性がないためにデバッグが難しくなる。マシンの構成が違う場合ですら、たとえそのマシン用の再プログラミングが完璧に行われたとしても、異なる答えが出てしまう。
前述のとおり、結合性の問題を解決するために、HPA(高精度アンカー)数と呼ばれる新しいデータ型が提案されている。HPA数は、長い2の補数の整数i(例えば、200ビット)と、通常、iの最小ビットの有意性を指定することによってiのビットの重みを表すより小さいアンカー整数aとからなるペア(i,a)を含むことができる。このペアは、FP数の仮数と指数の値に多少類似しているが、長い整数iが正規化されておらず、通常はFP仮数よりもはるかに大きいという点と、アンカー値aがHPA動作のすべてのオペランドに対して固定されているという点で異なる。FP数を追加すると指数が変化させることはあるが、HPA数を追加してもアンカーは変化しない。
自明な例として、10ビットのiとアンカー値a=-4で構成されるHPA表現を考えてみる。このフォーマットのいくつかの値を表1に示す。
Figure 2022519258000002
0.5と1.5とのように2つの数を足しても、アンカー(-4)は変わらないので、iの値だけを足すことで簡便に和が得られる。HPAの和は、ちょうど2の補数の足し算なので、範囲が十分であれば、HPAの和は結合的、正確、及び、反復可能である。
FP数は範囲が広い。倍精度数(FP64)は2-1000より小さく、21000より大きくなり得るが、ほとんどの集積はこの全範囲には及ばない。実際のところ、この範囲のすべての値を有意性のある形で加算するような問題を想像するのは難しく、HPCでさえほとんどの集積は限られた範囲で行われる。倍精度演算よりも広い範囲の演算を必要とするほとんどのアプリケーションには、200ビット程度で十分足りると考えられる。プログラマが、ある和のデータはすべて2100より小さい大きさであり、2-50以下の大きさのビットは、和に有意性のある影響を与えないと判断するとする。HPAフォーマット(i,-50)で200ビットのiを使ってデータを加算すると、集積は結合的に行われ、少なくとも249個の数をどのような順序でもオーバーフローの心配なく加算することができる。
近年のほとんどのアーキテクチャにはSIMD(Single Instruction Multiple Data:単一命令複数データ)ユニットが搭載されており、これを使って長整数を表すことができる。64ビットレーン間のキャリーを容易にするためのロジックを少し追加すれば、256ビットSIMDユニットを使って256ビットの整数を加算することができる。あるいは、詳細は後述するが、冗長な表現を用いることで、ほとんどの加算においてレーン間のキャリーを回避することができる。SIMDレジスタでHPA(アンカーデータ)値(又は長整数)を表すための1つのアプローチは、HPA値のいくつかのHPA(アンカーデータ)要素を、単一のSIMDレジスタ内のそれぞれのベクトルレーンに割り当てることである。あるいは、後述するように、HPA値のそれぞれのアンカーデータ要素は、複数の異なるSIMDレジスタ内の対応するベクトルレーンに割り当てられ、全アンカーデータ値のそれぞれの部分は、異なるベクトルレジスタの対応する位置にあり、単一のベクトルレジスタには、複数のアンカーデータ要素が含まれており、それぞれが異なるアンカーデータ値(HPA値)の一部を構成することも可能である。
以下に説明する技術において、装置は、データ処理を実行するための処理回路と、アンカーデータ処理動作を実行してアンカーデータ要素を生成するように処理回路を制御する命令デコーダとを有してもよく、アンカーデータ要素は、型情報を含む符号化を有する。型情報は、アンカーデータ要素が2の補数のビットの一部分(ビットのその一部分がアンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応する)を表すか、又は所与の有意性の範囲内の2の補数のビットの一部分以外の特殊値を表すかを示す。2の補数の一部分以外の特殊値を表すことができる符号化の提供は、アンカーデータフォーマットが非数(NaN)又は無限大などの浮動小数点数の特殊値を表すことを可能にするのに有用である。また、特殊値は、アンカーデータ要素に対して想定される所与の有意性の範囲が、処理回路によって実行される処理動作から生じる数を表すのに適切でない場合を表すのに有用であり得る。
特殊値を処理するための1つの代替的な手法は、アンカーデータ要素が、アンカーデータ要素自体とは別の特殊値を表すという事実を、別のレジスタ内で、又は、アンカーデータ要素又はアンカーデータ要素を符号化する方法に関する他の情報を使用して表現可能な、所与の有意性の範囲を識別するアンカー情報又はメタデータを定義するレジスタ内で符号化することである。しかしながら、この手法の問題は、アンカーデータ処理動作を実行するときに、処理回路が2つの別個のデスティネーションレジスタを更新する必要がある場合があることである。これは、処理回路用に2つの別個のレジスタ書き込みポートを提供する必要がある場合があるため、一部のマイクロアーキテクチャの実装には望ましくない可能性がある。命令設定アーキテクチャでは、2つ以上のデスティネーションレジスタを更新する必要のある命令は比較的少ないため、多くのマイクロアーキテクチャの実装形態では、1つのレジスタ書き込みポートしか提供されないことがある。したがって、特殊値の符号化をサポートするために第2のレジスタ書き込みポートを提供する必要を回避することは、回路面積及び電力消費を削減するのに役立つ。あるいは、装置が2つ以上のレジスタライトポートを有している場合でも、アンカーデータ処理動作を処理する際に、第2のライトポートは、第1のレジスタ書き込みポートと同じ命令に使用されるのではなく、異なる命令に応じて異なるレジスタライトを実行するために使用される可能性がある。したがって、アンカーデータ値の特殊値は、第2のレジスタ書き込みポートを使用せずに表すことができ、これにより、回路面積を節約することができ、及び/又は利用可能なレジスタ書き込みポートを追加の命令の処理に使用できるようにすることで、性能を向上させることができる。
処理回路は、アンカーデータ要素と同じレジスタに型情報を格納することができる。
一例では、アンカーデータ処理動作は、浮動小数点値をアンカーデータ要素に変換するための浮動小数点からアンカーデータへの変換動作を含むことができる。特殊値の符号化は、浮動小数点数の特殊値を収容するのに役立つ可能性があるため、浮動小数点からアンカーデータへの変換動作に特に有用であり得る。例えば、変換される浮動小数点値が正又は負の無限大、あるいはNaNなどの特殊数を表す場合、処理回路は、アンカーデータ要素が特殊値を表すことを示す型情報を有するアンカーデータ要素を生成することができる。型情報は、浮動小数点値によって表される特殊数が正の無限大であるか、負の無限大であるか、又はNaNであるかを区別することができる。したがって、型情報は、正の無限大、負の無限大、及びNaNの各ケースを表すために割り当てられた異なる符号化を有する場合がある。
浮動小数点からアンカーデータへの変換動作において、処理回路は、アンカーデータ要素の所与の有意性の範囲を示すアンカーメタデータに基づいて、アンカーデータ要素を生成することができる。例えば、アンカーデータ要素は、アンカーデータ要素の最下位ビットの有意性を指定することができ(有意性は、その最下位ビットによって表される2の累乗を示す)、また、アンカーデータ要素によって表される2の補数の一部分の幅(ビット数)を示すパラメータを提供することができる。浮動小数点からアンカーデータへの変換動作では、このメタデータを使用して、提供された浮動小数点数に基づいてアンカーデータ要素内のビットの値をどのように設定するかを判断することができる。アンカーメタデータはまた、以下で説明する重複ビットの数、及び/又は、1つ以上のアンカーデータ要素で構成されるアンカー値について、他の要素に対するアンカーデータ要素の相対位置を示すレーン情報、例えば、アンカーデータ要素がアンカーデータ値の最上位要素、最下位要素、又は中間要素のいずれかを表すかなどの他の特性を示すことができる。これにより、アンカーデータ値は、多数のベクトル要素を使用して長い2の補数を表すことができる。
上記の例は、個々のデータ要素の生成について論じているが、アンカーデータ要素に対する動作は、1つの命令に応答して処理の多数のレーンを実行し、処理の各レーンによって、入力として提供された対応するオペランドに基づいてそれぞれのアンカーデータ要素を生成する、ベクトル命令で実装できることが理解されるであろう。浮動小数点からアンカーデータへの変換動作では、それぞれの浮動小数点値を各レーンに提供し、アンカーメタデータのベクトルに基づいてそれぞれのアンカーデータ要素に変換することができる。以下で説明する加算動作の場合、アンカーデータ要素の多数の独立したそれぞれのペアをベクトル動作で加算することができる。以下に説明するように、多数の異なるベクトルレジスタ内の対応する位置にある対応するデータ要素にわたって、所与のアンカーデータ値のそれぞれのアンカーデータ要素をストライプすることは有用であり得る。しかし、単一のベクトルレジスタのそれぞれのベクトルレーンで単一のアンカーデータ値のそれぞれの要素を表すことも可能である。
いくつかの例では、型情報は、アンカーデータ要素が飽和型のアンカーデータ要素であるかどうかを指定することができる。飽和型のアンカーデータ要素は、対応するアンカーデータ要素をオーバーフローさせた以前のアンカーデータ処理動作、又は変換される浮動小数点値が1つ以上のアンカーデータ要素を含むアンカーデータ値の許容される数値範囲外である以前の浮動小数点からアンカーデータへの変換動作に依存するものであってもよい。上記の正の無限大、負の無限大又はNaNを表す特殊値に加えて、飽和型をサポートできるが、これらとは異なり、飽和型は浮動小数点表現において類似した特殊値を有しない。飽和型は、アンカーデータ値に対して定義された有意性の範囲がアンカーデータ処理動作に必要な入力を収容するのに不適切な場合を示すために使用できる。例えば、アンカーデータ値に関連付けられたメタデータが特定の数値範囲を定義しているが、その範囲外の入力として浮動小数点値が提供される場合、その浮動小数点値を処理した場合の正しい数値結果は、アンカーメタデータによって定義された有意性の範囲を使用して適切に表すことができず、飽和型のアンカーデータ要素を使用してこれを示すことができる。
したがって、一例では、浮動小数点値をアンカーデータ要素に変換するために浮動小数点からアンカーデータへの変換動作が実行される場合、処理回路は、当該アンカーデータ要素が1つ以上のアンカーデータ値を含むアンカーデータ値の最上位要素を表し、浮動小数点値を2の補数として表すには、当該アンカーデータ要素を使用して表現可能な所与の有意性の範囲よりも高い有意性の少なくとも1ビットが必要である場合、又は、当該アンカーデータ要素が1つ以上のアンカーデータ値を含むアンカーデータ値の最下位要素を表し、浮動小数点値を2の補数として表すには、当該アンカーデータ要素を使用して表現可能な所与の有意性の範囲よりも低い有意性の少なくとも1ビットが必要である場合のいずれかの場合、アンカーデータ要素の型情報を飽和型を示すように設定することができる。
したがって、変換される浮動小数点値が特殊数を表す場合、アンカーデータ値は、上述したように、正の無限大、負の無限大、又はNaNのいずれかを表す特殊値として符号化することができるのに対して、浮動小数点値がアンカーデータ要素を使用して表現可能な範囲内の2の補数にマップされないという事実が、そのアンカーデータ要素の範囲定義情報の不適切な設定によるものである場合、代わりに飽和型を使用することができる。飽和型を他の型の特殊値と区別することは、ソフトウェアコードが、アンカーデータ値の処理を含む動作のシーケンスの失敗の原因を特定できるようにするために使用することができる。
型情報の符号化は、飽和型として指定されたアンカーデータ要素について、アンカーデータ要素が正の値を表すか負の値を表すかを区別できない場合がある。対照的に、無限大の場合、正の無限大と負の無限大にそれぞれ異なる型の符号化を提供することができる。これは、アンカーデータ値の許容範囲を定義するアンカーメタデータが不適切に設定されて飽和が発生した場合、値が正であるか負であるかを知ることは重要ではないことを認識し、なぜなら、これらの場合、コードが異なるメタデータを使用して遅れて再実行される可能性が高いためである。飽和型としてマークされた正の値と負の値を区別できない符号化を提供することにより、符号化空間を節約することができ、アンカーデータ要素のより効率的な符号化を可能にし、表される2の補数のビットを表すためにより多くのビットを保持することができる。
処理回路は、2つのアンカーデータ要素の加算を実行して結果アンカーデータ要素を生成するための加算回路を有し得る。上述したように、場合によっては、これはベクトル動作として実装されてもよく、その結果、第1のアンカーデータ要素のベクトル及び第2のアンカーデータ要素のベクトルを加算することができ、ベクトル命令に応答してそれぞれのベクトル内の対応する位置における要素の多数の独立した加算を実行して、多数の結果アンカーデータ要素を含む結果ベクトルを生成する。しかし、2つのアンカーデータ要素の単一の加算を実行して結果アンカーデータ要素を生成するスカラ加算命令を実装することも可能である。
このような2つのアンカーデータ要素の加算を実行すると、オーバーフローが発生する場合がある。例えば、アンカーデータ値の最上位要素を表す結果アンカーデータ要素を生成する加算において、加算される2つのアンカーデータ要素の合計が、アンカーメタデータによって定義された許容有意性の範囲内のアンカーデータ値によって表現可能な最上位ビットよりも有意性の高い少なくとも1つのビットを必要とする場合、オーバーフローが発生する可能性がある。結果アンカーデータ要素がアンカーデータ値の最上位要素である加算において結果アンカーデータ要素を生成するときにオーバーフローが発生した場合、加算回路は、結果アンカーデータ要素が飽和型であることを指定する型情報を有する結果アンカーデータ要素を生成することができる。
アンカーデータ要素の型情報は、多数の方法で符号化することができる。しかしながら、一例では、アンカーデータ要素は、アンカーデータ要素の所定のビットが第1の値を有する場合、アンカーデータ要素は2の補数のビットの一部分を表し、アンカーデータ要素の所定のビットが第2の値を有する場合、アンカービット要素は特殊値を表す、符号化を有してもよい。例えば、所定のビットは、アンカーデータ要素の最上位ビットであってよい。したがって、デコーダは、表される特殊値の特定の形式を識別するためにアンカーデータ要素の更なるビットを検査する必要があるかどうか、又は要素が単に特殊値ではない2の補数の一部分を表すかどうかを単一のビットからチェックすることができるため、これは、デコードするのに効率的であり得る。例えば、所定のビットが第2の値を有する場合、少なくとも1つの更なるビットは、表される特定の型の特殊値を表すことができる。一方、所定のビットが第1の値を有する場合、少なくとも1つの更なるビットは、2の補数自体の一部分の一部を表すか、又は2の補数の一部分を表すアンカーデータ要素の一部からのキャリーを収容するための少なくとも1つの重複ビットを表すために再利用できる。要素が特殊値を表さないより一般的な場合では、特定の型の特殊値を符号化するために使用されるビットは他の目的に再利用できるため、これは特に効率的な符号化を提供する。
一般に、所与のアンカーデータ処理動作において、入力アンカーデータ要素が第2の値に等しい所定のビットを有する場合、処理回路は、第2の値に等しい所定のビットを有する対応する結果アンカーデータ要素を生成することができる。したがって、所定の処理動作のシーケンスにおいて所与のビットが設定されると、後続の動作において生成される対応するアンカーデータ要素が、第2の値に等しい所定のビットを保持し続けて、その動作のシーケンスのどこかで特殊数である浮動小数点値が検出されたか、又はアンカーデータ処理動作の結果が、所与のアンカーデータ要素に対してアンカーメタデータによって定義された所与の有意性の範囲内で正確に表現できないことを示すフラグを立てるという意味で、スティッキーであり得る。
より一般的には、入力アンカーデータ要素が型情報によって特殊数であると示されている所与のアンカーデータ処理動作において、対応する結果アンカーデータ要素も、結果アンカーデータ要素が特殊値を表すことを指定する型情報で示すことができる。結果に対して示される特殊値の特定の形式は、入力アンカーデータ要素に対して示される特殊値の形式と常に同じであるとは限らないことに注意されたい。例えば、2つのアンカーデータ要素の加算において、2つのアンカーデータ要素の型情報が、一方が正の無限大を表し、もう一方が負の無限大を表すことを示す場合、結果がNaNを表すことを指定する型情報を有する結果アンカーデータ要素を生成することができる。
いくつかの例では、アンカーデータ要素は、データ要素の有意性の低い部分で実行された追加によって生じるキャリーに対応するために、要素内にいくつかの重複ビットが割り当てられる冗長な表現を使用して表されてもよい。これにより、一連のアンカーデータ処理動作によってアンカーデータ要素からオーバーフローが発生する可能性を減らすことができる。当該表現は、重複ビットと非重複ビットの異なる組み合わせであるすべてが2の補数の同じ数値を表すことができる複数のアンカーデータ要素で形成されたアンカーデータ値のビットの異なるパターンが多数存在する可能性があるという意味で、冗長であってもよい。詳細を以下に提供する。
したがって、一般に、アンカーデータ要素は、V個の重複ビット及びW個の非重複ビットを含むNビット値を含み得る。特定の数の重複ビットと非重複ビットは、固定されていてもよく、あるいは、例えば上述のアンカーメタデータ内の情報を指定するなどして可変であることもある。
浮動小数点値をアンカーデータ要素に変換するための浮動小数点からアンカーデータへの変換動作において、浮動小数点値が特殊数以外の数を表し、その数が、アンカーデータ要素が一部分を構成するアンカーデータ値の許容される数値範囲内にある場合、処理回路は、浮動小数点値に対応する2の補数のビットの一部分を表すように、アンカーデータ要素のW個の非重複ビットを設定することができる。一方、アンカーデータ要素のV個の重複ビットには、W個の非重複ビットの符号拡張に設定されてもよい。したがって、最初は、重複ビットは、符号拡張に、例えば、すべてゼロ又はすべて1に設定されていてもよい。しかし、浮動小数点からアンカーデータへの変換動作によって生成されたアンカーデータ要素が一連の加算処理をされると、重複ビットにいくつかのキャリーが発生する可能性がある。アンカーデータ値全体で表される2の補数を非冗長表現で計算するために、1つのアンカーデータ要素の重複ビットで表されるキャリーを、アンカーデータ値の次に高いアンカーデータ要素の非重複ビットに伝搬する重複伝搬動作を行うことができる。
一部の例では、N-V-Wは、0より大きくてもよい。つまり、重複ビットと非重複ビットはともに、アンカーデータ要素のN個のビットのすべてを占めるわけではない。これは、要素が特殊値を表すかどうかを示す型情報を表すために、少なくとも1つの他のビットが使用される可能性があるためである。
上記のように、重複ビットによって表されるキャリーを次に最上位のデータ要素に伝搬するために、重複伝搬動作を定期的に実行することができる。重複伝搬命令は、重複伝搬動作を実行するように処理回路を制御するために提供され得る。重複伝搬命令に応答して、処理回路は、第1のアンカーデータ要素のV個の重複ビットを第2のアンカーデータ要素のW個の非重複ビットと整列させ、整列された重複ビットと非重複ビットを加算して第2のアンカーデータ要素の更新値を生成し得る。この場合も、これはベクトル動作として実行されてもよく、単一の命令に応答して、第1及び第2のアンカーデータ要素のそれぞれのペアに対して多数のレーンの重複伝搬が実行される。
重複伝搬動作では、第1及び第2のアンカーデータ要素で指定された型情報を考慮して、第2のアンカーデータ要素の更新値をどのように生成するかを判断することができる。第1のアンカーデータ要素及び第2のアンカーデータ要素の1つが、それが上記の特殊値の型の1つを表すことを指定する型情報を有する場合、処理回路は、第2のアンカーデータ要素の以前の値を保持することができる。例えば、第2のアンカーデータ要素の更新は、第1のアンカーデータ要素からの整列された重複ビットを追加することなく抑制されてもよい。これにより、以前に実行されたアンカーデータ処理動作のシーケンスによって特殊値が生成された場合、重複伝搬動作の実行によってその型情報が上書きされることがなく、重複伝播操作を実行しているにもかかわらず、特殊値が検出されたという事実を最終結果から識別できることが保証される。これにより、特殊値であるかどうかを頻繁にチェックする必要がないことを意味するため、アンカーデータ処理動作を実行するためのコードの作成又はコンパイルが簡単になる。あるいは、第1のアンカーデータ要素が特殊値である場合、第2のアンカーデータ要素の型情報を、第1のアンカーデータ要素の型情報と一致するように更新することができる。これにより、型情報がHPA値の上位要素に向けて伝搬され、一連のアンカーデータ処理動作を実行した後の型情報のチェックが簡素化され得る。
一方、整列された重複ビット及び非重複ビットの加算が、第2のアンカーデータ要素のオーバーフローを引き起こした場合、処理回路は、飽和型値を示すように第2のアンカーデータ要素の型情報を設定することができる。ここで、非重複ビットから重複ビットへのオーバーフローが発生した場合ではなく、最上位重複ビットからオーバーフローが発生した場合に、オーバーフローが発生するとみなされる。重複伝搬動作の加算により最上位重複ビットからオーバーフローが発生した場合、これは、正しい結果がもはや第2のアンカーデータ要素において正しく表現できなくなることを意味し、したがって、後続の命令が何か問題が発生したことを検出できるようにするために、飽和型を指定してもよい。例えば、これは、ソフトウェアコードが重複伝搬動作をより頻繁にトリガする必要がある符号を示す可能性がある。
プログラムコード内で使用する場合、重複伝搬命令の1つの使用例は、同じアンカーデータ値の隣接するアンカーデータ要素のペアをそれぞれ第1及び第2のアンカーデータ要素として指定することであり得る(第2のアンカーデータ要素は、第1のアンカーデータ要素よりもアンカーデータ値のよりも油井精が高い部分を表す要素である)。ここで、命令を使用して、下位要素から同じアンカーデータ値の次に最上位の要素にキャリーを伝搬することができる。
ただし、別の使用例では、第1のアンカーデータ要素は、所与のアンカーデータ値の最上位アンカーデータ要素を含み、第2のアンカーデータ要素は、第1のアンカーデータ要素と同じアンカーデータ値の一部ではない「空」のアンカーデータ要素を含む場合がある。これは、アンカーデータ値の範囲を効果的に拡張して、追加要素を含めて、以前に表されたアンカーデータ要素の最上位要素からのキャリービットを収容するのに有用である可能性があり、これは、第1のアンカーデータ要素を含むアンカーデータ値が、後で第1のアンカーデータ要素のビットよりも有意性の高いビットを含む別のアンカーデータ値に加算される場合に有用である可能性がある。
これらは、重複伝搬命令がどのように使用され得るかの2つの例に過ぎず、プログラマ又はコンパイラは、他の用途も見出すことができることが理解されるであろう。
処理回路はまた、重複クリア命令に応答して、ターゲットアンカーデータ要素の重複ビットをゼロにクリアすることができる。この命令は、重複伝搬命令が重複ビットを次に最上位のアンカーデータ要素の非重複ビットにすでに加算した後、重複ビットをクリアするために使用することができる。重複伝搬及びクリア動作を2つの別々の命令に分離することで、1つの命令が2つのデスティネーションレジスタを更新する必要がなくなり、上記の利点が得られる。他の代替アーキテクチャでは、これらの命令を単一の命令に結合して、重複伝搬命令自体に応答して第1のアンカーデータ要素の重複ビットをクリアすることを選択することができる。第1のアンカーデータ要素の重複ビットもクリアするこのような結合された重複伝搬命令はまた、重複クリア命令の一例とみなすこともできる。
重複クリア命令に応答して、ターゲットアンカーデータ要素がそれが特殊値を表すことを指定する型情報を有する場合、処理回路は、ターゲットアンカーデータ要素の以前の値を保持することができる、即ち、重複ビットはクリアされない。また、これにより、型情報を保持することができる。
重複クリア命令の一部の例において、ターゲットアンカーデータ要素(プログラムにおいて、重複伝搬命令によって作用される第1及び第2の要素のペアの最下位要素に対応すると予想される場合がある)と同様に、重複クリア命令もまた、第2のアンカーデータ要素(ペアの上位要素に対応すると予想される)を指定することができ、処理回路は、第2アンカーデータ要素の型情報がそれが特殊値であることを示す場合、ターゲットアンカーデータ要素の以前の値を保持することもできる。したがって、重複ビットのクリア自体は第2のアンカーデータ要素に依存しないとしても、第2のアンカーデータ要素の型情報を考慮すると、重複クリア命令は、重複伝搬命令と類似の方法で進むことが可能であり、それにより、これらの要素のいずれかが、要素が特殊値を表すことを指定する場合、同じアンカーデータ値の下位及び上位アンカーデータ要素の所与のペアに変更がない。
上記のように、所与のアンカーデータ要素は、特殊値を表さない場合、アンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応するビットの一部分を表す。ここで、有意性という用語は、所与のビット位置で2によって表される2の特定の累乗を指す。例えば、2を表す2の補数のビットは、2を表す2の補数のビットよりも高い有意性を有するとみなされる。つまり、2の補数の最上位ビットが最も高い有意性を有し、最下位ビットが最も低い有意性を有する。
ここで、特定の例を、図面を参照して説明する。
以下では、HPA(高精度アンカー)フォーマットについて説明する。HPAフォーマットに関する詳細は、米国特許出願62/074,149号、同第14/582,974号、同第14/582,875号、同第14/582,812号、同第14/582,836号、同第14/582,978号、同第14/606,510号、及び同第14/582,968号で見つけることができ、これらの内容は参照により完全に本明細書に組み込まれている。
浮動小数点数
浮動小数点(FP)は、少数のビットを使って実数を近似する有用な方法である。IEEE 754-2008 FP規格では、FP数の複数の異なるフォーマットが提案されており、そのうちのいくつかは、2進数64(倍精度(DP)とも呼ばれる)、2進数32(単精度(SP)とも呼ばれる)、及び2進数16(半精度(HP)とも呼ばれる)である。64、32、16という数は、それぞれのフォーマットに必要なビット数を表している。
表現
FP数は、科学の授業で習う「指数表記」とよく似ている。マイナス200万の代わりに、-2.0×10と書く。この数を構成するパーツは、符号(この場合は負)、仮数(2.0)、指数の底(10)、指数(6)である。これらの部分はすべて、構成要素が2進数で格納されていること、及び、指数の基数が常に2であること、という最も重大な違いはあるものの、FP数に似ている。
より正確には、FP数は、符号ビット、いくつかのバイアス指数ビット、及び、いくつかのフラクションビットを含む。具体的には、DPフォーマット、SPフォーマット、HPフォーマットは、以下のビットを含む。
Figure 2022519258000003
符号は、負の数について1、正の数について0である。ゼロを含むすべての数には符号がある。
指数にはバイアスがかかっている。つまり、真の指数は、数に格納されているものとは異なる。例えば、バイアスのかかったSP指数は8ビット長で、0から255までの範囲になる。指数0と255は特別なケースであるが、その他の指数はすべてバイアス127を有し、真の指数はバイアス指数よりも127小さいことを意味する。最小バイアス指数は1で、これは真の指数-126に相当する。バイアスのかかった指数の最大値は254で、これは真の指数127に相当する。HP指数とDP指数も同じように動作し、上の表に示されたバイアスがかかる。
SP指数255(又はDP指数2047、HP指数31)は、無限大とNaN(not a number:数ではない)と呼ばれる特殊記号のために予約されている。無限大(正の場合も負の場合もある)は、ゼロのフラクションを持つ。指数255の数で、フラクションが0でないものはNaNである。無限大は飽和値を提供しているので、実際には「この計算の結果、このフォーマットで表現できる数よりも大きい数が得られた」というような意味になる。NaNは、例えばゼロによる除算また負の数の平方根を取るなど、実数に対して数学的に定義されていない動作に対して返される。
指数ゼロは、いずれのフォーマットにおいても、非正規数及びゼロのために予約されている。正規数は以下の値を表す。
-1符号×1.フラクション×2
ここでeは、バイアス指数から計算された真の指数である。1.フラクションという言葉は仮数と呼ばれ、1はFP数の一部としては格納されず、代わりに指数から推測される。ゼロと最大指数を除くすべての指数は、1.フラクションの形の仮数を示す。指数ゼロは、0.フラクションの形の仮数と、所与のフォーマットの1バイアスに等しい真の指数と、を示す。このような数は非正規(subnormal)と呼ばれる(歴史的にはこのような数は非正規(denormal)と呼ばれていたが、現代では非正規(subnormal)という言葉が好まれる)。
指数とフラクションの両方が0に等しい数はゼロである。
次の表は、HPフォーマットの数の例である。エントリは2進法で、読みやすくするために「_」を加えてある。(表の4行目、指数が0の)非正規エントリは、その前の行の正規エントリとは異なる仮数を生成することに注意すること。
Figure 2022519258000004
FP実装の複雑さの大部分は非正規に起因するため、多くの場合、マイクロコード又はソフトウェアで処理される。一部のプロセッサでは、非正規をハードウェアで処理することで、ソフトウェア又はマイクロコードの実装形態と比べて、これらの動作を10倍から100倍に高速化している。
整数、固定小数点、浮動小数点
FPの符号の処理法は「符号絶対値」と呼ばれ、通常のコンピュータでの整数の格納方法(2の補数)とは異なる。符号絶対値表現では、同じ数の正と負のバージョンは、符号ビットだけが異なる。符号ビットと3つの仮数ビットとを含む4ビットの符号絶対値整数は、プラス1とマイナス1を次のように表す。
+1=0001
-1=1001
2の補数表現では、(n+1)ビットの2進整数は、数値i-Sを表す。ここで、iはnビットの整数で、n+1ビット値の下位nビットで表され、Sは(n+1)ビット値の最上位ビットのビット値(0又は1)である。したがって、符号ビットが値の他のすべてのビットの符号を修正する符号絶対値数の場合とは異なり、2の補数値の場合、最上位ビットはマイナスに、他のすべてのビットはプラスに加重される。したがって、4ビットの2の補数の整数は、プラス1とマイナス1を次のように表す。
+1=0001
-1=1111
2の補数フォーマットは、コンピュータ演算を簡単にするため、符号付き整数では実質的に普遍的なフォーマットである。
一方、固定小数点は、見た目は整数と同じだが、実際には特定のビット数を持つ値を表す。センサデータは固定小数点フォーマットであることが多く、FPが普及する前に書かれた固定小数点ソフトウェアも数多く存在する。プログラマは、「2進法」、つまり数の整数部と小数部の区切りを常に把握しておく必要があり、また、ビットを正しい位置に保つために常に数をシフトさせる必要があるため、固定小数点は、作業が非常に面倒である。FP数にはこのような困難はないので、固定小数点数とFP数の変換ができることが望ましい。変換ができるということは、固定小数点のソフトウェアやデータを使い続けることができるということでもあり、新しいソフトウェアを書くときに固定小数点に縛られないということでもある。
FP数を丸める
IEEE-754規格では、ほとんどのFP動作は、動作が範囲と精度が制限されていないかのように計算され、FP数に収まるように丸められることが要求されている。計算結果がFP数と完全に一致する場合は、常にその値が返されるが、通常、計算結果は連続する2つの浮動小数点数の間の値になる。丸めるとは、連続する2つの連続する数のうち、どちらを返すべきかを選択する処理のことである。
複数の丸めの方法があり、丸めモードと呼ばれている。そのうちの6つは以下のとおりである。
Figure 2022519258000005
この定義では、実際にどのように丸めるのかは不明である。一般的な1つの実装形態は、動作を行い、残りのすべてのビットと同様に切り捨てられた値(つまり、FPフォーマットに収まる値)を見て、特定の条件が成立すれば切り捨てられた値を調整するというものである。これらの計算はすべて以下に基づく。
L-(最小)切り捨てられた値の最下位ビット
G-(ガード)次の最上位ビット(つまり、切り捨てに含まれない最初のビット)
S-(スティッキー)切り捨ての一部ではない残りのすべてのビットの論理和
これらの3つの値と切り捨てられた値が与えられると、次の表のように、常に正しく丸められた値を計算することができる。
Figure 2022519258000006
例えば、2つの4ビットの仮数を乗算して、4ビットの仮数に丸めることを考える。
sig1=1011(10進数11)
sig2=0111(10進数7)
乗算すると、
sig1×sig2=1001_101(10進数77)
L Gss
となる。
切り捨てられた4ビットの結果の最下位ビットは、Lとラベルされ、次のビットはGとラベルされ、Sはsとラベルされた残りのビットの論理和(つまり、S=0|1=1)となる。丸めるために、丸めモード及び上の表の計算に従って、4ビットの結果(1001)を調整する。例えば、RNA丸めでは、Gが設定されているので、1001+1=1010を返すことになる。RX丸めではG|Sが真なのでLを1にセットして(既に1なのでこの場合は何も変わらない)1001を返す。
整数及び固定小数点数の丸め
FP数を整数又は固定小数点に変換する場合も、丸めを行う。考え方は基本的にFP丸めと同じである。FP数がたまたま整数であった場合、常にその整数に丸められる。それ以外のFP数は、連続する2つの整数の間にあり、丸めによってどの整数を返されるかが決まる。残念なことに、整数の丸めロジックは、2の補数と符号絶対値形式の違いのために、やや難しくなっている。符号絶対値数が増分すると、常に絶対値が大きくなるので、増分された数はゼロから遠くなる。正の2の補数でも同じことが言えるが、負の2の補数は増分するとゼロに近づく。つまり、これは、整数が正か負かによって、丸めのロジックを変えなければならないことを意味する。また、基底値(増分するか否かの値)の選択にも注意が必要だということも意味する。正の整数の場合、その値はFPの仮数を切り捨てたものなので、1.37は基本値が1で、結果は1又は2のどちらかになる。負の整数の場合、再び仮数を切り捨てて、その結果の1の補数を取る(1の補数とは、すべてのビットを反転させた元の数のことである)。-1.37は1に切り捨てられた後に反転され、基本値-2になる。結果を-2又は(増分したときに)-1のいずれかにしたいのですべてがうまくいく。
更に複雑なことに、この変換方法では、負の整数に対するL、G及びSを求めるためにいくつかの計算が必要になる。正しい丸めは、2の補数処理(反転して1を加える)を完了してからL、G、Sを計算することを必要とするが、1を加えるのは反転するだけの場合に比べて遅い。理想的には、シフトされた元の入力から(つまり、符号に手を加える前の入力から)実際のL、G、Sを計算することを望んでいる(浮動小数点の1.37又は-1.37は、どちらも右シフトされて整数の1になる)。
L0、G0及びS0を反転前の最下位ビット(lsb)、ガード及びスティッキーとし、Li、Gi及びSiを反転後のlsb、ガード及びスティッキーとし、最後にL、G及びSを反転して1を加えた後のlsb、ガード及びスティッキーとする。
S0がゼロであれば、Siに寄与するビットはすべて1であり、したがって(それらのSiビットに1を加えて得られる)Sもゼロである。S0が0でない場合、Siはすべて1ではなく、したがってSも0ではない。したがって、すべての場合においてS0=Sとなる。
G0がゼロの場合、Giは1であり、S0がゼロである場合にのみ発生するSビットからのキャリーインがある場合を除いて、Gも1である。G0が1の場合、Giはゼロであり、同じく、S0がゼロである場合にのみ発生するSビットからのキャリーインがある場合を除いて、Gも1である。つまり、G=G0^S0である。
同様の論理で、L=L0^(G0|S0)となる。
これで、負の整数と正の整数のL、G及びSがわかったので、丸めのルールを考えることができる。
Figure 2022519258000007
固定小数点数は、整数とまったく同じ方法で丸められる。符号なしの変換(整数又は固定小数点への変換)の規則は、正の変換の規則と同じである。
注入丸め
丸めをより速く行うには、ほとんどすべてのFP動作の一部である仮数加算の一部に丸め定数を注入することである。これがどのように機能するかを見るために、ドルとセントで数を加算し、ドルに丸めることを考える。例えば、次のように加算する。
$1.27
+$2.35
$3.62
合計の$3.62は、$3よりも$4に近いので、最近似丸めモードのいずれかが$4を返すことがわかる。数を2進法で表現すれば、前節のL、G、S法でも同じ結果が得られる。しかし、50セントを足して、その結果を切り捨てるとしたらどうだろうか。
1.27
+2.35
+0.50 (注入丸め)
4.12
合計($4.12)からドル金額($4)を返すだけの場合、RNA丸めモードを使って正しく丸めることになる。$0.50ではなく$0.99を加える場合、RP丸めを使って正しく丸めることになる。RNEは少し複雑である。$0.50を加えて切り捨て、残りのセントを見る。残りのセントが0でない場合、切り捨てられた結果は正しい。残りのセントが0であれば、注入の前に2つのドルのちょうど中間にいたので、偶数のドルを選ぶ。2進法のFPでは、ドルの金額の最下位ビットをゼロにすることになる。
3つの数を足すのは、2つの数を足すよりもわずかに遅いだけなので、注入丸めを使えば、2つの仮数を足してL、G及びSを調べ、丸めモードに応じて結果を増分するよりも、はるかに早く丸められた結果を得ることができる。
注入丸めの実装
FPでは、注入丸めは3つの異なる値のうちの1つで、その値は丸めモードと(時には)結果の符号に依存する。
RNAとRNEとの両方において、Gの位置に1を注入する必要がある(ドルとセントの例では0.50ドルを加えるようなものである)。
RP及びRM丸めは、モードだけでなく符号にも依存する。RPは正の結果を切り上げる(正の無限大に向かって仮数の大きさを大きくする)が、負の結果は切り捨てる(正の無限大に近い仮数を選ぶ)。同様に、RMは負の結果を切り上げる(負の無限大に向かって仮数の大きさを大きくする)が、正の結果は切り捨てる(負の無限大に近いほうの仮数を選ぶ)。そこで、RMとRPを、符号が丸めの方向と一致する場合の丸め(RU)と、符号が注入丸めと異なる場合の切り捨て(RZ)の2つの場合に分ける。RUの場合は、Gビットの位置と、論理的にSに寄与するすべての位置とに1を注入する(ドルとセントの例では0.99ドルを加えるようなものである)。
RZモード及びRXモード、そしてRZモードに還元されるRPモード及びRMモードには0を注入する。
ほとんどの丸めモードでは、注入丸めを加えてから切り捨てると、正しい丸め結果が得られる。2つの例外は、RNE及びRXであり、加算後にGとSを調べる必要がある。RNEでは、G及びSがともにゼロの場合、Lを0に設定する。RXでは、G又はSが0ない場合、Lを1に設定する。
FP数は実数ではない
FP数は、実数と同じように考えがちであるが、最も基本的な特性ですら、両者は根本的に異なる。
両者には関連しない。例えば、SPでは3つの数を足して100万又は0を返すことができるが、これはおそらく一般的に丸め誤差として考えるものではない。
(245 + -245)+220=220
45+(-245+220)=0
両者は、分配法則に従わない。再度SPで:
3,000,001(4.00001+5.00001)=0x4bcdfe83
(3,000,0014.00001)+(3,000,0015.00001)=0x4bcdfe82
となり、オーバーフローが発生すると更に状況が悪化する。
50*(278-277)=2127
(250*78)-(250*77)=無限大
いくつかの実装形態の場合、一般的にnanA+nanB !=nanB+nanAであるため、デフォルトのNaNモード(すべてのNaNを単一のNaNに変換するモード)でない限り、両者は可換ですらない。数値加算及び数値乗算は、可換である。
IEEEのNaNルールのため、乗算又は加算の恒等式はない。1と0は、数値の恒等式として機能する。
FP数を考えるための1つの有用な方法は、FP数は、非常に長い固定小数点数で、多くても数ビット(DPでは53ビット)が連続して非ゼロになるだけだと考えることである。例えば、非無限DP数は、仮数の最初のビットが2046箇所のいずれかにあり、その最初のビットの後に他の52個の仮数ビットが続き、更に符号ビットがあるので、任意の有限DP数は2046+52+1=2099ビットの固定小数点数として表すことができる。このように考えると、2つのFP数を加算しても、一般的には別のFP数にはならず、加算の結果は、FP数になるように丸める必要があることがよくわかる。
浮動小数点(FP)演算の問題点として知られているのが、和が問題になるという、非結合性であるということである。
・プログラマは、3つの数を加算するときですら、結果が大きく異なることを気にする必要がある。
・プログラマは、結果が大きく異なることを回避するために、必要以上に広いフォーマットを使用する。
・全く同じ順序で計算しないと和が再現できないため、プログラマはコードを簡単に並列化できない。
例えば、単精度の場合、
20+(-244+244)=220
であるが、
(220+-244)+244=0
動作が実行される順序によって、結果が100万又は0になる。これは指数が24違うという極端な例であるが、指数が1違う場合、又は、指数がすべて同じで4つ以上のものを加えている場合でも、異なる答えを得る可能性がある。プログラミング言語Cでは、和を左から右へ順序に評価することで再現性の問題に対処しているが、これでは正しさの面では何の役にも立たないし、並列化も不可能である。
この問題は、何百万もの動作を実行するハイパフォーマンスコンピューティング(HPC)では特に顕著である。プログラマは、これらの問題を並列化したいと考えるが、再現性がないためにデバッグが通常よりも困難になる。また、機械の構成が違えば、たとえその機械のための再プログラミングが完璧に行われたとしても、異なる答えが出てくる。
HPA表現(アンカーデータ値)
プログラマが選択可能な範囲にある浮動小数点(FP)数を高速かつ正確に集積できる新しいデータ型が提案されている。ほとんどの問題に対応できる適度な範囲では、その集積はFP加算よりも速く、また結合的である。結合的加算では、再現性のある正しい結果を得ながら問題を並列化することができ、既存のハードウェアと比較して、例えば100倍以上のスピードアップが可能になる。このようなメリットは、ハイパフォーマンスコンピューティング(HPC)の分野ではもちろんのこと、ハイパフォーマンスコンピューティング以外の多くのアプリケーションにとっても魅力的なものになると考えられる。
図1は、プログラム命令の制御下でデータ処理動作を実行するためのデータ処理装置2を模式的に示している。データ処理装置2は、プログラム命令6及び処理すべきデータ8を格納するメモリ4を含む。処理コア10は、メモリ4に結合され、レジスタバンク12、処理回路14、命令フェッチユニット16、命令パイプラインユニット18、及び、命令デコーダ20を含む。実際には、データ処理システム2は、多くの追加要素を含んでもよく、理解を助けるために図1の表現は簡略化されていることが理解されるであろう。動作において、プログラム命令6は、命令フェッチユニット16によってメモリ4からフェッチされ、命令パイプライン18に供給される。プログラム命令が命令パイプライン18内の適切なステージに到達すると、命令デコーダ20によってデコードされ、デコードされたプログラム命令によって指定された処理動作(単数又は複数)を実行するために、レジスタバンク12及び処理回路14の動作を制御するのに役立つ制御信号を生成する。複数の入力オペランドは、レジスタバンク12から読み出され、処理回路14に供給され、そこで操作され、その後、結果値がレジスタバンク12に書き戻されてもよい。
レジスタバンク12は、様々な異なる形態を有することができる。操作されるオペランドは、例えば、浮動小数点オペランド、固定小数点オペランド、整数オペランド、及びHPA又はRHPA数オペランド(後述する)を含んでもよい。レジスタバンク12は、レジスタバンク12の構成に応じて、これらの型のオペランドの混合物を格納する役割を果たしてもよい。オペランドは、そのフォーマットによって事前に定義されるように、又は、HPA数のオペランドに関連して後述するように、レジスタに関連付けられたメタデータを使用してプログラム可能に指定されるように、異なるレベルの精度を有することができる。
図1に示すように、レジスタバンク12は、レジスタバンク12の対応するデータレジスタに格納されたHPA値又はRHPA値に関連するメタデータを指定するためのメタデータレジスタ22を含んでもよい(メタデータの内容の例を以下に示す)。いくつかの場合においては、各データレジスタが対応するメタデータレジスタ22を有していてもよく、他の場合には、2つ以上のデータレジスタが、単一のメタデータレジスタ22によって指定されたメタデータを共有してもよい。
図2は、浮動小数点オペランドを模式的に示している。浮動小数点オペランドは、符号、指数、及び、仮数で形成される。浮動小数点オペランドは、指数値で示される様々な大きさの値を表すことができる。数を表現できる精度は、仮数の大きさによって制限される。浮動小数点動作は、一般的に整数演算よりも複雑で、遅い。
図2には、64ビットの整数オペランドも示されている。このような整数オペランドは、符号なし整数の場合は0~(264-1)、符号付き整数の場合は-263~263-1の範囲の数を表すことができる。整数演算は、処理速度が速く、(浮動小数点演算に比べて)実行するための消費エネルギーも比較的少ないのが特徴であるが、浮動小数点値で表現できる数の範囲に比べて、比較的限られた範囲の数を指定することになるというデメリットがある。
また、図2は、64ビット整数をそれぞれが含む複数の成分(この例では3成分)のベクトルからなるHPA(高精度アンカー)数を示す。このHPA数には、関連付けられたメタデータを有する。このメタデータには、HPA数の一部を構成する各成分のビットの有意性を示すアンカー値が含まれている。アンカー値(単数又は複数)は、ビット有意性の下限とビット有意性の上限とを、直接的又は間接的に指定するものである。以下、メタデータという用語は、HPA数のビット有意性を指定するアンカー値(単数又は複数)を含むデータに対応するとみなすことができる。異なる成分を組み合わせることで、ビット有意性の範囲を連続してカバーするビット値が指定される。ビット有意性の下限とビット有意性の上限との位置に応じて、ビット有意性の範囲は、2進小数点の位置を含むことができる。また、2進小数点の位置が、特定のHPA値に対して指定されたビット有意性の範囲の外側にある可能性もある。
アンカー値(単数又は複数)は、浮動小数点値で表現可能な最小有意性(例えば、倍精度FP値)から、その浮動小数点値で表現可能な最大ビット有意性までのビット有意性の範囲を表現できるように提供されてもよい。
HPA数を形成する成分の数は、異なる実装形態間で変わる可能性がある。成分のサイズは、一部の実装では固定されているが、他の実装では変化してもよい。いくつかの実施形態では、範囲のビット有意性の全体的な幅は、固定成分サイズの単位で変化するように制約されてもよい(例えば、64ビット成分では、ビット有意性の範囲は、例えば、64、128、192、256、...の幅を有してもよい)。また、ビット有意性の範囲の幅は、1ビット幅のステップで連続的に変化させることも可能である。
(メタデータ内の)アンカー値(単数又は複数)は、プログラマが対応するHPA値の有意性を設定できるように、プログラム可能であってもよい。アンカー値は、様々な異なる方法でビット有意性を指定することができる。一例は、各ベクトル成分の下限のビット有意性を指定することである。したがって、各ベクトルの成分は、ビット有意性の全体的な範囲内で値の有効ビットの部分を表す整数値と、その成分内の最下位ビット有意性を表す(アンカーする)メタデータを含んでもよい。また、アンカー値(単数又は複数)は、HPA数全体のビット有意性の下限を、ビット有意性の範囲の全幅とともに指定するという方法もある。更に、アンカー値(単数又は複数)が、ビット有意性を表す範囲の下限と上限を指定するデータを含む場合もある。更に、固定幅の成分であることがわかっている場合には、アンカー値(単数又は複数)として、ビット有意性の範囲の下限と成分の数を含むなどのバリエーションも可能である。
図3は、倍精度浮動小数点で表すことができる値の範囲と、HPA数の有意性の範囲との関係を模式的に示している。倍精度浮動小数点数の場合、指定可能なビット値の範囲は、約2-1074~2+1023(非正規は数えない)までとなる。
図示されているように、HPA数は、浮動小数点値を使用して表現可能なビット有意性の範囲内のビット有意性のウィンドウと考えられるプログラム可能なビット有意性の範囲を有している。このプログラム可能なビット有意性は、下限と上限との境界によって指定され、下限と上限との値に応じて、浮動小数点値によって提供されるビット有意性の範囲に沿ってスライドすると考えることができる。始点と終点と同様、ウィンドウの幅は、ビット有意性を指定するプログラム可能なメタデータ(アンカー値を含む)の適切な値によって指定することができる。このように、HPA数は、実行する計算に合わせてプログラマが選択できる形式を有する。
HPAフォーマットでは、2つ以上の値の加算を、高速かつ正確に、そして結合的に実行することができるが、その一方で、幅広い有意性を持つ値を表現することができる。また、HPA値は単なる2の補数であるため、整数加算器を使用して加算することができ、浮動小数点演算のような丸め又は正規化の必要がなく、これにより、値を加算する順序に関係なく結果が同じになるため、一連の加算を並列化することができる。しかし、HPA値のプログラム可能な有意性を指定するメタデータを定義することで、同等の浮動小数点値の有意性の全範囲を表現することができるが、非常に広い加算器を用意する必要はなく(例えば、倍精度浮動小数点値で表現可能な全範囲にわたって2つの2の補数を加算するには、2098ビットの加算器が必要になる)、代わりに、プログラム可能な有意性により、より小さな加算器で、広い範囲の中のプログラム可能なビット有意性の特定のウィンドウに焦点を当てることができる。実際には、ほとんどの計算は、倍精度浮動小数点で利用可能な有意性の全範囲を必要としない。例えば、原子レベルの問題では非常に小さな値が、天文学的な問題では非常に大きな値が加算される可能性があるが、陽子の幅を加算して銀河間の距離にすることは一般的には有用ではない。ハイパフォーマンスコンピューティングの場合でも、ほとんどの集積は限られた範囲で起こる。
通常、プログラムを書いているプログラマは、有用な結果が落ちてくると予想される値の範囲を(アプリケーションに応じて)知っている。プログラマは、特定の和に対するすべてのデータが260未満の大きさを有し、2-50未満の大きさを持つ値は合計に有意性のある影響を与えないと判断してもよく、この場合、データ幅128ビット、及び、最下位ビットの有意性を指定するアンカー値-50のHPAフォーマットを用いてデータを加算することで、このアプリケーションでは、任意の順序で結合的に数を加算することができる。
したがって、アンカー値を用いて結果を計算する際の有効範囲を制限することで、比較的小さなハードウェアを用いて、プログラム可能に定義されたウィンドウ内で結果を計算することができる。加算の結果、定義された範囲の有意性の上限を超えてオーバーフローした場合、又は有意性の下限を下回ってアンダーフローした場合は、例外が発生することがあり、これは、プログラマが誤った有意性の境界を定義したことを示しており、結果の有意性の異なるウィンドウを定義するために、異なるメタデータ(例えば、異なるアンカー値又はHPA値の全体サイズ)を使用して処理を繰り返す必要があることを示している。
2つのHPA値を加算又は減算する場合、アンカー値は両方のHPA値で同じであり、結果も同じアンカー値になる。これは、2つの値を加算又は減算すると、結果が正規化されるためにいずれかの入力と異なる指数を持つ結果になる浮動小数点演算とは異なる。入力が異なるアンカーメタデータで提供されている場合は、結果に必要なターゲット有意性範囲に合わせてシフトされる。入力がHPA以外の表現(例えば、整数又は浮動小数点)で提供されている場合は、同じアンカー値を持つHPA値に変換され、同じアンカー値を持つ結果となるように加算される。したがって、HPAレジスタ用のメタデータは、そのレジスタで生成される結果値の有意性のターゲット範囲を定義しているとみなすことができ、有意性ターゲット範囲外のビットは、入力値の実際の有意性にかかわらず、ハードウェアによって計算されない。
RHPA表現
HPAフォーマットでは、浮動小数点に比べてはるかに高速な加算が可能であるが、HPA値のサイズが比較的大きくなると、2つのHPA値を整数演算で加算しても比較的遅い場合がある。例えば、HPAフォーマットでは、複数のレーンにまたがるオペランドの加算が必要になることがあるが、これは大規模なベクトル実装では望ましくない。例えば、2つの256ビット値又は512ビット値の加算では、1つのレーンから次のレーンに入力されるキャリーに対応するために64ビットの各レーンの加算が順次実行されるので、時間がかかる場合がある。
そこで、図4に示す冗長高精度アンカー(RHPA)フォーマットを使うことで、より高速に加算を実行することができる。HPAフォーマットと同様に、RHPA数は、処理回路14が各成分のビットの有意性を識別することを可能にするアンカー値を定義するメタデータを有する可変数の成分を含む。ここでも、アンカー値はプログラム可能であってもよい。RHPAの場合、メタデータは、HPAについて上述した方法のいずれかで、各成分の有意性を識別してもよい。しかしながら、RHPAフォーマットでは、ベクトルの隣り合うレーンが重複した有意性を有するビットが含む冗長な表現を用いて数値が表現されるため、計算されるレーンの数にかかわらず、一定時間の加算が可能となる。この冗長性により、加算器の長さを短くし、加算器間でキャリー情報を伝搬することなく、加算、集積、及び、乗算などの動作を行うことができる。これにより、データ値の処理が大幅に高速化される。
図4の(1)に示すように、RHPA表現を用いたMビットのデータ値は、N<MであるNビットからなるそれぞれのベクトルレーン(成分、要素、又は、一部分ともいう)に分割される。この例ではNは64ビットであるが、これは一例であり、他のレーンサイズ(32ビット又は128ビットなど)も可能である。各Nビット部分は、特定の数V個の重複ビットとN-V個の非重複ビットに分けられる。この例では、重複ビットの数Vは各Nビット部分で同じであるが、重複ビットの数が異なるNビット部分を持つことも可能である。
整数又は浮動小数点数がRHPAフォーマットに変換されると、非重複ビットの一部には元の整数又は浮動小数点数からマッピングされた非符号情報が入り、重複ビットは符号ビットでポピュレートされる。レーンベースの加算及び減算では、各レーンは、Nビットの符号付き2の補数のように動作するが(必要に応じて、非重複部分から重複部分にキャリーが伝搬する)、マルチレーンの観点から見ると、レーンは、より大きなPビット数の冗長な混合符号表現を形成する。図4の例では、4つのレーンがあるので、M=256となるが、レーンの数は、ハードウェアの実装形態及び/又は所与のRHPA数に定義されたメタデータに依存して変化する。
図4の(2)部は、(1)部で示したRHPA数の各ビットの相対的な有意性を示している。最下位レーンの重複ビットV[0]は、次のレーンの非重複ビットNV[1]のV個の最下位ビットと同じ有意性を有する。同様に、重複ビットV[1]とV[2]とは、非重複ビットNV[2]とNV[3]とのV個の最下位ビットと同じ有意性を有する。レーン間の有意性の重複は、RHPA数全体が、格納されている全ビット数Mよりも小さいPビット値を表すことを意味する。Vが各Nビット部分(チップ部分を除く)で同じである場合、
Figure 2022519258000008
となる。より一般的には、異なるレーンが異なる数の重複ビットを持つことができる場合、P=M-ΣVとなり、ここでΣVはトップレーン以外の各レーンの重複ビット数の合計である。
Pビット値の各重複部分では、そのPビット値の実際のビット値は、下位レーンの重複ビットVと上位レーンの非重複ビットNVの合計で表される(非重複ビットNVと下位レーンの重複ビットを加算することで発生し得るキャリーを考慮している)。したがって、RHPA値を等価な整数値に変換する1つの方法として、図4の(3)部分に示すように、各レーンの重複ビットを符号拡張し、上位レーンの非重複ビットに加算する(下位から上位へ、各レーンの加算後に重複ビットを調整する)方法がある。
RHPA数は、MビットのRHPA値を用いて、所与のPビット数を表現する方法が2つ以上あるという意味で、冗長性がある。例えば、最下位2レーンの重複を考えると、重複ビット数V=4の例では、Pビット値の対応するビットが1111であれば、下位レーンに重複ビットV[0]=0b0000、次の上位レーンに非重複ビットNV[1]=0b1111を配置するのが一つの表現方法となる。しかしながら、同じ値を表現する別の方法として、V[0]=0b0101及びNV[1]=0b1010、又は、V[0]=0b1111、NV[1]=0b0000などが考えられる。
なお、最上位レーンの重複ビットV[3]は、重複する上位レーンが存在しないため、実際には重複ビットではない。そのため、上位レーンは、すべて非重複ビットを有すると考えるのが有益である場合がある。したがって、いくつかのケースでは、トップレーンはすべて非重複ビットで形成されていると考えることができる(Pビット値の全体としての最上位ビットがトップレーンのMビット値の最上位ビットに対応するように)。
しかし、他の実施形態では、トップレーンにも重複ビットがあるものとして扱い、RHPAで表されるPビット数値の最上位ビットが、トップレーンの非重複部分(重複部分を除く)の最上位ビットに対応するようにすることが好ましい場合がある。この方法により、各レーンをより対称的に処理することができれば(トップレーンの処理方法を他のレーンに比べて変更する回数を少なくすることができれば)、回路の実装が容易になる可能性がある。
図4のように、Pビット数値を冗長化して表現することで、所与のレーンにおいて非重複部分の加算によるキャリーを、キャリーを次のレーンに伝播させる必要がなく同じレーンの重複部分に格納できるため、レーン間でキャリーなく、複数のRHPA数を加算することができる。各レーンで行われる加算は、単純に2つ以上のNビット符号付き整数を見て、従来のNビット2の補数加算を実行することで加算され、他のレーンの対応するNビット加算とは全く独立している。これは、Nビット加算をそれぞれ並行して実行することができるため、レーンの数にかかわらず、Nビット加算を実行する時間でMビット値全体を加算することができることを意味している。
実際には、少なくとも(2V-1-1)個のこのようなRHPA数は、レーン間のキャリーなしで加算することができ、非重複部分の加算によるキャリーは重複部分に集められる(異なる数の重複ビットを有するレーンがある場合、この表現におけるVは、重複ビットを有する任意のレーンにおける重複ビットの最小数となる)。(2V-1)番目の加算は、レーン間にキャリーを生成する可能性がある最初のものとなる(トップ重複ビットが符号ビットであるため、レーンのオーバーフローは、最上位から2番目の重複ビットから正又は負のオーバーフローがあったときに発生するが、これは、すべてのビットが0であるRHPA数から開始した場合、最小で2V-1個の更なる加算が実行された後に発生する可能性がある)。例えば、V=14の場合、単一のレーンからオーバーフローの危険性が生じる前に、少なくとも8191個のRHPA数を集積器に追加することができる(すなわち、合計で8192個の値を追加することができる)。これは、多数の入力値を加算することが一般的なハイパフォーマンスコンピューティングの分野で特に有効である。実際には、すべての加算がオーバーフロー部分へのキャリーを引き起こすわけではないので、Nビット部分のトップビットからオーバーフローすることなく、2V-1超の集積が可能な場合もある。
時には、Nビットレーンのトップビットからオーバーフローの危険性(又は実際のオーバーフロー)を引き起こすほどの十分な加算が実行された場合、重複削減動作を実行して、所与のRHPA値を、重複ビットが所与のRHPA値の重複ビットよりも小さい大きさを表す第2のRHPA値に変換し、より多くのキャリーを収容するために重複部分のビットスペースを効果的に空けることができる。また、RHPA数を整数又は浮動小数点などの他のフォーマットに戻す際にも、このような重複削減を実行することがある。しかし、実際には、このような重複削減動作はあまり必要ではなく、複数の入力であるMビットの加算をNビットの加算の時間で実行することができるため、RHPAは処理時間を大幅に短縮することができる。なお、「重複低減」といっても、すべてのレーンの重複ビットを低減しなければならないわけではない。少なくとも1つのレーンの重複ビットを低減すれば十分であり、重複削減の形態によっては、所与のレーンの重複ビットが大きくなる可能性もある。
HPA数の効率的な格納と動作
以下の説明では、使用されるHPA形式は、各部分が多数の重複ビットを含む上述のRHPA形式であると仮定するが、本明細書で説明する技術は、他のHPA形式、例えば、異なる部分が重複ビットを含まないHPA形式にも同様に適用可能である。以下、HPAという用語は、操作されるHPA値が冗長な形態であるか否かにかかわらず、操作されるHPA値を参照するために使用される。
先に述べた図4から明らかなように、HPA数(アンカーデータ値)の異なるHPA部分(アンカーデータ要素)は、単一のベクトルレジスタの異なるレーン内に配置されてもよい。しかし、これにはいくつかの問題がある。例えば、浮動小数点オペランドからHPA形式を作成する場合、浮動小数点オペランドのフラクションは、希望するアンカー値とともに、関連するベクトルレジスタ内のすべてのレーンに伝搬される必要がある。そして、各レーンには、アンカー値に基づいて異なるレーンアンカーが設定される。更に、ベクトルレジスタがHPA数の長整数値よりも大幅に大きい場合、例えば1024ビットのレジスタがHPA数200ビットの長整数を保持しているような状況では、ベクトルレジスタのリソースを無駄に使用することになり得る。また、ベクトルレジスタのビット数がHPA数の長整数のすべての部分を表現するのに不十分な場合、例えば、ベクトルレジスタの幅が128ビットであり、HPA数の200ビットの長整数を表す必要がある場合、処理に問題が生じることがある。
これから説明する例では、HPA数の様々な部分のために、別の格納構成が用意されている。具体的には、図5に模式的に示すように、HPA数の長整数は、複数のベクトルレジスタにまたがる共通のレーン内に格納されるように配置される。特に、各ベクトルレジスタがデータ値を格納するための複数のセクションを含むと考えられ得る一組のベクトルレジスタ100が配置されている。更に、複数のレーンがベクトルレジスタを通って(図5に示す向きで垂直方向に)延びていると考えることができ、最初の4つのレーンは、図5において参照数字102、104、106、108で示されている。そして、HPA整数値の異なる部分を異なるベクトルレジスタに格納することにより、HPA数の長整数を共通のレーン内に格納することができる。これは、4つの部分を含み、1つの部分がベクトルレジスタZ0、Z1、Z2及びZ3のそれぞれに格納されていると考えられる例のHPA整数110について模式的に示されている。更に、すべての部分が共通レーン102内に格納されている。HPA数の整数をこのように格納することで、これは多くの重要な利点を生じさせる。例えば、整数のサイズは、個々のベクトルレジスタの幅によって制約されない。更に、複数のHPA整数を様々なベクトルレジスタの異なるレーンに格納し、それらの整数値をSIMD方式で並列に処理できるため、ベクトルレジスタの非効率な使用を回避することができる。例えば、図5を参照すると、図5に示された各ベクトルレジスタが16レーンを提供する場合、16個のHPA数が4つのベクトルレジスタZ0からZ3内に格納され、各HPA数が異なるレーンを占めることになる。このように、この手法はスケーラビリティを大幅に向上させ、ベクトルの長さに依存しない手法を提供していることがわかる。これにより、この技術は、異なるサイズのベクトルレジスタを使用する様々なシステムで採用することができる。このようなHPA値の格納方法を採用することで、性能面で大きなメリットが得られるアプリケーションは数多くあるが、その一例として、アーム社が提唱するスケーラブルなベクトル拡張(Scalable Vector Extension:SVE)を採用したシステムがある。
アーム社は、科学的なHPCアプリケーションを対象とした64ビットISAのスケーラブルなベクトル拡張(SVE)を発表した。現在、SVEはHPAサポートを含んでいないが、SVEは進化し続けており、その命令セットにささやかな追加をいくつか実行することで、非常に高いHPA性能を実現することができる。SVEの「スケーラブル」とは、すべての実装形態で同じベクトル長を必要としないことを意味する。SVEベクトルは、64ビットレーンのペアを128ビットから2048ビットまでの任意の倍数でハードウェアに実装することができる。小型のチップでは128ビットのベクトルしか実装できないかもしれないが、スーパーコンピュータでは1024ビット又は2048ビットのベクトルが実装形態できるかもしれない。200ビットの整数を単一のSVEレジスタに保持することは、128ビットの実装では不可能であり、2048ビットの実装形態では無駄になるが、200ビットの整数を4つのレジスタに分散して保持することで、SVEのスケーラビリティを最大限に活用し、小型から大型まであらゆるハードウェアの実装でうまく機能する。また、プログラマは、必要に応じて短整数又は長整数を使用することができる。100ビットの整数は2本のベクトルレジスタのレーンに、500ビットの整数は10本のベクトルレジスタのレーンに収まる。
性能と面積の観点から、SVEは64ビットレーンで演算を実行する。我々は、iという大きなHPA数を、より小さな冗長な部分に分割してHPAの加算を行うことを提案する。64ビットの各レーンには、iの指定された部分(例えばp=50ビットとするが、これはプログラム可能である)が格納され、残りの64-pビットはレーン内のキャリーを保持するために使用される。この残りのビットは、次の最上位レーンのlsbと同じ数値の重みを持つことから、「重複」ビットと呼ばれている。レーン内の加算は、通常の64ビット整数の加算である。264-pサイクルごと(つまりp=50の場合は約16,000サイクルごと)に、レーンのオーバーフローを防ぐための冗長性排除ステップが必要になることがあり、また、すべての計算の最後に、冗長性のない答えを得るためにレーンごとの処理が必要になる。
FP入力fをHPA数フォーマット(i,a)に変換するために、各64ビットレーンはfの指数を調べ、アンカー<aと比較し、fの仮数の一部を検討中のiの部分に追加すべきかどうかを判断する。この比較は、該当するすべてのレーンで並行して行うことができる。fの仮数は2つの部分(FP64積の場合はpの値に応じて3つの部分)にまたがるかもしれないが、各部分は独立して作成し、動作することができる。
FP32数を、aを0に、pを50に選択して、2つの部分のHPAに変換する例を以下に示する。この例では、FP32数はベクトルレジスタレーンの「右側」の最下位32ビットを占めるものとし、HPA数は64ビットのレジスタレーン(50ビット値と14個の重複ビットを含む)を占めるものとする。FP数の場合が下記の場合、
f=+1.0110 1011 1010 0010 1111 011×260
FP32仮数、f[23:0]=1 0110 1011 1010 0010 1111 011
HPA数の部分1は、調整部分アンカー=50となり、以下のように計算される。
i[1]=f[23:0]を(指数-23)だけ左シフトしたもの-部分アンカー=37-50=-13位
(-ve左シフトは、+ve右シフト->i[1]={{14 0’s},{39 0’s},f [23:13]=1 0110 1011 10})
(23による指数の調整は、浮動小数点値の指数が23ビットのフラクションの最上位ビットの左側にある暗黙の小数点の有意性を表すのに対し、アンカーはフラクションの最下位ビットの有意性を表すという事実を考慮している)。
HPA数の部分0は、部分アンカー=0に調整され、以下のように計算される。
i[0]=f[23:0]を(指数-23)だけ左シフトしたもの-部分アンカー=37-0=37位。
->i[1]={{14 0’s},f[12:0]=10 0010 1111 011,{37 0’s}}
この結果、HPAフォームは以下のようになる。
Figure 2022519258000009
一般的に、HPA結果を単一のFP結果に正しく丸めるには、キャリーと丸めの情報をレーンごとに伝搬させる必要があり、連続的な処理が必要である。これには数サイクルが必要であるが、集積ごとに一度だけ実行すればよい。また、p≦53の場合は、複数の64ビットレーンを占める非冗長なHPA数をFP64数のベクトルに並行して変換することもできる。その後、得られたベクトルを「再正規化」して、最上位要素が0.5ulpの精度で完全なHPA数を表すようにする。
以上、高次でのHPA処理の基本について説明したが、次に、SVEでHPA集積器をどのように実装するかについて、より詳しく説明する。
SVEは、現在の最大2048ビットまでのk×128ビットのベクトルレジスタ長をサポートし(即ち、1≦k≦16)、また、「ベクトル長非依存」(VLA)処理に基づいており、これにより、異なるSVEベクトルレジスタ長を有する異なるCPUはすべて、同じSVEプログラムを実行することができる。SVEプログラムは、システムレジスタから使用可能なベクトル長を読み取り、使用可能なベクトルレジスタ長を利用するように「自己調整」する。その結果、SVEプログラムは、CPU処理とともに、使用可能なベクトルハードウェアの長さがサポートできる平行グラニュールの分だけ、128ビットのグラニュール内で実行される。
図5を参照して前述したように、ベクトル長に依存しないことを実現するために、HPA数を複数のSVEレジスタに分散して配置することができる。各レジスタは、異なるHPA数の同じ有意性のビットを保持してもよい。つまり、各レジスタは、HPA数における各部分の位置に対して調整された数のアンカーの値を与える有意性と関連している。
先ほどの200ビットのHPA数の例に戻ると、各部分にp=50ビットが保持されている場合、HPA数のアンカーが-80であれば、4つの部分の有意性情報は、64ビットの部分ごとに14重複ビットとともに(+70,+20,-30,-80)となる。なお、図5の例のように、HPA数の個々の部分を連続したレジスタに格納する必要はない。
HPA数をこのように配置する主な利点は、長いHPA数よりも短いSIMD実装(128ビットのベクトルなど)にまたがる場合でも、HPA数(又は長整数)をSIMD方式で処理できることである。副次的な利点は、より長いSIMD実装(例えば1024ビットのベクトル)が、各ベクトル内にずっと短いHPA数を格納することで無駄にならないことである。十分な数の整数又はHPA数があれば、SVEの実装形態の長さにかかわらず、ベクトルは十分に活用される。
また、HPA数を複数のレジスタに配置することで、FP数のベクトルをそれぞれの64ビットレーンに加算し、HPA演算を高度に並列化することができる。更に、大量のFP数をメモリからロードする際には、シンプルで効率的な連続したベクトルのロードになる。更に、このHPA数の配置では、複数のHPA整数を低次ビットから高次ビットまですべて並列に処理できるため、既存のSVE命令を使用して重要なHPA計算(冗長性の排除又はHPA数の加算など)を実行することができる。また、この方式では、複数のHPA数を高次レーンから低次レーンへ、又は、低次レーンから高次レーンへとすべて同時に処理できるため、HPA数のFPへの変換又は再正規化も高速化される。
図6は、図5で説明した方法で配置されたHPA数をSIMD方式でどのように処理することができるかを示している。この例では、一連の浮動小数点数がソースベクトルレジスタ165にロードされていると仮定している。この例では、各浮動小数点数は倍精度浮動小数点数であり、したがって、各浮動小数点数はソースレジスタ165内の64ビットセクションを占めると想定される。
複数の64ビットレーン152、154、156は、ベクトルレジスタのセットを通って延びると考えられ、別個の変換及び処理回路170、172、174は、各レーンに関連付けられる。回路170、172、174は、デスティネーションレジスタ180に格納されるべき対応する結果部分を生成するために、一度にHPA数の単一部分を動作するように配置される。先に説明した図5から、HPA結果数の各結果部分が異なるデスティネーションレジスタを占有し、それに応じて、回路がHPA数の異なる部分を処理すると、対応する結果部分が異なるデスティネーションレジスタに書き込まれることが理解されるであろう。
後に詳述するように、メタデータは、変換及び処理回路170、172、174がその変換及び処理ステップを実行する際に、参照のために提供される。特に、この例では、メタデータは、各レーンについて、更なるソースレジスタ160内に格納される。レーンのメタデータ内では、そのレーン内で処理されたHPA数の各部分に対して、メタデータ部分が提供される。メタデータは、対応する部分に関連する有意性(調整済みアンカー)を識別し、重複ビットの数などの他の情報を識別してもよい。回路170、172、174がHPA数の特定の部分を処理しているとき、それらの回路は、ソースレジスタ160内に保持されているレーンメタデータから、関連するメタデータ部分を取り出す。
図6に示す例では、各変換処理回路は、入力浮動小数点オペランドと、処理されるべきHPA数の部分についての関連するメタデータ部分と、を受け取り、その後、例えば、表7に示す例を参照して先に説明した技術を用いて、入力浮動小数点オペランドから関連するHPA部分を生成する。生成されたHPA部分は、その後、結果レジスタ180に直接格納することができ、あるいは、関連する結果部分を生成するために、何らかの処理機能を受けてもよい。例えば、一実施形態では、集積動作を実行することができ、ここでは、現在のHPA結果部分がデスティネーションレジスタから取得され、その後、デスティネーションレジスタ180の関連セクションに書き戻される更新された結果部分を生成するために、入力浮動小数点オペランドから生成されたHPA部分と集積される。
このようなアプローチにより、複数の反復の実行を介して、集積された結果を表す結果部分を生成するために、各レーン内で複数の集積動作を並行して実行することができることがわかる。また、このプロセスは、各レーン内に一連の結果部分を生成するために、HPA数の各部分について繰り返すことができ、これらの結果部分は集合的に結果HPA値を表す。
1つの例示的な構成では、HPA処理は、幅広い範囲の、アンカー、レーンの重複、及び、レーン型又は上位、下位、若しくは中間位置に関する情報(「メタデータ」)が必要である。HPA数の幅は通常200ビット以下で、アンカーの範囲はIEEE FP32と似ているため、HPA集積器は通常4つ以下の部分で構成されることが予想される。そして、4つの64ビット部分を横断する200ビット集積器のHPAメタデータは、図7に示すように、4つの16ビットフィールドとして編成することができる。
特に、ソースレジスタ160を指定することができ、ここでは、各レーン(例えば64ビット)内に、参照数字162、164、166、168で示されるように、4つのメタデータ部分が提供される。各メタデータ部分は、集積器の結果の関連部分のメタデータを提供することができる。図7の拡大図に示すように、有意性(調整済みアンカー)情報は、例えば9ビットを使用して第1のサブパート192に含めることができ、一方、重複情報は、例えば5ビットを含む第2のサブパート194にキャプチャすることができる。また、必要に応じて、レーン型情報を第3のサブパート196にキャプチャし、関連する部分がトップ部分(最上位ビットを表す)、ボトム部分(最下位ビットを表す)、又は中間部分のいずれであるかを識別することもできる。
任意の特定のレーン内では、集積されるHPA値は、すべて同じアンカーを持つように配置され、それに応じて、あるレーンのメタデータは、そのレーン内で処理されるすべてのHPA値に等しく適用される。
基本的には、レーンごとに異なるメタデータを指定することで、あるレーンで処理された値と別のレーンで処理された値とが同じアンカーを有する必要はない。しかし、すべてのレーン内で処理される値のすべてが同じアンカー値を持つように配置されることがしばしばあり、この場合、64ビットのメタデータは、ベクトルレジスタ160全体に格納され、複製することができる。これにより、各レーンで生成された様々なHPAの結果は、当然ながら、単一のスカラHPAの結果を生成するために、互いに容易に集積することができる。
このような構成では、メタデータを参照する必要のあるHPA用のSVE命令は、処理されるHPA部分の特定の16ビットのメタデータへの2ビットポインタとともにメタデータレジスタを指定することができる。
なお、図7は、メタデータを提供するための1つのメカニズムを示しているが、メタデータをより圧縮して格納するための別の仕組みを考案することも可能であり、例えば、8レーン分のメタデータを64ビットで格納することもできる。特に、「レーン型」フィールドを必要としなくてもよいし、限られた数の利用可能な構成を反映させるために、ovlpと有意性フィールドのサイズを低減してもよい。
HPAの重要な動作は、FP数をHPAフォーマットに変換して加算することである。この動作は、加算されるすべてのFP数に対して行われる可能性があるが、他のHPA動作(FPへの変換、HPAの冗長性の排除など)は、数千分の1の頻度で実行される。そのため、FP数の変換と加算を効率的に行うためのハードウェアサポートが望まれる。
図8は、ベクトルユニットにわたって繰り返されるこの動作のための可能な64ビットのデータパスを示しており、図8はそれゆえ、図6に示された変換及び処理回路170、172、174のそれぞれのための例示的な構成をより詳細に表している。
入力浮動小数点データ210は、符号部分212、指数部分214、及びフラクション部分216で構成される。そして、レーンについて保持されているメタデータから関連するメタデータ部分をメタデータ部分200として抽出し、これには、レーン型フィールド202、重複フィールド204、及び、有意性フィールド206が含まれる。OR機能220は、指数のビットに対してOR動作を実行して、仮数の最上位ビットを生成し、これをフラクションビット216にプリペンドして、仮数を形成するようにする。特に、指数がゼロでない場合、これは浮動小数点数が通常の浮動小数点数であることを示しており、それに応じて、仮数の最上位ビットは論理1の値となる。しかし、指数のすべてのビットがゼロである場合、これは非正規値を示し、それに応じて、仮数の最上位ビットはゼロに設定されるべきである。
減算ブロック222は、例えば、表7を参照して前述した技術を使用して、指数214から有意性206を減算し(指数のバイアスとフラクションのワード長のために必要に応じて調整される)、浮動小数点の仮数を適切な量だけシフトするようにシフト回路224を制御するために使用されるシフト量を(適切に右シフト又は左シフトのいずれかを実行しながら)生成するように配置される。
次に、AND回路226は、重複情報204を受け取り、シフト回路からの出力を指定された重複ビット数(64-pに等しい)でマスクする。その後、XOR回路228は、符号値212によって示されるように、浮動小数点数が負であった場合には、AND回路226からの出力に対して2の補数関数を実行する。この時点で、所与の有意性及び重複量を有する特定のHPA部分に関連する入力浮動小数点数のビットは、2の補数として利用可能であり、加算器回路230への1つの入力として提供されることができる(加算器はまた、浮動小数点オペランドが負である場合、1のキャリーイン値を取る)。その結果、関連するHPA部分は、入力された浮動小数点値から「オンザフライ」で生成することができ、その後、対応する結果部分を生成するために、適切な処理動作を受けることができることがわかる。
図示の例では、処理動作が選択的加算動作であることを想定している。特に、AND回路240は、レジスタ235に保持された現在の値を、加算器230への第2の入力として伝搬して戻すために選択的に使用することができ、レジスタ235に記憶された更新された結果部分を生成するために、前の結果部分を変換回路から出力された入力オペランド部分と加算することができる。64ビットの加算器及びレジスタを図示の方法で組み込むことにより、バックツーバックのHPA変換・集積命令のパイプライン実行をサポートする。
図8に示された回路を上述の動作を実行するようにトリガすることができる方法はいくつかあるが、一実施形態では、図8の上述の機能を開始するために単一の命令が使用される。このような命令は、FP-to-HPA変換・加算命令と呼ばれる場合がある。
FP-HPA変換・加算命令のオペコード(ニーモニック「FCVTH{A}」、{A}はオプションの集積を示す)は、一例において、FPソースレジスタ、メタデータレジスタ、デスティネーション集積器レジスタ、及び、メタデータレジスタのサブフィールドを選択するためのインデックスを含む。これは、オペコードが参照するベクトルレジスタの数を3つまでとするSVE ISAの設計原則に合致している。
既存のSVE命令の短いシーケンスを作成して、他の重要なHPA動作を実装することもできる。
部分オーバーフローを回避するためには、定期的にHPA数の冗長性を排除することが重要である。これは、単純に下位のHPA部分の重複領域に集積されたキャリービットを、次に上位のHPA部分のLSBに加算するだけで実現できる。SVEでは、これは3つの命令手順で実現され得る。
(i)下位部分をp個分算術右シフトする。
(ii)シフトされた重複ビットの次の上位のHPA部分に加算する。
(iii)かつ、下位のHPA部分のpから導出されるマスクを用いて重複ビットをAND immediateして強制的にゼロにする。
この手順は、最下位のレーンから順に、隣接するHPA部分のすべてのペアに適用することができる。
また、以下の図13及び図14を参照して説明するように、重複伝搬及び重複削除のための専用の命令を提供してもよい。
FP数の大きなブロックが集積された後、その結果は複数のSVEレーンに配置された複数の集積器に格納される。その後、これらの集積器を加算し、同じインデックスを持つHPAレーンの各ベクトルに対してスカラ結果を返してもよい。SVEでは、複数のHPAレーンに保持されている集積器に対してベクトル低減を実行して、スカラHPAの結果を形成することで、これを容易に実現できる。結果として得られたスカラHPA数には、各部分の重複領域にキャリービットが含まれている可能性があるため、FP形式に変換する前に、スカラHPA数に対して冗長性排除ルーティンを実行してもよい。
最後に、再現可能なHPAの加算結果を浮動小数点フォーマットに変換する。HPA部分を正規化されたFP64数に正確に変換するためのアルゴリズム(つまり、p≧53と仮定した場合)は以下のとおりである。
(i)CLZ(count leading zeroes:カウントリーディングゼロ)を実行し、先頭の「1」の位置を特定する。
(ii)指数を有意性+(63-CLZ)+FP64指数バイアスとして計算する。
(iii)最高位のHPA部分を除くすべての部分について、FP64の結果のビット[63]を0に設定する。FP64の結果のビット[62:52]を計算された指数に設定する。バイアス指数>0の場合、HPA部分をCLZ-11個分論理的に左シフトし、そうでなければFP64の結果を0に設定する。
(iv)最高位のHPA部分のみの場合:その部分が負であれば、FP64の結果のビット[63]を1に設定し、その部分を否定して正の2の補数を得る。FP64の結果のビット[62:52]を計算された指数に設定する。バイアス指数>0の場合、HPA部分をCLZ-11個分論理的に左シフトし、そうでなければFP64の結果を0に設定する。
この変換アルゴリズムは、HPAレーンごとに通常15個のSVE命令で実装することができる。
なお、必要に応じて、上記の手順(iii)と(iv)を以下のように組み合わせて、最上位以外の部分が負になる場合をカバーすることもできる。
(iii)部分が負である場合、FP64の結果のビット[63]を1に設定し、部分を否定して正の2の補数を得る。FP64の結果のビット[62:52]を、計算された指数に設定する。バイアス指数>0の場合、HPA部分をCLZ-11個分論理的に左シフトし、そうでなければFP64の結果を0に設定する。
必要に応じて、最終的な集積値を可能な限り正確に表す単一のFP64結果を作成することができる。これは、例えば、Y.Hida、X.S.Li及びD.H.Bailey、「Algorithms for Quad-Double Precision Floating Point Arithmetic」、Proc.15th IEEE Symposium on Computer Arithmetic、Vail CO、2001年6月、155~162によって提案されたアルゴリズムを適用することによって達成することができる。
レーン一番下のペアから順に、Fast2Sum動作を次の上位レーンに連続して適用し、Fast2Sumで得られた上位の合計を算出する。次に、今得られたばかりの最上位の値のペアを下に向かって作業し、次の下位の値とFast2Sumから得られた下位の合計に連続して適用するプロセスを繰り返する。このようにして得られたFP64数のベクトルの最上位要素は、HPA数から0.5ulp以内であることが保証される。
l個の部分からなるHPA集積器は、<l×pビットのワード長を持ち、l個のSVEベクトルレジスタを占有する。k×128ビットのSVEベクトルユニットで実行されるFCVTH{A}命令は、2k個のFP64又は4k個のFP32数を変換して、2<k個のHPA集積器の一部分に集積することができる。FCVTH{A}命令は完全にパイプライン化されているので、n個のFP64加算のブロックを2k p×lビットのHPA集積器にn×(l/2k)+1サイクルで加算することができる。lとkとの典型的な値は2~4(ただしkは16まで可能)なので、l=kとすると、n個のFP64数(又は2n個のFP32数)をk 個の並列 集積器にn/2サイクルで加算することができる。一方、アーム社のCortex-A72では、和が順序に行われなければならず、依存性のあるFMA(Fused Multiply-Add:融合乗算・加算)では、追加の間に3サイクルが必要であるため、同じ再現性のある集積を行う場合、3nサイクルが必要になる。このようにHPAは、FP32の集積処理において、従来のFP処理に比べて約12倍の高速化を実現している。
上述したように、HPAの冗長性は定期的に排除又は解決する必要がある。上述の方法は、3×(l-1)命令を必要とし、264-p回の集積ごとに1回実行する必要があるが、典型的な値であるp=50の場合、これは0.1%未満のわずかな処理オーバーヘッドになる。同様に、HPA集積器のベクトルをスカラフォーマットに低減し、スカラHPAの冗長性を解消し、スカラHPAを変換してFP64フォーマットに戻す場合、n≒10以上のn個のHPA集積のための≒n/4サイクルと比較して、代表的な値であるlに対して、l+3×(l-1)+15×l≒19×l-3=35-73の命令が必要となる。
図9は、アンカーデータ要素が2の補数の一部を表すか、又は、特殊値を表すか、を指定する型情報を含むアンカーデータ要素の符号化の別の例を示している。なお、図7に示すように、アンカーデータ要素の型情報は、メタデータのレーン型情報196とは異なる。この符号化では、最上位ビット(この例ではビット63)を用いて、要素が2の補数の一部を表す標準的なHPAデジットを表しているのか、それとも特殊値を表しているのかを示している。最上位ビットが0の場合、HPA要素は2の補数を表す標準的なHPAデジットを表し、重複部分のビットは、上述した例と同様に、HPA値の次の上位桁の最下位ビットと同じ有意性を持つ。
しかし、要素の最上位ビットが1の場合、その要素は、正の無限大、負の無限大、非数(NaN)、及び、飽和値の中から選択されたHPA特殊値を表す。最上位ビットが1の場合、次の2つの最上位ビット(例えば、図9に示すように、ビット61及び62)は、表された特殊値の特定の型を表す。図10は、標準的なHPAデジットと、それぞれの型の特殊値のためのビット63から61の符号化を示している。
したがって、最上位ビットが0の場合、次の2つのビットは、HPAデジットの重複ビットの一部を表している。また、重複ビットを持たない非冗長なHPAバリアントを使用する場合は、次の2ビットがHPAデジットの非重複ビットを表すこともある。これにより、従来は、どの特定の型の特殊値を符号化するかを示すために使用していたビットを、2の補数のビットを表現するために再利用することができ、効率的な符号化が可能になる。
最上位ビットが1、最上位3ビットが0の場合、HPA要素は無限大を表す。2番目の最上位ビットは、無限大の符号を表す。したがって、要素のビット63~61の符号化を110とすると、負の無限大を表し、符号化を100とすると、正の無限大を表し得る。また、正の無限大と負の無限大の符号化を入れ替えることも可能である。HPA要素が正又は負の無限大を表すと示されている場合は、浮動小数点値のHPAフォーマットへの変換を含む動作が少なくとも1回行われる動作のシーケンスで生成され、その浮動小数点値が正又は負の無限大であったことを意味する。
要素の最上位3ビットが101を示している場合、その要素は非数(NaN)を表す。これは2つの方法で生じ得る。NaNであった浮動小数点値の変換を含む一連の動作で要素が生成され得る、あるいは要素が2つのHPA値の加算に依存し得る、のいずれかであり、後者の場合、HPA値の一方が正の無限大、他方が負の無限大であった。
一方、HPA要素の最上位3ビットが111と符号化されている場合は、その値が飽和HPA値であることを表している。飽和HPA値は、浮動小数点領域では類例がない。正又は負の無限大は、HPA値が正又は負の無限大の浮動小数点値を変換した結果であり、その浮動小数点値は、浮動小数点フォーマットで表されるよりも大きなサイズの数をもたらす計算から導出されたものであることを示す一方で、飽和HPA型は、一連のHPA動作に入力された浮動小数点数が、NaN又は無限大ではない非特殊数であったにもかかわらず、HPA動作自体によって飽和が生じたことを示していてもよく、例えば、HPA値で表される有意性の範囲を設定したアンカーメタデータがそのようであり、入力された浮動小数点値及び/又はその処理結果が、メタデータで定義された範囲外の数を生成してしまった場合である。
例えば、(図7に示すレーン情報196で示される)HPA値の最上位のHPA要素に作用するHPA動作の結果、最上位の重複ビットからオーバーフローした場合に、飽和型が発生する可能性がある。あるいは、最上位のHPA要素とHPA値の重複ビットとが、HPA値で表される2の補数の一部とみなされない場合、HPA値の最上位の要素が最上位の非重複ビットから最下位の重複ビットまでオーバーフローした場合に、飽和型が発生する可能性がある。定義によれば、トップ重複ビットからオーバーフローした場合、トップの2つの重複ビットは既に両方とも1と等しく、オーバーフローによって要素の最上位ビットが0から1に切り替わるため、オーバーフロー自体によって、対応する要素がトップの3つのビットの型情報が111と等しくなるように設定される可能性があるので、HPA値のトップ要素の重複ビットが、HPA値で表される全体の2の補数の一部とみなされる場合、ビット63~61で飽和型を111と符号化することは、定義上、特に有用である。これにより、オーバーフローを検出し、それに応じて型情報を設定するための特定の回路を必要としない場合があるので、型情報を設定するためのロジックを簡素化することができる。一方、重複ビットがHPA値で表される2の補数の一部とみなされない場合は、いくつかの追加ロジックが、非重複上位ビットから重複領域へのオーバーフローを検出し、それに応じて型情報のトップの3ビットを設定することができる。
また、HPA動作でアンダーフローが発生した場合には、飽和型を使用することもできる。例えば、HPAフォーマットに変換される浮動小数点値が、HPAフォーマットで正確に表すためには、アンカーメタデータで定義されたHPAフォーマットを用いて表すことができる最下位ビットよりも下位のビットが必要である場合、これは、アンダーフローとして検出され、飽和データ型が示されてもよい。また、オーバーフローとアンダーフローとを区別する型符号化を使用することもできる。しかし、実際には、アンダーフローは、単に精度の低下につながるが、オーバーフローは、誤った処理結果が返される可能性があるため、アンダーフローよりもオーバーフローがシグナルとして重要である場合がある。したがって、場合によっては、型情報で示されるデータ型を使用してアンダーフローを通知しないという選択をすることもできる。
一般に、HPA値の飽和型の表示をサポートする型情報を提供することで、HPA動作のシーケンスの後、プログラムコードは、その動作の結果として生じる任意の特殊値が、入力された浮動小数点数が特殊数であることに起因するものなのか、HPA処理に起因するオーバーフローに起因するものなのかを判断することができる。これは、2つ目のシナリオでは、プログラムコードがアンカーメタデータを調整し、有効な結果を維持するために動作のシーケンスを繰り返すことができるため、有用であるが、一方、元の浮動小数点値に含まれる特殊数が原因で特殊値が発生した場合は、異なるアンカーメタデータを使用してHPA処理を繰り返しても、特殊でない結果は得られない。
図10は、効率的な符号化方式を提供するのに有効な、型情報の1つの特定の符号化を示しているが、他の符号化方式を使用することも可能である。
図9は、単一のHPA要素に対する符号化を示している。HPA値が2つ以上のHPA要素で構成されている場合、それらのHPA要素のうち1つでもトップビットが1に設定されていれば、そのHPA値は特殊値であると考えられる。実際には、図5に示すように、HPA値が複数の異なるベクトルレジスタにまたがってストライピングされているため、各HPA処理命令は一度に1つの要素しか見ることができず、HPA要素の1つを処理する際に、同じベクトル値の他のHPA要素の1つが特殊値又はオーバーフローを検出することが明らかにならない場合がある。また、入力された浮動小数点値が無限大又は非数である場合、その浮動小数点値が変換されたHPA値のすべての要素が特殊値を示すように設定される可能性があるが、HPA処理によって飽和が生じた場合は、例えば、HPA値の最上位のHPA要素でのみ飽和型が示される可能性がある。
また、2つのHPA要素を加算する場合には、加算される2つの要素の型情報に応じて、結果要素の型情報を設定することができる。図11は、第1オペランド及び第2オペランドのデータ型に応じて発生し得るデータ型の違いを示す表である。表の左側の列は、第1オペランドのデータ型の選択肢の違いを示し、表の上側の行は、第2オペランドのデータ型の選択肢の違いを示している。省略形Numは、標準の2の補数、即ち要素の最上位ビットが0の場合のデータ型を表す。
図11に示すように、入力されたオペランドの両方が標準の2の補数の場合、結果は別の標準の2の補数、又は、HPA値の最上位要素からオーバーフローした場合の飽和値のいずれかになり得る。加算される2つのオペランドのうち、少なくとも1つが特殊値である場合は、結果も特殊なものになる。したがって、HPA要素の最上位ビットが1に設定されると、その要素に依存する後続のHPA要素はすべて最上位ビットが1になるように生成されるという意味でスティッキーであり、動作のシーケンスの最後に特殊値の発生を検出することができる。
図11に示すように、加算されるオペランドのいずれかがNaNである場合、その結果もNaNになる。また、加算されるオペランドの一方が正の無限大であり、他方が負の無限大である場合もNaNとなり得る。加算されるオペランドの一方が正の無限大であり、他方が負の無限大又はNaN以外である場合は、結果は正の無限大となる。同様に、オペランドの一方が負の無限大であり、他方が正の無限大又はNaN以外である場合は、結果は負の無限大となる。最後に、オペランドの少なくとも1つが飽和値である場合、他のオペランドが標準の2の補数又は飽和値のいずれかであれば、結果も飽和される。
場合によっては、特定の結果を引き起こすHPAの加算に応じて例外をトリガすることがある。加算される2つのオペランドが標準の2の補数であったにもかかわらず、オーバーフローが発生して結果が飽和した場合、オーバーフロー例外が通知されることがある。HPA値の最上位要素以外のHPA要素では、特定の数のHPA加算が実行された後に、その数は、その数のHPAの追加によってトップ重複ビットを超えるオーバーフローが発生しないように選択されプログラムコードが重複伝搬動作をトリガする必要があるため、この例外は発生しないはずである。ただし、最上位要素については、アンカーメタデータが正しく設定されていないと、オーバーフローが発生する可能性がある。
符号付き浮動小数点の無限大とは異なる加算を行い、その結果がNaNになった場合は、無効なオペランド例外が発生する可能性がある。
また、浮動小数点からHPAへの変換時又はHPAから浮動小数点への変換時には、表される特殊値の種類に応じて、他の種類の例外が発生する可能性がある。
図12は、図9から図11の例のように符号化された特殊値を考慮する場合に、HPA加算を実行するための回路ロジック300の一例を示す。回路ロジック300は、63ビット加算器302及び特殊値検出回路304を含む。加算器302は、値が特殊値であるかどうかを示す最上位ビットを除いて、加算される2つのHPA要素のそれぞれの下位63ビットを受信し、63ビットの2つのセットを加算して63ビットの和を生成し、その和の前に0の単一ビット値を付けて非特殊値として符号化された64ビットの結果を生成し、マルチプレクサ308に供給する。
加算器による加算と並行して、特殊値検出回路304は、加算される各HPA要素の型情報(上位3ビット)を受信する。特殊値検出回路304は、型情報をチェックして、特殊値がある場合にはどの特殊値が表されているかを判断し、図11の表に示される組み合わせに基づいて、ロジック304は、結果が特殊値を表すべきかどうかを判断し、表すべきである場合、どの型の特殊値を符号化すべきかを判断する。結果が特殊値である場合、特殊値検出回路は、2つのオペランドの型に基づいて選択された、図11の表に示されている特殊値の型に従って符号化された上位3ビットを有する64ビット結果306を生成する。特殊値が発生すると、HPA値は範囲内の有効な2の補数を表すことができなくなるため、結果が特殊な場合、下位61ビットのビット値は任意の値を取ることができ、したがって、下位61ビットでどの情報を指定するかは重要ではない。
マルチプレクサ308は、特殊値検出回路304によって提供された64ビット値と、0に等しい最上位ビットを含む加算器によって提供された64ビットとの間で選択して、非特殊数を示す。マルチプレクサは、結果が特殊であるべきかどうかを示す特殊値検出回路によって提供される値310に基づいてこの選択を行う。実際には、この信号310は、図12の点線に示されているように、単に64ビット値306の上位ビットであり得る。
したがって、特殊値検出回路304は加算器自体と並列に動作するため、ロジックは、標準の飽和整数加算器と同じロジック深さを有するため、高速である。
結果が特殊値である場合、特殊値検出回路304はまた、結果に応じて様々な浮動小数点ステータスフラグを設定することができ、それは浮動小数点動作の特性を示すことができる。これにより、HPA処理は、処理が完全に浮動小数点演算を使用して実行された場合に予想される処理を反映することができる。例えば、これらの浮動小数点フラグは、アンダーフロー又はオーバーフロー例外をシグナリングする必要があるかどうか、又は無効な動作があったかどうかを示すことができる。
図12は、単一レーンの加算を示しているが、図6に示されている変換動作のベクトル化と同様に、ベクトルレジスタのペアの対応するレーン内のHPA要素のそれぞれのペアに対して個別の加算が実行される場合に、この回路ロジックは各ベクトルレーンに提供され得ることが理解されるであろう。
重複伝搬動作を実行するときに、特殊HPA値を考慮することもできる。図13は、3つのベクトルレジスタを入力として指定するベクトル命令である重複伝搬命令を示す。ベクトルレジスタZduは、同じHPA値の隣接するHPA要素のペアの上位HPA要素を表すと予想されるHPA要素を提供し、また、ペアのその上位HPA要素の更新値を格納するデスティネーションレジスタとしても機能する。ソースベクトルレジスタZlは、各レーンがZduの対応するベクトルレーン内の上位要素に対応する要素のペアの下位要素を提供する、ベクトルである。ベクトルレジスタZmは、ベクトル処理の各レーンにアンカーメタデータを提供する。一般に、レジスタZm内のアンカーメタデータは、入力レジスタZl内で指定された各ペアの下位HPA要素に関連付けられたアンカーメタデータであるべきであるが、重複ビットの数が各ペアの上位HPA要素と下位HPA要素で同じである場合、各ペアの上位要素にアンカーメタデータを提供するレジスタを使用することも可能である。したがって、3つのレジスタの各ベクトルレーンは異なるHPA値に関連し、かつそのHPA値に対して隣接する要素Li、Uiのペア及び対応するメタデータMiを指定する(この例では、4つのベクトルレーンがあるため、i=0...3であるが、他の例ではレーン数が異なる可能性がある)。
したがって、ベクトル処理の各レーン内で、所与のHPA値の隣接する要素の対応するペアの上位要素Li及び下位要素Ui、及びそのペアに関連付けられたメタデータMiに基づいて重複伝搬動作350を実行して、更新値Ui’を生成し、デスティネーションレジスタZdu内の対応する要素位置に格納する。
重複伝搬関数350の各レーン内で実行される動作は、図13の下部に示されている。図示のように、動作は、メタデータレジスタZmの対応するレーンMi内のメタデータに依存する整列シフト量だけ、対応する要素のペアの下位要素Liを右シフトすることを含む。ベクトル内の整列シフトのサイズは、各ペアの下位要素Li内の非重複ビットWの数に対応する場合がある。異なるベクトルレーンが完全に異なるHPA値に対応するため、それらの異なるレーンのメタデータが異なる数の重複ビットを指定する場合、異なるベクトルレーンは異なるサイズの整列シフトを有する可能性がある。整列シフト量は、重複ビット数を符号化する方法に応じて異なる方法で判断することができる。非重複ビットの数がメタデータによって直接指定された場合、これは単に整列シフトとして直接使用することができる。しかし、メタデータが重複ビットVの数を指定する場合、それはデータ要素中のビットNの総数と重複ビットVの数から導出でき、その結果、1ビットが値が特殊であるかどうかの指示子として使用される場合、整列シフトサイズSHがN-V-1に等しくなる。
したがって、ペアの下位要素をWビットだけ右シフトした後、シフトした値をペアの対応する上位要素Uiに加算して、更新値Ui’を生成し、デスティネーションレジスタの対応するレーンに格納する。したがって、上位要素及び下位要素のいずれも特殊数ではない場合、上位要素Ui’の更新値は、非重複ビットが、ペア内の下位要素の重複ビットと上位要素の非重複ビットとの合計に等しくなるように設定される。
したがって、下位要素Liの最上位ビットが1であるか、又は上位要素Uiの最上位ビットが1であり、これらの要素のいずれかが特殊HPA値であることを示す場合、上位要素は、シフト及び重複ビットと非重複ビットの加算を実行せず、変更されないままにすることができる。これにより、必要なロジックの量を減らすことができる。したがって、特殊値及び特殊値に隣接する要素は、キャリー消去中に変更されないままにすることができ、その結果、特殊値が発生したという事実をHPA動作のシーケンスの最後に検出することができる。HPA数の任意の1つ以上の要素が特殊値である場合、HPA数全体は数値的に無効であるとみなされる可能性がある。
あるいは、特殊値の発生を処理するための別の手法は、ペアの下位要素Liが特殊である場合、下位要素Liからの型情報を更新された上位要素Ui’の型情報にコピーして、デスティネーションレジスタZduに書き込むことであり得る。この手法では、HPA値の隣接する要素の連続するペアに対してキャリー伝搬命令を実行することによって一連のキャリー消去が実行されると、特殊値のシグナリングが徐々にトップレーンに伝搬される可能性があり、これにより、HPA値のすべての要素の型情報をチェックする必要がなく、単にトップレーンの型情報をチェックすることによって特殊値の存在を検出することができるため、一連のHPA動作の終了に到達したときに特殊値が生成されたかどうかの検出がより簡単になる。
一方、ペアの下位要素と上位要素の両方が特殊ではないが、上位要素の非重複ビットと下位要素の重複ビットの加算によってオーバーフローが発生した場合、更新された上位要素Ui’のビット63~61を111に設定して、上記の加算の場合と同様の飽和値を示すことができる。
図13の下部に示されている動作は、ベクトル処理の各レーンに対して独立して実行することができるため、1つのレーンにおける重複伝搬が特殊値を生成し、別のレーンでは生成しないことが可能である。
図13に示すように、整列シフト、加算及び型情報の設定を実行するための個別の命令が必要な場合と比較して、専用の重複伝搬命令を提供することにより、重複伝搬の実行に必要なコードサイズを大幅に削減することができる。
図14は、図13に示すような重複伝搬動作の後に重複ビットを除去するための対応する重複クリア命令を示す。つまり、ペアの下位要素の重複ビットが上位要素に加算されると、下位要素の重複ビットを0にクリアすることができる。
重複伝搬命令に関しては、重複クリア命令は3つのベクトルレジスタを指定するが、このときデスティネーションレジスタZdlは、HPA数の隣接するHPA要素のペアの下位HPA要素を提供し、これを重複クリア命令の結果として更新する。他の2つのソースレジスタZm、Zuは、それぞれメタデータとペアの上位要素を表す。同様に、これらはベクトルレジスタであり、したがって、それぞれのレジスタに対応して配置されたベクトル要素の各セットに対して、処理の多数の独立したレーンが実行される。このとき、対応する要素の各セットに対して実行される動作は、重複クリア動作360であり、これは、HPA要素LiとUiとのペアの値及び対応するメタデータMiを入力として取り、更新値Li’を生成して、デスティネーションレジスタZdlの対応するレーンに書き戻す。
重複クリア関数360のそれぞれで実行される動作は、図14の下部に示されている。図14に示すように、重複クリア動作は、単に下位要素Liの重複ビットを0にクリアするだけであり、0に設定されるビット数は、メタデータZmの対応する要素Miで指定された重複ビット194の数に依存する。下位要素の非重複ビットは変更されないままである。下位要素も上位要素も特殊値を表していない場合、下位要素内の重複ビットのクリアは上位要素Zuとは無関係である。
下位要素Liの最上位ビットが1に設定されて特殊値を示す場合、更新値Li’が入力値Liと等しくなるように、下位要素は変更されないままにすることができる。必要に応じて、上位要素Uiが特殊な場合、下位要素も変更されないままにすることができるが、これは必須ではない。特定の実施形態において、上位要素が特殊値として示されているかどうかに関係なく重複クリアが実行される場合、命令は、上位要素Uiに対応するレジスタZuを指定する必要が全くない。しかし、デスティネーションレジスタへの不必要な書き込みの実行を回避するために、上位要素が特殊であるかどうかに依存することは、動作に有用であり得る。図13の重複伝搬命令とは異なり、図14の重複クリア命令では、HPA値内の隣接する要素の所与のペアの下位要素から上位要素に特殊値を伝搬することが望ましい可能性は低く、これは、命令用の第2のデスティネーションレジスタが必要であり、多くのマイクロアーキテクチャにはこれを行うのに十分な書き込みポートを有していない可能性があるためである。
したがって、使用時には、図14の重複クリア命令は、図13に示すような重複伝搬命令に続き得ることが予想され、重複クリア命令は、下位レジスタ及び上位レジスタとして指定された同じレジスタのペアに作用する。この動作を2つの別個の命令に分割することは、各命令が1つのデスティネーションレジスタを指定するだけでよいことを保証するのに有用であり、上述したように、これは、マイクロアーキテクチャにおいて実装するのがより簡単である。
しかしながら、同じ命令に応答して更新される2つの異なるデスティネーションレジスタを指定する命令が許可されるアーキテクチャでは、結合された命令が図13及び図14の両方の関数を実行することが可能である。つまり、非特殊入力の場合、命令は、下位要素の重複ビットを上位要素の非重複ビットに加算することと、下位要素の重複ビットを0にクリアすることとの両方をトリガすることができる。そのような命令は、図13及び14に関して前述したのと同じ方法で特殊値を処理することができ、いずれかの値が入力レジスタにおいて特殊である場合、出力値は変更されないままになるか、又は下位要素の型情報が上位要素に伝搬される。
図13及び図14は、重複伝搬命令及び重複クリア命令によって作用される第1及び第2のアンカーデータ要素が、同じHPA値の隣接する要素Li、Uiのペアである例を示すが、これは必須ではない。別の使用例として、重複伝搬/クリア命令によって指定された第1のアンカーデータ要素(Li)が所与のHPA値の最上位要素であり、第2のアンカーデータ要素(Ui)が符号ビットのみが入力された「空」のHPA要素である場合がある。これは、第1のアンカーデータ値を含むHPA値を、より有意性の高いビットを含む別のHPA値に加算する場合に有用であり、この場合、第1のアンカーデータ値からのキャリービットを第2のHPA値内のより高い有意性の高いレーンに追加する必要があり、これは、最初に第1のHPA値の最上位要素から重複ビットを取り除き、そして、第2のHPA値の関連するHPA要素のレーン有意性に対応するレーン有意性を与えることができる他の「空」のHPA要素の非重複ビットにそれらを追加することによって、より簡単にすることができる。図13及び図14に示されている命令に対して他の使用例が可能であることが理解されよう。
図15は、使用され得るシミュレータの実装形態を示している。先に説明した実施形態は、当該技術をサポートする特定の処理ハードウェアを動作するための装置及び方法の観点から本発明を実装するものであるが、コンピュータプログラムを使用して実装される本明細書に記載の実施形態に従った命令実行環境を提供することも可能である。このようなコンピュータプログラムは、ハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、シミュレータと呼ばれることが多い。シミュレータコンピュータプログラムの種類には、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータが含まれる。典型的には、シミュレータの実装形態は、シミュレータプログラム410をサポートする、任意にホストオペレーティングシステム420を実行するホストプロセッサ430上で実行されてもよい。いくつかの構成では、ハードウェアと提供される命令実行環境との間に複数のシミュレーション層が存在してもよく、及び/又は、同じホストプロセッサ上で提供される複数の異なる命令実行環境が存在してもよい。歴史的に、合理的な速度で実行するシミュレータの実装形態を提供するためには、強力なプロセッサが必要とされてきたが、互換性又は再利用の理由から別のプロセッサにネイティブなコードを実行したい場合など、特定の状況では、そのようなアプローチが正当化される場合がある。例えば、シミュレータの実装形態では、ホストプロセッサのハードウェアではサポートされていない追加機能を備えた命令実行環境を提供すること、又は異なるハードウェアアーキテクチャに典型的に関連する命令実行環境を提供することができる。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬USENIX Conference、53~63頁に記載されている。
これまで、特定のハードウェア構成又は機能を参照して実施形態を説明してきたが、シミュレーションされた実施形態では、同等の機能を適切なソフトウェア構成又は機能によって提供することができる。例えば、特定の回路は、シミュレーションされた実施形態において、コンピュータプログラムロジックとして実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、ソフトウェアのデータ構造としてシミュレーションされた実施形態で実装することができる。先に説明した実施形態で参照されるハードウェア要素の1つ又は複数がホストハードウェア(例えば、ホストプロセッサ430)上に存在する構成では、いくつかのシミュレートされた実施形態は、適切な場合にはホストハードウェアを利用してもよい。
シミュレータプログラム410は、コンピュータ読み取り可能な記憶媒体(非一時的媒体であってもよい)に格納されてもよく、シミュレータプログラム410によってモデル化されているハードウェアアーキテクチャのアプリケーションプログラムインタフェースと同じであるプログラムインタフェース(命令実行環境)をターゲットコード400(アプリケーション、オペレーティングシステム、ハイパーバイザを含んでもよい)に提供する。したがって、上述したHPA値の処理をサポートする命令を含むターゲットコード400のプログラム命令は、シミュレータプログラム410を使用する命令実行環境内から実行されてもよく、上述した装置2のハードウェア機能を実際には有していないホストコンピュータ430がこれらの機能をエミュレートすることができる。シミュレータプログラム410は、ターゲットコード400の命令をデコードして、ホストハードウェア430がサポートするネイティブ命令にマッピングするための命令デコードプログラムロジック412を含んでもよい。命令デコードプログラムロジック412は、HPA処理命令を、上記のようなFP変換、加算又は重複伝搬/クリア動作などのHPA(アンカーデータ処理)動作を実行するためのネイティブ命令のセットにマッピングするアンカーデータ処理プログラムロジック414を含む。
本出願において、「~ように構成される(configured to)」という用語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するために使用される。このコンテキストにおいて、「構成」は、ハードウェア又はソフトウェアの相互接続の構成又は方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは、機能を実行するようにプログラムされてもよい。「~ように構成される」は、定義された動作を提供するために、装置要素を任意の方法で変更する必要を意味しない。
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、当業者によって様々な変更及び修正を行うことができることを理解されたい。

Claims (25)

  1. 装置であって、
    データ処理を実行するための処理回路と、
    アンカーデータ処理動作を実行してアンカーデータ要素を生成するように前記処理回路を制御する命令デコーダと、
    を備え、
    前記アンカーデータ要素は、前記アンカーデータ要素が、
    前記アンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応する2の補数のビットの一部分を表すか、又は
    2の補数のビットの前記一部分以外の特殊値を表すか、
    を示す型情報を含む符号化を有する、
    装置。
  2. 前記処理回路は、前記アンカーデータ要素と同じレジスタに前記型情報を格納するように構成される、請求項1に記載の装置。
  3. 前記アンカーデータ処理動作は、浮動小数点値を前記アンカーデータ要素に変換するための浮動小数点からアンカーデータへの変換動作を含む、請求項1又は2に記載の装置。
  4. 前記浮動小数点値が特殊数を表す場合、前記処理回路は、前記アンカーデータ要素が前記特殊値を表すことを示す前記型情報を有する前記アンカーデータ要素を生成するように構成される、請求項3に記載の装置。
  5. 前記型情報は、前記浮動小数点値によって表される前記特殊数が正の無限大であるか、負の無限大であるか又は非数であるかを区別する、請求項4に記載の装置。
  6. 前記浮動小数点からアンカーデータへの変換動作において、前記処理回路は、前記アンカーデータ要素の前記所与の有意性の範囲を示すアンカーメタデータに基づいて、前記アンカーデータ要素を生成するように構成される、請求項3~5のいずれか1項に記載の装置。
  7. 前記型情報は、前記アンカーデータ要素が、
    対応するアンカーデータ要素をオーバーフローさせた以前のアンカーデータ処理動作、及び、
    前記浮動小数点値が1つ以上のアンカーデータ要素を含むアンカーデータ値の許容される数値範囲外であった以前の浮動小数点からアンカーデータへの変換動作
    のうちのいずれか1つに依存する飽和型のアンカーデータ要素であるかどうかを指定する、請求項1~6のいずれか1項に記載の装置。
  8. 浮動小数点値を前記アンカーデータ要素に変換するための浮動小数点からアンカーデータへの変換動作において、前記処理回路は、
    前記アンカーデータ要素が、1つ以上のアンカーデータ値を含むアンカーデータ値の最上位要素を表し、前記浮動小数点値を2の補数として表すには、前記アンカーデータ要素を使用して表現可能な前記所与の有意性の範囲よりも高い有意性の少なくとも1ビットが必要である場合、又は、
    前記アンカーデータ要素は、1つ以上のアンカーデータ値を含むアンカーデータ値の最下位要素を表し、前記浮動小数点値を2の補数として表すには、前記アンカーデータ要素を使用して表現可能な前記所与の有意性の範囲よりも低い有意性の少なくとも1ビットが必要である場合
    のいずれかの場合、前記飽和型を示すように、前記アンカーデータ要素の前記型情報を設定するように構成される、請求項7に記載の装置。
  9. 前記型情報の符号化は、前記飽和型として指定されたアンカーデータ要素について、前記アンカーデータ要素が正の値を表すか負の値を表すかを区別することができない、請求項7又は8に記載の装置。
  10. 前記処理回路は、2つのアンカーデータ要素の加算を実行して結果アンカーデータ要素を生成するための加算回路を含み、
    前記アンカーデータ値によって表される2の補数のビットのそれぞれの一部分をそれぞれ示す1つ以上のアンカーデータ要素を含むアンカーデータ値の最上位要素を表す結果アンカーデータ要素を生成するときに、前記2つのアンカーデータ要素の前記加算がオーバーフロー引き起こした場合、前記加算回路は、前記結果アンカーデータ要素が前記飽和型であることを指定する前記型情報を有する前記結果アンカーデータ要素を生成するように構成される、
    請求項7~9のいずれか1項に記載の装置。
  11. 前記アンカーデータ要素は、
    前記アンカーデータ要素の所定のビットが第1の値を有する場合、前記アンカーデータ要素は2の補数のビットの前記一部分を表し、
    前記アンカーデータ要素の前記所定のビットが第2の値を有する場合、前記アンカーデータ要素は前記特殊値を表す、
    符号化を有する、請求項1~10のいずれか1項に記載の装置。
  12. 前記アンカーデータ要素の前記所定のビットが前記第2の値を有する場合、前記アンカーデータ要素の少なくとも1つの更なるビットは、どの型の特殊値が前記アンカーデータ要素によって表されるかを表す、請求項11に記載の装置。
  13. 前記アンカーデータ要素の前記所定のビットが前記第1の値を有する場合、前記アンカーデータ要素の前記少なくとも1つの更なるビットは、前記2の補数の前記一部分の一部、又は前記2の補数の前記一部分を表す前記アンカーデータ要素の一部からのキャリーを収容するための少なくとも1つの重複ビットを表す、請求項12に記載の装置。
  14. 前記所定のビットは、前記アンカーデータ要素の最上位ビットである、請求項11~13のいずれか1項に記載の装置。
  15. 所与のアンカーデータ処理動作において、入力アンカーデータ要素が、前記入力アンカーデータ要素が特殊値であることを指定する前記型情報を有する場合、前記処理回路は、前記結果アンカーデータ要素が特殊値であることを指定する前記型情報を有する対応する結果アンカーデータ要素を生成するように構成される、請求項1~14のいずれか1項に記載の装置。
  16. 前記処理回路は、2つのアンカーデータ要素の加算を実行して結果アンカーデータ要素を生成するための加算回路を含み、
    前記2つのアンカーデータ要素の1つが正の無限大を表し、前記2つのアンカーデータ要素のもう1つが負の無限大を表すことを前記2つのアンカーデータ要素の前記2つの型情報が示す場合、前記加算回路は、前記結果アンカーデータ要素が非数を表すことを指定する型情報を有する前記結果アンカーデータ要素を生成するように構成される、請求項1~15のいずれか1項に記載の装置。
  17. 前記アンカーデータ要素は、V個の重複ビット及びW個の非重複ビットを含むNビット値であり、
    浮動小数点値を前記アンカーデータ要素に変換するための浮動小数点からアンカーデータへの変換動作において、前記浮動小数点値が特殊数以外の数を表し、かつ前記浮動小数点値によって表される数が許容される数値範囲内にある場合、前記処理回路は、前記浮動小数点値に対応する2の補数のビットの一部分を表すように前記アンカーデータ要素の前記W個の非重複ビットを設定し、前記アンカーデータ要素の前記V個の重複ビットを前記W個の非重複ビットの符号拡張に設定するように構成される、
    請求項1~16のいずれか1項に記載の装置。
  18. N-V-W>0である、請求項17に記載の装置。
  19. 前記処理回路は、重複伝搬命令に応答して、第1のアンカーデータ要素の前記V個の重複ビットを第2のアンカーデータ要素のW個の非重複ビットと整列させ、整列された重複ビット及び非重複ビットを加算して前記第2のアンカーデータ要素の更新値を生成する、請求項17又は18に記載の装置。
  20. 前記重複伝搬命令に応答して、前記第1のアンカーデータ要素及び前記第2のアンカーデータ要素のうちの1つが前記特殊値を指定する型情報を有する場合、前記処理回路は、
    前記第2のアンカーデータ要素の以前の値を保持すること、又は、
    前記第1のアンカーデータ要素の前記型情報が特殊値を示す場合、前記第1のアンカーデータ要素の前記型情報を前記第2のアンカーデータ要素の前記型情報に伝搬すること、
    のうちの1つを実行するように構成される、請求項19に記載の装置。
  21. 前記整列された重複ビット及び非重複ビットの前記加算が前記第2のアンカーデータ要素のオーバーフローを引き起こした場合、前記処理回路は、飽和型値を示すように前記第2のアンカーデータ要素の前記型情報を設定するように構成される、請求項19又は20に記載の装置。
  22. 前記処理回路は、重複クリア命令に応答して、ターゲットアンカーデータ要素の前記重複ビットをゼロにクリアする、請求項17~21のいずれか1項に記載の装置。
  23. 前記重複クリア命令に応答して、前記ターゲットアンカーデータ要素が前記特殊値を指定する型情報を有する場合、前記処理回路は、前記ターゲットアンカーデータ要素の以前の値を保持するように構成される、請求項22に記載の装置。
  24. 命令を実行するための命令実行環境を提供するようにホストデータ処理装置を制御するためのコンピュータプログラムであって、前記コンピュータプログラムは、
    データ処理を実行するように前記ホストデータ処理装置を制御する、ターゲットコードのプログラム命令をデコードするための命令デコードプログラムロジックを含み、
    前記命令デコードプログラムロジックは、アンカーデータ要素を生成するためのアンカーデータ処理動作を実行するように前記ホストデータ処理装置を制御するアンカーデータ処理プログラムロジックを含み、
    前記アンカーデータ要素は、前記アンカーデータ要素が、
    前記アンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応する2の補数のビットの一部分を表すか、又は、
    2の補数のビットの前記一部分以外の特殊値を表すか、
    を示す型情報を含む符号化を有する、
    コンピュータプログラム。
  25. データ処理方法であって、
    1つ以上の命令をデコードすることと、
    デコードされた命令に応答して、アンカーデータ要素を生成するためのアンカーデータ処理動作を実行するように処理回路を制御することと、を含み、
    前記アンカーデータ要素は、前記アンカーデータ要素が、
    前記アンカーデータ要素を使用して表現可能な所与の有意性の範囲に対応する2の補数のビットの一部分を表すか、又は、
    2の補数のビットの前記一部分以外の特殊値を表すか、
    を示す型情報を含む符号化を有する、データ処理方法。
JP2021544755A 2019-02-06 2019-12-02 アンカーデータ要素における特殊値の符号化 Pending JP2022519258A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/268,665 2019-02-06
US16/268,665 US10459688B1 (en) 2019-02-06 2019-02-06 Encoding special value in anchored-data element
PCT/GB2019/053402 WO2020161458A1 (en) 2019-02-06 2019-12-02 Encoding special value in anchored-data element

Publications (1)

Publication Number Publication Date
JP2022519258A true JP2022519258A (ja) 2022-03-22

Family

ID=68315003

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021544755A Pending JP2022519258A (ja) 2019-02-06 2019-12-02 アンカーデータ要素における特殊値の符号化

Country Status (6)

Country Link
US (1) US10459688B1 (ja)
EP (1) EP3921942A1 (ja)
JP (1) JP2022519258A (ja)
KR (1) KR20210122828A (ja)
CN (1) CN113454915A (ja)
WO (1) WO2020161458A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11704092B2 (en) * 2020-10-27 2023-07-18 Arm Limited High-precision anchored-implicit processing
GB2605568B (en) * 2021-03-23 2023-05-17 Imagination Tech Ltd Performing operations using floating point values

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9916130B2 (en) 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing
US9928031B2 (en) 2015-11-12 2018-03-27 Arm Limited Overlap propagation operation
US9733899B2 (en) 2015-11-12 2017-08-15 Arm Limited Lane position information for processing of vector
US9703531B2 (en) 2015-11-12 2017-07-11 Arm Limited Multiplication of first and second operands using redundant representation
US9720646B2 (en) 2015-11-12 2017-08-01 Arm Limited Redundant representation of numeric value using overlap bits
US10579338B2 (en) 2017-01-30 2020-03-03 Arm Limited Apparatus and method for processing input operand values

Also Published As

Publication number Publication date
WO2020161458A1 (en) 2020-08-13
EP3921942A1 (en) 2021-12-15
CN113454915A (zh) 2021-09-28
US10459688B1 (en) 2019-10-29
KR20210122828A (ko) 2021-10-12

Similar Documents

Publication Publication Date Title
CN107077416B (zh) 用于以选择性舍入模式进行向量处理的装置和方法
JP7096828B2 (ja) 入力オペランド値を処理するための装置及び方法
JP6744916B2 (ja) 冗長表現を用いた、第1および第2のオペランドの積算
JP6882281B2 (ja) ベクトルの処理のためのレーン位置情報
JP6803381B2 (ja) 重複ビットを使用する数値の冗長表現
JP2022519258A (ja) アンカーデータ要素における特殊値の符号化
JP6877812B2 (ja) 重複伝搬演算
JP2022519259A (ja) アンカーデータ要素の変換
JP6886927B2 (ja) 浮動小数点値の処理のための装置及び方法
JP2022519848A (ja) アンカーデータ値のオーバーフロー又はアンダーフロー処理
US20050154773A1 (en) Data processing apparatus and method for performing data processing operations on floating point data elements
Underwood Ieee Floating-Point Extension for Managing Error Using Residual Registers

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20211001

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20211130

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20221125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240329