JP6694880B2 - 有効度整合 - Google Patents

有効度整合 Download PDF

Info

Publication number
JP6694880B2
JP6694880B2 JP2017522512A JP2017522512A JP6694880B2 JP 6694880 B2 JP6694880 B2 JP 6694880B2 JP 2017522512 A JP2017522512 A JP 2017522512A JP 2017522512 A JP2017522512 A JP 2017522512A JP 6694880 B2 JP6694880 B2 JP 6694880B2
Authority
JP
Japan
Prior art keywords
bit
value
hpa
validity
bits
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.)
Active
Application number
JP2017522512A
Other languages
English (en)
Other versions
JP2017538197A (ja
Inventor
ルッツ、デイヴィッド、レイモンド
バージェス、ニール
ニール ハインズ、クリストファー
ニール ハインズ、クリストファー
Original Assignee
エイアールエム リミテッド
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エイアールエム リミテッド, エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2017538197A publication Critical patent/JP2017538197A/ja
Application granted granted Critical
Publication of JP6694880B2 publication Critical patent/JP6694880B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • 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
    • 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • 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
    • 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
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49921Saturation, i.e. clipping the result to a minimum or maximum value
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • 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/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
    • G06F7/506Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages
    • G06F7/507Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages using selection between two conditionally calculated carry or sum values
    • 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
    • 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
    • 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/30018Bit or string instructions
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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
    • G06F9/30112Register structure comprising data of variable length
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/02Conversion to or from weighted codes, i.e. the weight given to a digit depending on the position of the digit within the block or code word
    • H03M7/12Conversion to or from weighted codes, i.e. the weight given to a digit depending on the position of the digit within the block or code word having two radices, e.g. binary-coded-decimal code
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3404Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/483Indexing scheme relating to group G06F7/483
    • 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/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
    • G06F7/506Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Mathematical Physics (AREA)
  • Nonlinear Science (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Storage Device Security (AREA)

Description

本技術は、データ処理の分野に関する。
整数演算および浮動小数点演算をサポートするデータ処理システムを提供することは知られている。
本開示の少なくともいくつかの実施形態は、データを処理するための装置であって、
ビット有効度に関して、1つ以上の入力オペランドのうちのいずれかを、出力記憶素子について指定されたプログラム可能な有効度(significance)パラメータに対して整合させて、1つ以上の整合された入力オペランドを提供するための整合(alignment)回路と、
該1つ以上の整合された入力オペランドを受信し、該1つ以上の整合された入力オペランドに対して演算動作を実行して結果値を生成し、該結果値を該出力記憶素子に記憶するように、該整合回路に連結された演算回路と、を備え、
該プログラム可能な有効度パラメータが、該整合された結果値とは独立している(無関係である)、装置を提供する。
本開示の少なくともいくつかの実施形態は、データを処理するための装置であって、
ビット有効度に関して、1つ以上の入力オペランドのうちのいずれかを、出力記憶素子について指定されたプログラム可能な有効度パラメータに対して整合させて、1つ以上の整合された入力オペランドを提供するための整合手段と、
該1つ以上の整合された入力オペランドを受信し、該1つ以上の整合された入力オペランドに対して演算動作を実行して結果値を生成し、該結果値を該出力記憶素子に記憶するための、該整合手段に連結された演算手段と、を備え、
該プログラム可能な有効度パラメータが、該整合された結果値とは独立している、装置を提供する。
本開示の少なくともいくつかの実施形態は、データを処理する方法であって、
ビット有効度に関して、1つ以上の入力オペランドのうちのいずれかを、出力記憶素子について指定されたプログラム可能な有効度パラメータに対して整合させて、1つ以上の整合された入力オペランドを提供することと、
該1つ以上の整合された入力オペランドを受信することと、
該1つ以上の整合された入力オペランドに対して演算動作を実行して結果値を生成することと、
該結果値を該出力記憶素子に記憶することと、を含み、
該プログラム可能な有効度パラメータが、該整合された結果値とは独立している、方法を提供する。
ここで、添付の図面を参照しながら、単なる例として実施形態例を説明する。
桁上げ選択加算器を概略的に例示する。 桁上げ先見加算器を概略的に例示する。 浮動小数点数をHPA数に加算する一例を示す。 ある数のHPA表現例を示す。 HPA数を浮動小数点数に変換するときの仮数部(significand)の生成の一例である。 HPA数がハードウェアサイズに収まる場合に、HPA演算を使用していくつかの浮動小数点値を加算する一例を示す。 HPA数がハードウェアサイズよりも幅広である場合に、HPA演算を使用していくつかの浮動小数点値を加算する一例を示す。 データ処理システムを概略的に例示する。 データ処理システム内で操作される数を表現するための異なる形式を概略的に例示する。 倍精度浮動小数点値とHPA値との間の関係例を概略的に例示する。 結果HPAレジスタを用いて入力オペランドを整合するための回路を概略的に例示する。 ベクトルHPA数に対する処理動作を、そのHPA数内のコンポーネントの数とプログラム命令との両方に従って実行するための回路を概略的に例示する図であり、異なるコンポーネントが並列に処理されている。 ベクトルHPA数に対する処理動作を、そのHPA数内のコンポーネントの数とプログラム命令との両方に従って実行するための回路を概略的に例示する図であり、異なるコンポーネントが連続して処理されている。 HPA数を使用して実行される処理に関する例外指示の生成を概略的に例示する。 プログラム可能な制御データによって指定された目標有効度および/または目標サイズに基づいて結果を生成するための処理回路を有する装置の一例を示す。 演算動作に対する有効度の上方境界および下方境界を設定する一例を示す。 高精度アンカー固定(high−precision anchored)(HPA)データ形式の一例を示す。 対応するデータ記憶素子内に記憶されるデータ値の目標有効度を指示するメタデータ(アンカー値aを含む)を記憶するためのメタデータ記憶素子の一例を示す。 並列レーンの処理を実行するためのいくつかの処理ユニットを含む処理回路の一例を示す。 一連の浮動小数点値を加算するための累算動作の一例を示す。 浮動小数点値をHPAデータ形式の値に変換する一例を示す。 HPAデータ形式の値を浮動小数点値に変換する一例を示す。
プログラマ選択可能範囲内にある浮動小数点(FP)数の素早く正確な累算を可能にする、新たなデータタイプおよび新たな命令が開示される。ほとんどの問題に適応する適度な範囲では、累算はFP加算より素早く、また結合的である。結合加算により、再現可能かつ正確な結果を依然としてもたらすと同時に問題を並列化することができ、例えば既存のハードウェアと比較して100倍以上の高速化が可能となる。我々は、これらの利益は高性能コンピューティング(HPC)スペースにおいて非常に魅力的となり、多くの非HPCアプリケーションでも注目に値すると考える。
浮動小数点(FP)演算に関する既知の問題は、それが非結合的であることであり、この事実は、和を問題含みにする。
●プログラマは、3つの数を加算するときでさえ非常に異なる結果を心配する必要がある。
●プログラマは、非常に異なる結果を回避することを望んで、必要以上に幅広い形式を使用する。
●全く同じ順序で計算されない限り和が再現可能でないため、プログラマは、コードを容易に並列化することができない。
例えば、単精度では、
20+(−244+244)=220
しかし
(220+−244)+244=0
である。実行される動作の順序に応じて、結果は100万またはゼロである。指数が24分異なるためこれは極例であるが、指数が1だけ異なる場合、または指数のすべてが同じであり、3つより多くの事物を加算している場合でも、異なる答えが得られる場合がある。Cプログラミング言語は、和が左から右へ順番に評価されることを要することによって再現性問題に対処するが、これは正確性に対しては何の効果もなく、並列化を不可能にする。
こうした問題は、プログラムが数百万の事物を加算することを要し得る高性能コンピューティング(HPC)にとって特に重大である。プログラマはこれらの問題の並列化を望むが、再現性の欠如により、デバッグが通常よりもさらに難しくなる。異なる構成の機械は、そうした機械の再プログラミングが完璧に行われたとしても、異なる答えをもたらすであろう。
浮動小数点数
浮動小数点(FP)は、少数のビットを使用して実数を近似する有用な方法である。IEEE 754−2008 FP規格は、複数の異なるFP数形式を提案し、その一部は、バイナリ64(別称、倍精度すなわちDP)、バイナリ32(別称、単精度すなわちSP)、およびバイナリ16(別称、半精度すなわちHP)である。64、32、および16という数は、各形式(フォーマット)に必要なビット数を指す。
表現
FP数は、負の200万の代わりに−2.0×10と記述する、科学の授業で教えられる「科学的記数法」と非常に似ている。この数の部分は、符号部(この場合は負)、仮数部(2.0)、指数の基数部(10)、および指数部(6)である。これらの部分はすべてFP数における類似物を有するが、それらには相違点があり、そのうち最も重要なのは、構成要素の部分は二進数として記憶され、指数の基数は常に2であるということである。
より精確には、FP数は、符号ビットと、何らかの数のバイアス付き指数ビットと、何らかの数の小数部ビット(fraction bit)とから成る。具体的には、DP、SP、およびHP形式は、以下のビットから成る。

符号は、負数では1であり、正数では0である。ゼロを含むすべての数が符号を有する。
指数にはバイアスが付いており、これは、真の指数が、その数に記憶されている指数と異なることを意味する。例えば、バイアス付きSP指数は、8ビット長であり、0〜255の範囲である。指数0および255は特殊な事例であるが、他の指数はすべてバイアス127を有し、これは真の指数がバイアス付き指数よりも127小さいことを意味する。最小のバイアス付き指数は1であり、これは−126という真の指数に対応する。最大のバイアス付き指数は254であり、これは127という真の指数に対応する。HPおよびDP指数は同じように機能し、そのバイアスは上記の表に示されている。
SP指数255(またはDP指数2047、またはHP指数31)は、無限大(infinities)、およびNaN(非数(not a number))と呼ばれる特殊記号のために予約されている。無限大(正であっても負であってもよい)は、ゼロの小数部を有する。指数255および非ゼロ小数部を有する数はいずれもNaNである。無限大は飽和値をもたらすため、これは実際には、「この計算は、この形式で表すことができるものよりも大きな値をもたらした」というようなことを意味する。NaNは、実数に対する数学的に定義されない動作、例えばゼロによる除算、または負数の平方根の計算について返される。
指数ゼロは、いずれの形式においても、非正規数およびゼロのために予約されている。正規数は、次の値を表し、
−1sign×1.fraction×2
式中、eは、バイアス付き指数から計算される真の指数である。1.fractionという用語は仮数部と呼ばれ、1はFP数の一部としては記憶されないが、その代わりに指数から推測される。ゼロおよび最大指数を除いたすべての指数が、1.fraction形態の仮数部を示す。指数ゼロは、0.fraction形態の仮数部、および所与の形式の1−バイアスに等しい真の指数を示す。そのような数は、非正規(subnormal)と呼ばれる(歴史的にこれらの数は「denormal」と称されたが、現代の用法では「subnormal」という用語が好まれる)。
ゼロに等しい指数と小数部との両方を有する数はゼロである。
以下の表は、HP形式におけるいくつかの例示的な数を有する。エントリは二進法であり、読みやすさを向上させるために「_」の文字が付加されている。非正規エントリ(指数がゼロである表の4番目のライン)が、先行のラインの正規エントリとは異なる仮数部をもたらすことに留意されたい。
FP実装形態の複雑さの大部分は非正規数によるものであり、したがって、それらはマイクロコードまたはソフトウェアによって処理されることが多い。一部のプロセッサは、ハードウェア内で非正規数を処理し、これらの動作をソフトウェアまたはマイクロコード実装形態と比較して10〜100倍高速化させる。
整数、固定小数点、浮動小数点
符号を処理するFP方式は、符号マグニチュード(sign−magnitude)と呼ばれ、これは、整数がコンピュータに記憶される通常の方式(2の補数)とは異なる。符号マグニチュード表現では、同じ数の正数と負数とは、符号ビットのみ異なる。1個の符号ビットと3個の仮数ビットとから成る4ビットの符号マグニチュード整数は、プラス1およびマイナス1を次のように表すことになる。
+1=0001
−1=1001
2の補数表現では、nビットの整数iは、二進法n+1−ビット値2+iの下位nビットによって表され、そのため、4ビットの2の補数整数は、プラス1およびマイナス1を次のように表すことになる。
+1=0001
−1=1111
2の補数形式は、コンピュータ演算を簡略化するため、符号付き整数については事実上万能である。
固定小数点数は、まさに整数のように見えるが、実際には、ある特定の数の小数部ビットを有する値を表す。センサデータは固定小数点形式であることが多く、FPの採用の普及前に書かれた固定小数点ソフトウェアが多数存在する。固定小数点数は扱いが非常に面倒であるが、これは、プログラマが「二進小数点」すなわち数の整数部と小数部との間の分離子を把握しなければならず、またビットを正しい場所に保つために数を絶えずシフトしなければならないからである。FP数はこの難点を有しないため、固定小数点数とFP数とで変換可能であることが望ましい。変換の実行が可能であることは、固定小数点ソフトウェアおよびデータを依然として使用することができるが、新たなソフトウェアを書く際に固定小数点に制限されないことも意味する。
FP数の丸め
ほとんどのFP動作は、動作が無制限の範囲および精度で行われたかのように計算され、FP数に収まるように丸められることがIEEE−754規格では必要とされる。計算がFP数と正確に一致する場合、常にその値が返されるが、計算は通常、2つの連続した浮動小数点数間に位置する値をもたらす。丸めは、この2つの連続した数のうちのどちらが返されるべきかを選ぶプロセスである。
丸めモードと呼ばれる丸めの方法がいくつか存在し、これらのうちの6つは以下の通りである。

この定義は、実際にどの方法で丸めるかについては述べていない。一般的な実装形態の1つは、動作を行い、切り捨て値(すなわち、FP形式に収まる値)ならびに残りのビットのすべてに注目して、ある特定の条件が適用される場合は切り捨て値を調整することである。これらの計算はすべて、以下に基づく。
L−(最小(least))切り捨て値の最小有効ビット(least significant bit)
G−(ガード(guard))次の最大有効ビット(most significant bit)(すなわち、切り捨てに含まれない第1のビット)
S−(スティッキー(sticky))切り捨ての一部でない残りのビットすべての論理OR
これらの3つの値および切り捨て値を考慮すると、以下の表に従って正しく丸められた値を常に計算することができる。

例えば、2つの4ビット仮数部を乗算し、その後4ビット仮数部に丸めることを考察する。
sig1=1011(十進法の11)
sig2=0111(十進法の7)
乗算結果
sig1×sig2=1001_101(十進法の77)
L Gss
切り捨てられた4ビットの結果の最小有効ビットはL、次のビットはGと表示され、Sは、sと表示される残りのビットの論理ORである(すなわち、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であり、故にS(それらのSiビットに1を加算することによって得られる)もゼロである。S0が非ゼロである場合、Siはすべて1ではなく、故にSは非ゼロである。このように、すべての場合でS0=Sである。
G0がゼロである場合、Giは1であり、S0がゼロである場合にのみ起こるSビットからのキャリーイン(carry−in)が存在する場合を除いて、Gも1である。G0が1である場合、Giはゼロであり、この場合もやはり、S0がゼロである場合にのみ起こるSビットからのキャリーインが存在する場合を除いて、Gも1である。このように、G=G0^S0である。
非常に似た論理によって、L=L0^(G0|S0)である。
負と正との両方の整数に関するL、G、およびSが得られたので、ここでの丸め規則を考え出すことができる。

固定小数点数は、整数と全く同じ方法で丸められる。符号なしの(整数または固定小数点への)変換に関する規則は、正の変換に関する規則と同じである。
挿入丸め(Injection Rounding)
丸めをより素早く行う方法は、ほぼすべてのFP動作の一部である仮数部加算の一部として丸め定数を挿入することである。これがどのように機能するかを確かめるために、ドルおよびセント単位の数を加算し、その後ドルに丸めることを考察する。次の加算をすると
$1.27
+$2.35
$3.62
となる。和$3.62は、$3よりも$4に近いことが分かり、したがって、最近接丸めモードのいずれも$4を返すはずである。これらの数を二進法で表した場合、直前の節のL、G、S方法を使用して同じ結果が得られ得る。しかし、50セントだけ加算し、結果を切り捨てると想定するとどうだろう。
1.27
+2.35
0.50(丸め挿入)
4.12
この和($4.12)からドル額($4)がちょうど返されたら、RNA丸めモードを使用して正しく丸められたことになる。$0.50の代わりに$0.99を加算した場合、RP丸めを使用して正しく丸めることになる。RNEはこれよりわずかに複雑である。$0.50を加算し、切り捨て、その後残りのセントに注目する。残りのセントが非ゼロである場合、切り捨て結果は正しい。ゼロセントが残っていれば、挿入前は2ドル額のちょうど中間であり、そのため偶数のドル額が選ばれる。二進法FPでは、これは、ドル額の最小有効ビットをゼロに設定することを意味する。
3つの数の加算は、2つの数の加算よりわずかに遅いのみであるため、挿入丸めを使用することによって、2つの仮数部を加算し、L、G、およびSを検査し、その後丸めモードに従ってその結果をインクリメントした場合よりも大幅に迅速に、丸められた結果が得られる。
挿入丸めの実装
FPにおいて、丸め挿入は、3つの異なる値のうちの1つであり、これらの値は、丸めモードおよび(時として)結果の符号に依存する。
RNAとRNEとの両方で、G位置に1を挿入することが必要とされる(これは、ここでのドルおよびセントの例に$0.50を加算するようなことである)。
RPおよびRM丸めは、モードのみならず符号にも依存する。RPは、正の結果を切り上げる(仮数部のマグニチュードを正の無限大の方向に増加させる)が、負の結果を切り捨てる(正の無限大により近い仮数部を選ぶ)。同様に、RMは、負の結果を切り上げる(仮数部のマグニチュードを負の無限大の方向に増加させる)が、正の結果を切り捨てる(負の無限大により近い仮数部を選ぶ)。このように、RMおよびRPは、2つの種類:符号が丸め方向と一致するときの切り上げ(RU)、および符号が丸め方向と異なるときの切り捨て(RZ)に分けられる。RUの場合では、Gビットの場所、およびSに論理的に寄与するすべての場所で1が挿入される(これは、ここでのドルおよびセントの例に$0.99を加算するようなことである)。
RZおよびRXモードでは、そしてRZモードに変わるRPおよびRMモードでは、ゼロが挿入される。
丸めモードの大部分において、丸め挿入を加算し、その後切り捨てることで、正しく丸められた結果が与えられる。2つの例外はRNEおよびRXであり、これらは、加算後にGおよびSを検査することを要する。RNEでは、GとSとの両方がゼロである場合、Lを0に設定する。RXでは、GまたはSが非ゼロである場合、Lを1に設定する。
FP数は実数ではない
FP数は実数と同様であるものと考えたくなるが、それらは、最も基本的な特性についてでさえ本質的に異なる。
1.それらは結合的ではない。例えばSPでは、3つの数を加算し、100万またはゼロを返す場合があり、恐らく人々が丸め誤差と考えるものではない。
(245+ −245)+220=220
45+(−245+220)=0
2.それらは分配法則に従わない。かさねて、SPでは、
3,000,001*(4.00001+5.00001)=0x4bcdfe83
(3,000,001*4.00001)+(3,000,001*5.00001)=0x4bcdfe82
となり、オーバーフローの存在下において、事態はより悪化する。
50*(278−277)=2127
(250*278)−(250*277)=infinity
3.一部の実装形態では、それらは、デフォルトNaNモード(すべてのNaNを単一のNaNに変換するモード)にある場合を除いて可換ですらなく、これは概して、nanA+nanB!=nanB+nanAであるからである。数値の加算および乗算は可換である。
4.IEEE NaN規則のために、乗法または加法の単位元が存在しない。1およびゼロが、数値の単位元として機能する。
FP数について考える1つの有用な方法は、それらを、多くても2、3個(DPでは53個)の連続したビットが非ゼロであり得る非常に長い固定小数点数と見なすことである。例えば、非無限DP数は、仮数部の第1のビットを2046個の場所のうちのいずれに有してもよく、その第1のビットには52個の他の仮数ビットが続き、符号ビットが存在するため、いかなる有限DP数も、2046+52+1=2099ビット固定小数点数として表すことができる。この方法で検査すると、2つのFP数の加算は概して、別のFP数をもたらすことが非常に明白になる:加算の結果は、それがFP数になるように丸められなければならない。
高精度アンカー固定数
高精度アンカー固定(HPA:high-precision anchored)数は、2の補数の長整数i(一般に128ビット以上)と、iのビットの重みを(典型的には、iの最小ビットの指数値を指定することによって)表すより小さなアンカー整数aとから成るペア(i,a)である。アンカー整数aは、プログラム可能な有効度パラメータ/値をもたらすものと見なされ得る。アンカー整数aは、例外情報:無限、符号、NaNなどの加算情報を含み得るHPA数に関するメタデータの一部を形成し得る。このペアは、FP数の仮数部および指数値と幾分か類似しているが、長整数iが正規化されず、かつ通常はFP仮数部よりも大幅に大きく、また、アンカー値aが和に対する入力のすべてに対して固定されていてもよいという点で異なる。FP数の加算は指数の変化を引き起こすが、HPA数の加算は、アンカーを変化させない。
自明な例として、10ビットのiと−4のaアンカー値とから成るHPA表現を考察する。この形式のいくつかの値は、表1に与えられる。

これらの数のうちの2つ、例えば0.5および1.5を加算するとき、アンカーは変化せず、和は、単にi部分を加算することによって簡便に与えられる。HPAの和は単に2の補数の加算であることから、HPAの和は結合的である。
実現可能なHPA累算器を製造する方法の1つは、以下を用いる。
1.HPA累算器が巨大である必要がないように必要とされる数の範囲を限定する方法。
2.大きな2の補数の数を迅速に加算する方法。
3.FPからHPAに変換するための高速ユニット、および
4.HPAからFPに変換するためのユニット。
以下の節において、これらの要件のそれぞれを取り上げる。
範囲の限定
FP数は、広い範囲を有する。倍精度(DP)数は、2−1000より小さく、21000より大きいものとすることができるが、ほとんどの累算はこの範囲全体に及ばない。実際に、その範囲のすべてにわたる値を有意義に累算するであろう種類の問題を想像するのは難しい。原子寸法より小さい問題は非常に小さな値を累算し得、天文学的計算は非常に大きな値を累算し得るが、陽子の幅を銀河系間の距離に加算することは一般的に有用ではない。高性能計算であっても、ほとんどの累算は限定された範囲にわたって起こる。
多くのプログラマは、FPの範囲のためではなく利便性のためにFPを使用する。音声コーデックはFPを使用し得、音声データは、周波数と容量との両方で限定された範囲を有する。FPでプログラムする方が容易であり、これはプログラマにとって魅力的である。
プログラマが、特定の和に関するデータのすべてが260未満のマグニチュードを有し、2−50未満のマグニチュードを有する値が多少なりとも有意義に和に影響しないであろうと判断した場合、そのデータが、HPA形式(i,−50)を使用し、128ビットのiを用いて加算されれば、その累算は結合的であり、任意の順序で数を加算することができる。
大きな数の加算
我々は、64ビット整数のベクトルをより長い1つの整数と見なすことを提案する。例えば、256ビット整数は、4つの64ビット整数から成ることになる。
そのような2つのベクトルを考慮すると、64ビットSIMD加算器(ARM LimitedのNEON SIMDエンジンのようなもの)に適度な変更を行って、256ビットの和a+bを計算することができる。加算は、下位の64ビットを加算し、その後次の64ビットを下位加算のキャリーアウト(carry out)と一緒に加算することなどによって達成される。実際のところ、これは、かなり大きなSIMDユニットでは単一サイクルで実装可能であり得、1024ビット加算器が恐らく達成可能である。
適度なサイズ(例えば最大256ビット)のための1つの方法は、図1にあるような桁上げ選択加算器を構築することである。各レーンiは、a+bおよびa+b+1を計算し、レーンi−1のキャリーアウトは、2つの和のどちらかを選択するために使用される。我々は、これは現行のCPUで単一サイクルにおいて容易に計算され得ると考える。
より幅広のSIMDユニット(例えば最大1024ビット)では、図2のもののような桁上げ先見(carry−lookahead)加算器は、単一サイクル性能を保つことができる。前述同様に、各レーンiは、a+bおよびa+b+1を計算するが、このレーンは、その和がすべて1(p)であるかどうか、すなわち、レーンiの和が入力キャリーをレーンi+1に伝搬するかどうかも計算する。
短期で実装される可能性が高いSIMD幅、例えば128または256ビットでは、プロセッサは、ベクトルキャリーアウトおよびベクトルキャリーインを把握する必要がある。1024ビットの加算は、256ビットの実装形態では4サイクルで達成され得る。減算は、下位ベクトル上の下位レーンへのキャリーインと共に、各レーンiがa−b

として計算する通常の方法で行われることになる。
我々は、多桁加算(long addition)および減算を達成するための4つの新たな命令を提案する。
1.LONGADD Vd,Vm,Vn
Vd=Vm+Vnであり、各SIMDベクトルを単一の長整数として扱う。この命令はキャリーアウトCも作り出し、和の上位レーンからのキャリーアウトが存在する場合はC=1であり、さもなければC=0である。
2.LONGADDC Vd,Vm,Vn
Vd=Vm+Vn+Cであり、各SIMDベクトルを単一の長整数として扱う。以前に生成されたキャリーアウトCが和に加算され、新たなキャリーアウトが生成される。
3.LONGSUB Vd,Vm,Vn
Vd=Vm−Vn=Vm+〜Vn+1であり、各SIMDベクトルを単一の長整数として扱う。この命令はキャリーアウトCも作り出し、和の上位レーンからのキャリーアウトが存在する場合はC=1であり、さもなければC=0である。
4.LONGSUBC Vd,Vm,Vn
Vd=Vm−Vn+C=Vm+〜Vn+1+Cであり、各SIMDベクトルを単一の長整数として扱う。以前に生成されたキャリーアウトCが和に加算され、新たなキャリーアウトが生成される。
実際には、これらの命令は、次のように使用される。256ビットのSIMD実装形態があり、1024ビットのベクトルxおよびyを加算したいと想定する。Cにおいて、これらのベクトルは次のように宣言される。
long long x[15:0],y[15:0];
ロード/ストアセマンティクスで行き詰まらないように、これらのベクトルが既にレジスタファイル内にあると仮定しよう。すると1024ビットの加算および減算は以下のように見える。
// V0はx[3:0]を含み、V1はx[7:4]を含み、
// V2はx[11:8]を含み、V3はx[15:12]を含む
// V4はy[3:0]を含み、V5はy[7:4]を含み、
// V6はy[11:8]を含み、V7はy[15:12]を含む
// x[15:0]+y[15:0]を出力する多桁加算
// (V13,V12,V11,V10)において
LONGADD V10,V0,V4;
LONGADDC V11,V1,V5;
LONGADDC V12,V3,V6;
LONGADDC V13,V4,V7;
// x[15:0]−y[15:0]を出力する多桁減算
// (V23,V22,V21,V20)において
LONGSUB V20,V0,V4;
LONGSUBC V21,V1,V5;
LONGSUBC V22,V3,V6;
LONGSUBC V23,V4,V7;
256ビットの実装形態を考慮すると、1024ビットの加算および減算には、それぞれ4サイクルかかり得る。このような能力は、暗号アプリケーションを含むFP累算以外のことに有用となるであろう。
FPからHPAへの変換、加算、減算
HPA数はペア(i,a)であり、iは、2の補数の長整数であり、aは、その整数の最小有効ビットの重み(ひいては、その整数のビットのすべての重み)を与えるアンカー値である。ここでの長整数はSIMDユニットで処理されることになるため、iおよびaについてもう少し具体的に説明しよう。256ビットのSIMDユニットがあると想定する。すると、iの下位256ビットは4つの64ビット部分、Vi[3:0]に分けられる。アンカーを4つの部分、Va[3:0]内に有することも簡便であり、ここで、Va[0]=aであり、i>0についてはVa[i]=Va[i−1]+64である。ここでは特に何も変更していないが、HPA数(i,a)の下位256ビットが(Vi,Va)と表される、より簡便なSIMD表現を採用しているだけである。
図3は、FP数FをHPA数(Vi,Va)に加算する効率的な方法を示す。SIMDユニットの各レーンは、(Vi,Va)のレーン特有値を有し、すなわち、レーンjは、Vi[j]およびVa[j]を有する。各レーンは、Fのコピーも受信する。各レーンは、Fの指数をそのアンカー値Va[j]と比較し、Fの仮数部の適切なビットをそのレーンに投入する。レーンのうち多くても2つが、仮数ビットを含むことになる。各レーンは、その64ビット変換値を独立して計算し、結果として得られる256ビット整数は、4つの64ビットレーン値を含む。その256ビット値はその後、場合によりキャリーイン値cinと共にViに加算され、その結果が、キャリーアウト値coutと一緒に(Vi,Va)+Fを表す新たな256ビット値である。両方の値が同一のアンカーを有するため、これら2つの256ビット値を整数として加算することは有意義であることに留意されたい。
128ビットのSIMDユニットがあり、−50のアンカーを使用して値を変換したいと想定する。これは、128ビットiの最下位ビットが2−50に対応し、次のビットが2−49に対応するなどということを意味する(図4参照)。Vi[0]の上位ビットは213に対応し、一方でVi[1]が214に対応する場合の下位ビット。そのため、値214+213=24,576を有するHPA数は、これら2つのビットが設定されていることになる。iのビット127(Vi[1]の上位ビット)は、符号ビットである。代替的な実施形態は、HPA数のVi部分によって表される値が符号なしである、符号なしHPA形式を使用してもよい。この場合では、iのビット127は、値2^(127+a)を有することになり、式中、aはアンカー値である。
HPAへのFP変換において、各レーンは、Fの真の指数を検査し、その後、それをレーン特有のアンカーと比較する。同じアンカー(−50)がすべての実施例に使用され、実施例は、図4を参照することによって理解しやすくなるであろう。
例1。DP数F=1.0−ulp=3fef_ffff_ffff_ffffをHPAに変換したいと想定する。バイアス付き指数は3feであり、真の指数は−1であり、仮数部は53個の1である。上のレーンは、指数が低すぎること(レーンの最小重みが14であること)を確認し、そのため、そのビットをゼロで満たす。下のレーンは、ビット[63:50]をゼロに、そしてビット[49:0]を1に設定する。3個の1(値2−51+2−52+2−53に対応する)が仮数部内に残っているが、それらの重みがアンカー値−50未満であるため、これらは変換から除外される。代替的な実装形態は、この変換値を丸める場合があるが、ここでは切り捨てを仮定しよう。
例2。F=220−ulp=412f_ffff_ffff_ffff。真の指数は19であり、そのためビット[127:70]はゼロであり、[69:17]は1であり、[16:0]はゼロである。この数はぴったり収まるため、丸めは無関係である。各レーンは依然として、独立してそれ自体の64ビットを処理することに留意されたい。
例3。F=−220=c130_0000_0000_0000。真の指数は20であるが、ここでは符号に対処しなければならない。1つの方法は、正数について行ったように変換を行うが、各レーンで計算する値の1の補数を返し、その後128ビット値に1を加算することである。この場合では、ビット70は、1の補数の前の1セットビットであり、つまりそれは、1の補数の後の1ゼロビットである。128ビット値に1を加算すると、1に設定されたビット[127:70]、およびゼロに設定されたビット[69:0]が与えられる。
例4。F=280=44f0_0000_0000_0000。真の指数は80であるが、ここでの最大重みは76であり、そのためオーバーフローフラグを設定する。この場合では、ゼロ、またはことによると上位レーン内の最大値および他の場所のゼロを返すことを提案する(下位レーンはオーバーフローのことを知らないため、整数変換の例に従い最大整数を返すことができない)。これは深刻なエラーであり、そのため結果はいずれの場合も無意味になるであろう。
例5。F=無限大またはNaN。ゼロを返し、OFC(無限大)またはIOC(NaN)を設定する。
各レーンは、同じ方法で変換を行う。1つの方法は、レーンの64ビットのちょうど右に仮数部を位置付け、その後、値lshift=e−bias−Va[i]+1によって仮数部を左にシフトすることである。e’−biasが真の指数eであり、lshift値が負またはゼロである場合は、シフティングが行われないことに留意されたい。
概念上、シフタへの入力は、64個のゼロとその後の仮数部から成る64+53=117ビット値である(実際には、64個のゼロは入力上必要とされない)。シフタの出力は、レーンの64ビット値である。有意義なシフト距離(すなわち、仮数ビットをレーン内に出力することができるシフト距離)は、1から64+52=116の範囲である。この範囲外のLshift値は、常にゼロを返すことになるため、いかなるシフティングも必要としない。
実施例1では、e=−1であるため、上位レーンはlshift[1]=−1−14+1=−14を有し(負であるためシフトはなく、レーンはすべてゼロを含む)、下位レーンはlshift[0]=−1−(−50)+1=50を有し、そのためこのレーンの下位の50ビットは仮数部の上位50ビットを含む。
実施例2では、e=19であるため、lshift[1]=19−14+1=6(仮数部の上位6ビットがシフトインされる)であり、lshift[0]=19−(−50)+1=70である。仮数部の上位6ビットは、レーン0の64ビットを超えてシフトされるため、そのレーンに関しては破棄されることに留意されたい。
実施例3では、e=20であるため、lshift[1]=7であり、lshift[0]=71である。入力が負であるため、各レーンは、そのシフトした値の1の補数(および範囲外シフトについてはすべて1)を返す。128ビット加算器へのキャリーインは、変換または加算(HPA+FP)のための2の補数動作を完了するように設定される。減算(HPA−FP)については、変換はFP数を正として扱い、動作を加算に変更するべきである。
我々は、DP数のための3つの新たな命令を提案する。
1.ADDO_HPA_DP Vi,Va,F
オーバーフローを伴う加算:Vaのアンカー値を使用してFをHPAに変換し、その後Viに加算する。Fのビットが、Viにおける最大重みビットより大きい場合、または和が(整数)オーバーフローを引き起こす場合、オーバーフローフラグを設定する。この実施例では、Viの上位レーンのみがオーバーフローフラグを設定することができるため、実装形態は、そのレーンを下位レーンから区別することに留意されたい。
2.SUBO_HPA_DP Vi,Va,F
オーバーフローを伴う減算:Vaのアンカー値を使用してFをHPAに変換し、その後Viから減算する。Fのビットが、Viにおける最大重みビットより大きい場合、または差が(整数)オーバーフローを引き起こす場合、オーバーフローフラグを設定する。かさねて、この実施例では、Viの上位レーンのみがオーバーフローフラグを設定することができるため、実装形態は、そのレーンを下位レーンから区別することに留意されたい。
3.CVTO_HPA_DP Vi,Va,F
オーバーフローを伴う変換:Vaのアンカー値を使用してFをHPAに変換する。Fのビットが、Viにおける最大重みビットより大きい場合、オーバーフローフラグを設定する。かさねて、この実施例では、Viの上位レーンのみがオーバーフローフラグを設定することができるため、実装形態は、そのレーンを下位レーンから区別することに留意されたい。
少なくともいくつかの実施形態例において、これらの動作は、ベクトル長がSIMD実装形態に収まれば2つの完全パイプライン化サイクルで行うことができることに留意されたい。
SIMD実装形態よりも広いベクトルでは、変換および加算は、下位部分から上位部分へと、ばらばらに行われる。上述の多桁加算および減算命令でまさにそうであったように、より上位の部分は、より下位の部分によって生成されたキャリーフラグに対処し、そのため、それを行うバージョンの命令も存在する。
1.ADDCO_HPA_DP Vi,Va,F
キャリーおよびオーバーフローを伴う加算:Vaのアンカー値を使用してFをHPAに変換し、その後Viに加算する。キャリーフラグが高である場合、HPA数の整数部に1を加算する。Fのビットが、Viにおける最大重みビットより大きい場合、または和が(整数)オーバーフローを引き起こす場合、オーバーフローフラグを設定する。
2.SUBCO_HPA_DP Vi,Va,F
キャリーおよびオーバーフローを伴う減算:Vaのアンカー値を使用してFをHPAに変換し、その後Viから減算する。キャリーフラグが高である場合、HPA数の整数部に1を加算する。Fのビットが、Viにおける最大重みビットより大きい場合、または差が(整数)オーバーフローを引き起こす場合、オーバーフローフラグを設定する。
3.CVTCO_HPA_DP Vi,Va,F
キャリーおよびオーバーフローを伴う変換:Vaのアンカー値を使用してFをHPAに変換する。キャリーフラグが高である場合、HPA数の整数部に1を加算する。Fのビットが、Viにおける最大重みビットより大きい場合、オーバーフローフラグを設定する。
動作の下位部分がオーバーフローフラグを設定しないように、オーバーフローしないバージョンの命令も存在する。
1.ADD_HPA_DP Vi,Va,F
2.SUB_HPA_DP Vi,Va,F
3.CVT_HPA_DP Vi,Va,F
4.ADDC_HPA_DP Vi,Va,F
5.SUBC_HPA_DP Vi,Va,F
6.CVTC_HPA_DP Vi,Va,F
SP数について、類似した命令が存在する。
変換命令は厳密には必要でないが、それは、それらがHPA数の整数部がすべてゼロである加算命令と同等であるからである。
HPA数が128ビットのベクトルとして実装されると想定する。以下の実施例は、これらの命令がどのように使用され得るかを示す。
例6。HPA数は、128ビット値に収まる。すると、HPA数(V0,V10)へのDP数D0の加算は単純に、以下の通りである。
ADDO_HPA_DP V0,V10,D0
より上位の項が存在しないため、キャリーは必要とされないが、オーバーフロー検出は重要である。
例7。HPA数は256ビット幅であるが、ハードウェアは一度に128ビットを処理する。HPA数は、下位部分(V0,V10)と上位部分(V1,V11)とに分割される。DP数D0の加算は、今度は以下の通りである。
ADD_HPA_DP V0,V10,D0
ADDCO_HPA_DP V1,V11,D0
両方の命令が、同じDP数D0を受け取ることに留意されたい。このことが必要なのは、D0の仮数部のビットがどこに存在するのか、(V0,V10)内なのか、(V1,V11)内なのか、または両方のベクトルにわたって広がっているのかが、我々には分からないからである。下位ビットから出るオーバーフローは問題にならないため、下位部分はオーバーフロー検出なしで加算される。上位部分は、下位部分からのキャリーを処理しなければならず、上位ビットから出るオーバーフローは常に問題となることからオーバーフローも検出する。
例8。HPA数は384ビット幅であるが、ハードウェアは一度に128ビットを処理する。HPA数は、下位部分(V0,V10)と、中間部分(V1,V11)と、上位部分(V2,V12)とに分割される。
ADD_HPA_DP V0,V10,D0
ADDC_HPA_DP V1,V11,D0
ADDCO_HPA_DP V2,V12,D0
実施例に概説されたものと同じ理由で、3つすべての命令が同じDP数D0を受け取ることに留意されたい。下位部分および中間部分から出るオーバーフローは問題にならないため、これらの部分両方がオーバーフロー検出なしで加算される。中間部分は、下位部分のキャリーアウトに対処する必要がある。上位部分は、中間部分からのキャリーを処理しなければならず、上位ビットから出るオーバーフローは常に問題となることからオーバーフローも検出する。
例9。HPA数は、128ビット値に収まる。すると、HPA数(V0,V10)からのDP数D0の減算は単純に、以下の通りである。
SUBO_HPA_DP V0,V10,D0
より上位の項が存在しないため、キャリーは必要とされないが、オーバーフロー検出は重要である。減算は、D0が変換された128ビット項を反転し、その後1を加算する、通常の方法で行われる。
例10。HPA数は384ビット幅であるが、ハードウェアは一度に128ビットを処理する。HPA数は、下位部分(V0,V10)と、中間部分(V1,V11)と、上位部分(V2,V12)とに分割される。
SUB_HPA_DP V0,V10,D0
SUBC_HPA_DP V1,V11,D0
SUBCO_HPA_DP V2,V12,D0
実施例に概説されたものと同じ理由で、3つすべての命令が同じDP数D0を受け取ることに留意されたい。この実施例では、すべての場合において、減算される数は反転され(1の補数)、しかし2の補数動作を完了するためのキャリーインは、この実施例では、下位命令であるSUB_HPA_DPのためにしか生成されない。2の補数動作を完了するためのキャリーインは、この実施例では、非キャリーバージョンの減算動作、SUB_HPA_DPおよびSUBO_HPA_DPのためにしか設定されない。この時点で、命令は、まさに実施例3の加算のように進行する。
HPAからFPへの変換
上記のように、HPA数(i,a)はベクトル表現(Vi,Va)も有するものと見なし、ここで、Viは64ビット整数のベクトルであり、Vaは、重みVa[0]=aおよびi>0についてはVa[i]=Va[i−1]+64のベクトルである。FPに変換するためには、Viの符号を記録し、Viにおける第1の非符号ビットを見出し、それと形式により指定される数の後続ビット(DPでは52、SPでは23)とから仮数部を構築し、仮数部を丸め、第1のビットの場所および対応する重みから適切な指数を構築する必要がある。
簡略化のために、(i,a)をDP(53ビット仮数部)に変換していると仮定しよう。より詳細には、変換ステップは以下の通りである。
1.符号ビットは、iの上位ビットである。それが設定されている場合、HPA数は負であり、それが正数になるように符号反転される。これを行う方法の1つは、HPA数の整数部をゼロから減算することである。元々の符号はFP数の構築に必要とされるために記憶されるが、この変換の残りでは、変換されている値は非負であると仮定される。
2.上位レーンから開始して、各レーンは、先行ゼロカウント(count leading zero)動作(CLZ)を行って、レーン内の最初の1の前のゼロの数を判定する。この数、すなわち先行ゼロ数(LZC)は、1が存在する場合は0〜63の範囲である。1が見出されれば、レーンは、そのビット位置から開始してk=min(64−LZC,53)ビットの仮数部を返し、64−LZC>53である場合、仮数部の右側の次のビット(G)を返し、64−LZC>54である場合、Gの右側のすべてのビット(S)の論理ORを返す。レーンjからのこの情報のすべてが、レーンj−1の上位ビットから取るべき仮数部のビット数である計数53−kと共に、次のレーンj−1に渡される。図5は、様々なLZCの2つの隣接するレーンから仮数部がどのように構築されるかを示す。最初の1がレーンjで見出された場合、そのレーンのアンカーを使用して、(バイアスなしの)指数:e=Va[j]+63-LZCを計算する。
3.符号、指数、仮数部、G、およびSは、下位レーンに達するまで右側に動かされる。各中間レーン(下位レーンを含む)は、そのビットのすべての論理ORを用いてSを更新する。下位レーンは、DP数を構築し、何であれ指定された丸めモードに従ってそれを丸める。
HPAからFPへの変換は、FPからHPAよりもわずかに遅い。記載のように実装された場合、128ビットのHPA数は、FP出力を構築するのに3サイクル(HPA数を正にするために1サイクル、上位レーンを処理するために1サイクル、そして下位レーンを処理し丸められた結果をもたらすために1サイクル)を要することになる。累算毎にそのような変換が1つ存在するため、このことが問題になる可能性は低い。より大きな実装形態、例えば256または512ビットのベクトルでは、LZCおよびレーン結果がレーン毎にすべて同時に計算され、個別のレーン結果が二進方式で組み合わせられる、より並列な手法の使用が望まれ得る。
積和
上述の構築物は、積和を処理するように拡張することができる。丸められた積を加算したい場合は何の変更も必要なく、任意の他のFP数と同様にただ乗算し、その後その積を加算するだけである。丸められていない完全長の積を累算するには、新たな命令が必要になる。
1.MADD_HPA_DP Vi,Va,Dn,Dk。乗算−累算:丸めなしでDn*Dkを計算し(すなわち、完全な106ビットの仮数部積を保持し)、その後、Vaのアンカー値を使用してその積をHPAに変換し、その後、変換された積をViに加算する。
2.MADDO_HPA_DP Vi,Va,Dn,Dk。MADD_HPA_DPと同じだが、変換または加算がオーバーフロー(この実施例では上位レーンのみ)を引き起こした場合、オーバーフローフラグを設定する。
3.MADDC_HPA_DP Vi,Va,Dn,Dk。MADD_HPA_DPと同じだが、キャリーに応答もする。
4.MADDCO_HPA_DP Vi,Va,Dn,Dk。MADD_HPA_DPと同じだが、キャリーに応答もし、変換または加算がオーバーフロー(この実施例では上位レーンのみ)を引き起こした場合、オーバーフローフラグを設定する。
少なくともいくつかの実施形態例において、これらの命令は、5サイクル(乗算に3サイクル、HPAへの変換に1サイクル、そしてHPA加算に1サイクル)を要することになると予測される。変換は上に示したものと本質的に同じだが、3つの64ビットレーンに及び得る、より幅広の仮数部を用いる。単一のDP数を各レーンにブロードキャストする代わりに、倍長のDP積が各レーンにブロードキャストされる。
乗算・HPA変換命令は単に、Vi=0のMADD命令である。当然ながら、SPの変種、また場合により乗算−減算の変種が存在するであろう。
これらの命令は依然として完全にパイプライン化されており、各サイクルで発行され得るため、HPA数がハードウェア長レジスタ内に収まる場合、n個の積の和はn+4サイクルを要することになる。
高正確度入力、およびスカラー値によるHPA数の乗算
多項式近似、またはテイラー級数、または初等関数のための範囲縮小など、高い内部正確度を必要とするある特定のアプリケーションでは、FP入力で表現することができるHPA数により高い正確度を含めることが有用であり得る。例えば、定数1/piを128ビット以上の正確度で表現することが望まれる場合がある。これは、所望の値を計算し、それを(64ビットのベクトル部分における)長整数として、正しいアンカーと一緒に記憶することによって、容易に達成される。結果として得られるHPA数は、いずれの他のものとも同様に使用することができる。
HPA数(i,a)にFP数fを乗算することが望まれる場合がある。fが仮数部sと真の指数eとを有する場合、その結果はHPA数(i*s,a+e)である。(i,a)がベクトル(Vi,Va)によって表現される場合、これを行う方法の1つは、上位および下位部分を有するスカラー乗算によるベクトルを用いるものである。
MUL_VEC_SCALAR_low Vd,Vi,s
は、Viの64ビットコンポーネントのそれぞれにスカラー64ビットsを乗算し、各レーンが、Vdの対応する部分内にある積の下位64ビットを返す。
MUL_VEC_SCALAR_high Vd,Vi,s
は、Viの64ビットコンポーネントのそれぞれにスカラー64ビットsを乗算し、各レーンが、Vdの対応する部分内にある積の上位64ビットを返す。
上位部分はその後、下位部分に加算され得るようにシフトされる。アンカーは、aおよびeを加算する別々の命令、またはVa内のエントリのそれぞれにeを加算するスカラー加算によるベクトルによって調整され得る。
積(i*s,a+e)は、元々の(i,a)よりも多くのビットを整数部内に有するため、元々の正確度に再変換し、結果アンカーを調整する命令を有することが有用であり得る。
アプリケーション
この節では、サンプルアプリケーションを使用して、いくつかの実施形態例におけるHPAの性能およびエネルギー利益の一部を示す。
アプリケーション1。HPAを使用してn個のFP項目を加算する(ここで、HPA数はハードウェアサイズに収まる(例えば、128ビットSIMD上の128ビットHPA))。変換・加算命令は2サイクルの待ち時間を有し、1サイクル当たり1つのHPA加算のスループットで完全パイプライン化されている。図6は、HPA数(Vi,Va)への4つのFP数の加算を示す。命令は上から下に進み、サイクルは左から右に読み取られ、したがってサイクル1では、第1の加算命令がFP−HPA変換(表中C)を行っており、サイクル2では、第1の加算命令からの変換値が加算され(表中A)、同時に第2の加算命令がそのFP−HPA変換(C)を行っている。
概して、演算が結合的かつ(プログラマによって指定される正確度まで)正しいため、n個の値は、n+1のサイクルで加算することができる。対照的に、C規則に従って行われる通常のFP加算は、a×nのサイクル(ここでaはFP加算の待ち時間である)、つまりARMの最速のFPU上で3nのサイクルを要することになる。これすら、HPAの利点を控えめに述べるものである。ARMの「大型」コアは2つの128ビットSIMD整数パイプラインを有し、HPA加算が結合的であることから、容易に2つの累算器を使用し、n個のFP数を約n/2のサイクルで累算し、その後2つの累算器の値を加算して最終和を得ることができる。これは、ARMコア上でのHPA累算が、同じコア上でのFP累算よりも6倍素早くなり得ることを意味する。
アプリケーション2。HPAを使用してn個のFP項目を加算する(ここで、HPA数はSIMDハードウェアサイズよりも幅広である(例えば、128ビットSIMD上の256ビットHPA))。変換・加算命令は依然として同じ待ち時間を有するが、各HPA値につき2つの変換および加算が必要である。図7は、HPA数(Vi,Va)への2つのFP数の加算を示す。ViおよびVaは、上位および下位部分に分けられ、各FP数はまず下位部分に加算され、その後、より下位の部分のキャリーアウトと共に上位部分に加算される。
n個の項目をこの方法で加算するには、2n+1のサイクルを要するが、それでもFP累算より素早い。アプリケーション1で示したように、第2のSIMDユニットを使用することにより、この待ち時間を半減させることもできる。
アプリケーション3。FP AMRコーデック。このコーデックは、その処理時間の大部分を、DPを使用して40個のSP積を加算しSPに再変換する単純なサブルーチンDotproduct40に費やす。このサブルーチンは当然、切り捨て誤差がSPにおいて問題含みであったため、累算にDPを使用する。ARMの最速FPU上では、このルーチンは最低126サイクル(40のSP乗算、40のSP−DP変換、39のDP加算、加えて1のSPへの再変換)を要するであろう。C順序付け規則のため、DP加算単独で39×3=117サイクルを要する。HPAを使用して同じことを行えば、Dotproduct40は、1つのSIMDユニット上で47サイクル(40のHPA乗算−加算、および1のHPA−SP変換)において行われ得る。アプリケーション1で示したように、第2のSIMDユニットを使用することにより、この待ち時間を半減させることもできる。より素早いことに加えて、HPAソリューションは、大幅に少ない制御論理を使用し(命令の約1/3、多数のフェッチ、デコード、発行、およびリタイアリソースを節約する)、そのため、大幅に少ない電力を要すると考えられる。大幅に少ないエネルギーを要するのは確かであろう。
アプリケーション4。密行列乗算、最も単純なアルゴリズム。これは、すべての行にすべての列を掛けた一連のドット積である。HPA乗算−加算は、いかなる数のプロセッサ上でも再現可能な(そして正しい)方法でこれを行うことができる。高速化は、単一のプロセッサで3または6倍となり得、並列処理を使用する能力のおかげではるかに大規模な高速化が可能である。
例外
HPAの範囲縮小のため、範囲外の数が生じる可能性が大幅に高い。プログラマが正しい境界を確立することができるようなツールおよび手段を提供する必要があるが、特に、境界が侵害されたときに情報を提供する必要がある。我々は、アンダーフロー(underflow)、不正確(inexact)、およびオーバーフロー例外(overflow exception)(FPにより使用される例外と同じ例外、さもなければ新たなHPA特有の例外のいずれか)を使用して境界問題を示すことを提案する。
256ビットHPA数(i,a)があると想定する。下位側にa、そして上位側にa+254の、2つの境界が存在する。重みが2未満のビットを有するあらゆるFP数は、変換時に何らかの情報を失うことになる。プログラマは重みaを選ぶことによって2未満の値が重要でないことを示しているので、これは通常問題にならない。そうは言っても、ビットが失われた事実にフラグを立てる必要がまだある。これを行う方法の1つは、HPAへの変換が下位側のいくつかのビットを破棄するときに不正確フラグを、そしてFP入力全体が破棄されるときにアンダーフローフラグを設定することである。この実施例では、これらの計算は、その非桁上げ命令(non−carrying instructions)については下位レーンにしか適用されないため、実装形態は、そのレーンを区別することができるはずである。
a+254よりも大きなマグニチュードを有する数の変換は、オーバーフロー例外を設定し、これは常に、プログラムが異なるアンカーを使用して再計算することを要する深刻な問題である。同じ例外が整数加算器におけるオーバーフローに対して起こり、この場合もやはり、解決策は異なるアンカーを使用して再計算することである。HPAプログラムは、プログラムの結果が有意義であるかどうかを確認するためにオーバーフローフラグを調べる必要がある。
ほとんどの累算は、FP数の範囲のごく一部を使用するため、それらは、HPA数を使用してより素早くかつ正しく計算することができる。HPA累算は、再現可能かつ並列化可能であり、データ境界を割り出した後は、プログラマにとってFPよりさほど難しくない。当然ながら、FPの結合性の欠如が問題を引き起こす場合では、HPAはプログラマにとって大幅に容易である。FPが不良な結果をもたらす状況を分析するために訓練されている人々は非常に少ない。ありがちな応答の1つは、より幅広いFP形式を使用して再符号化することであるが、このことは、DPより大きなものすべてに対して不良な成果を有する。HPAの使用は、より良好な成果をもたらし、切り捨て問題のうち最も有害なものを排除する。
HPAはまた、実装が簡単であり、ARMのSIMDユニットに適度な変更を要する。これらの変更はSIMDユニット自体に面積および電力を少しだけ追加するが、コアレベルでは電力そして特にエネルギーは大幅に低くなる。実行ユニットは、アウトオブオーダーマシン(out−of−order machine)においてエネルギーが主に費やされる場所ではなく、累算の高速化により、エネルギーが費やされている場所で制御論理を停止することが可能になる。
図8は、プログラム命令の制御下でデータ処理動作を実行するためのデータ処理装置2を概略的に例示する。データ処理装置2は、プログラム命令6と操作されるデータ8とを記憶するメモリ4を備える。プロセッサコア10は、メモリ4に連結されており、レジスタバンク12、処理回路14、命令フェッチユニット16、命令パイプラインユニット18、および命令デコーダ20を含む。実際にはデータ処理システム2は多くの付加的な要素を含み得ること、また図8の表現は理解を助けるために簡略化されていることは理解されるであろう。動作中、プログラム命令6は、命令フェッチユニット16によってメモリ4からフェッチされ、命令パイプライン18に供給される。プログラム命令が命令パイプライン18内の適切な段階に達すると、それらは命令デコーダ20によってデコードされ、デコードされたプログラム命令によって指定される処理動作(複数可)を実行するようにレジスタバンク12および処理回路14の動作を制御するよう機能する制御信号を生成する。複数の入力オペランドがレジスタバンク12から読み取られ、処理回路14に供給されてもよく、ここでそれらは操作され、その後、結果値がレジスタバンク12に書き戻される。
レジスタバンク12は、多様な異なる形態を有することができる。操作されるオペランドとしては、例えば、浮動小数点オペランド、固定小数点オペランド、整数オペランド、およびHPA数オペランド(後述される)を挙げることができる。レジスタバンク12は、レジスタバンク12の構成に応じて、これらの種類の混合型のオペランドを記憶するように機能してもよい。オペランドは、それらの形式によって予め定義され得るように、またはHPA数オペランドに関連して後述されるようにレジスタに関連付けられたメタデータを使用してプログラム可能に指定され得るように、異なるレベルの精度を有し得る。
図9は、浮動小数点オペランドを概略的に例示する。浮動小数点オペランドは通常、符号、指数、および仮数部から形成される。浮動小数点オペランドは、それらの指数値によって指示される多種多様なマグニチュードを有する値を表現することができる。数が表現され得る精度は、仮数部のサイズによって限定される。浮動小数点動作は典型的に、整数演算よりも複雑であり、実装が遅い。
図9はまた、64ビットの整数オペランドを例示する。このような整数オペランドは、符号なし整数では0〜(264−1)、または符号付き整数では−263〜263−1の範囲内の数を表現することができる。整数演算は典型的に迅速であり、実行に比較的少ないエネルギーを消費するが、比較的限定された範囲の値をもつ数が、浮動小数点値により表現され得る数の範囲と比較して指定される場合があるという不利点を有する。
図9はまた、それぞれ64ビット整数を含む複数コンポーネント(この実施例では3つ)のベクトルを含むHPA数を例示する。HPA数は、それに関連付けられたメタデータを有する。メタデータは、HPA数の一部を形成するコンポーネントのビットのプログラム可能な有効度を示すアンカー値を含む。アンカー値(複数可)は、ビット有効度の下方境界およびビット有効度の上方境界を、直接的または間接的に指定する。以下で使用するメタデータという用語は、HPA数のビット有効度を指定するアンカー値(複数可)を含むデータに対応するものと見なすことができる。異なるコンポーネントが一緒に、ビット有効度のこの範囲に隣接して広がるビット値を指定する。ビット有効度の下方境界およびビット有効度の上方境界の位置に応じて、ビット有効度の範囲は、二進小数点位置を含み得る。二進小数点位置が、特定のHPA値について指定されたビット有効度の範囲外に位置し得る可能性もある。
アンカー値(複数可)は、ある浮動小数点値(例えば倍精度FP値)によって表現され得る最小の有効度に対応するビット有効度の下方境界から、その浮動小数点値によって表現され得る最高のビット有効度に対応するビット有効度の上方境界まで及ぶ、ある範囲のビット有効度を表現することができるように提供されてもよい。
HPA数を形成するコンポーネントの数は、異なる実装形態間で様々であり得る。コンポーネントのサイズは、一部の実施形態では固定されていてもよいが、他の実施形態では異なってもよい。範囲ビット有効度の全体幅は、一部の実施形態では、固定されたコンポーネントサイズのユニットで変化するように制約され得る(例えば64ビットコンポーネントでは、ビット有効度の範囲は、例えば64、128、192、256、…の幅を有し得る)。ビット有効度の範囲の幅が1ビット幅のステップで連続的に変動し得る可能性もある。
前述のように、(メタデータ内の)アンカー値(複数可)は、プログラム可能なビット有効度を多様な異なる方法で指定し得る。一例は、各ベクトルコンポーネントの下方境界ビット有効度を指定することである。したがって、各ベクトルコンポーネントは、そのコンポーネント内の最下位ビットの有効度を表す(アンカリングする)メタデータと一緒に、ビット有効度の全体範囲内にあるその有効ビットの部分を表す整数値を含み得る。別の選択肢は、アンカー値(複数可)が、ビット有効度の範囲の全幅と一緒にHPA数全体のビット有効度の下方境界を指定することである。さらなる選択肢は、アンカー値(複数可)が、ビット有効度の範囲の下方境界および上方境界を指定するデータを含み得ることである。固定幅コンポーネントであることが既知であるコンポーネントの数と一緒にビット有効度の範囲の下方境界を含むアンカー値(複数可)といった、なおもさらなるバリエーションも可能である。
図10は、倍精度浮動小数点により表現可能な値のサイズとHPA数の有効度範囲との間の関係を概略的に例示する。倍精度浮動小数点数の場合では、指定され得るビット値のサイズは、およそ2−1022〜2+1023に及ぶ(非正規数は計数していない)。2を表す二進値は、この範囲のおよそ中間に位置する。
例示されるように、HPA数は、浮動小数点値を使用して表現可能なビット有効度の範囲内のビット有効度の枠(window)として見なされ得る、プログラム可能なビット有効度範囲を有する。このプログラム可能なビット有効度は、下方境界および上方境界によって指定され得、下方境界と上方境界との値に応じて、浮動小数点値により提供されるビット有効度の範囲に沿ってスライドすると見なされ得る。枠の幅、ならびにその始点および終点は、ビット有効度を指定する(アンカー値(複数可)を含む)プログラム可能なメタデータの適切な値によって指定され得る。したがって、HPA数は、実行される計算に適合するようにプログラマによって選択される形態を有し得る。
図11は、図1の処理回路14の一部を形成し得る回路22を概略的に例示する。回路22は整合回路24、26を含み、これらは、結果レジスタ28に対して指定され、結果レジスタ28に関連付けられた(アンカー値(複数可)を記憶する)メタデータ記憶装置30内に記憶された、プログラム可能な有効度値に従って、入力オペランドに対して整合動作を実行するように機能する。入力オペランドは、浮動小数点数、固定小数点数、整数値、HPA数、またはこれらの混合物であり得、それらの整数ビットの値が、結果レジスタ28内に記憶されるべき結果値が決定される前に結果レジスタ28に対して指定されたビット有効度と整合されるように、整合される。整合回路24、26は、演算回路32に供給される、整合された入力オペランドを生成する。演算回路32は、例えば、整数加算器または整数乗算器であり得、これは、整合された入力オペランドを整数値として扱い、それに従って、比較的高速かつ低エネルギーの演算動作をこれらの整合された入力オペランドに対して実行する。演算回路32によって生成された結果値は、結果レジスタ28のプログラム可能な有効度に既に整合されており、結果レジスタ28内にHPA数として記憶される。
整合回路24、26に供給される入力オペランドのうちの1つ以上が浮動小数点値である場合には、整合回路24、26は、結果レジスタ28に対して指定されたビット有効度と一致するように浮動小数点値の仮数部がどのように整合されるべきかを判断する際に、浮動小数点値の指数値にも応答する。
メタデータ記憶素子30内に記憶されたプログラム可能なビット有効度パラメータ(アンカー値(複数可))は、演算回路32によって生成される整合された結果値とは独立しているため、HPA数の正規化が実行されないことは理解されるであろう。したがって、以後説明するように、HPA数に実行される処理に関連して、オーバーフロー、アンダーフロー、および他の例外条件が可能である。
図11の例において、プログラム可能な有効度パラメータ(アンカー値(複数可))は、処理が実行される前にメタデータ記憶素子30内に記憶される。他の実施形態では、結果レジスタ28のプログラム可能な有効度パラメータは、入力オペランドのうちの1つ以上がHPAオペランドである場合、それらと関連付けられたプログラム可能な有効度パラメータから取られ得る(例えば、HPA入力オペランドのいずれかのプログラム可能な有効度パラメータのうち最大のものが取られ、結果レジスタ28のプログラム可能な有効度パラメータとして使用され得る)可能性もある。
図12は、いくつかの実施形態例において図1の処理回路14の一部を形成し得る回路を概略的に例示する。この回路34は、それぞれのベクトル記憶素子36、38、40、42内に記憶された複数コンポーネントを含むベクトルの形態のHPA数に処理を実行する。メタデータ記憶素子44(例えばメタデータレジスタ)は、少なくともいくつのコンポーネントが特定のベクトルHPA数を形成するかを含むメタデータを記憶するように機能する。そのベクトルのうち有効度が最も低いコンポーネントがベクトル記憶素子42内に記憶され、有効度がより上位のコンポーネントは、必要に応じてベクトル記憶素子40、38、36内に記憶される。
回路34は、ベクトルHPA数のそれぞれのコンポーネントに関連付けられ、実行されているプログラム命令によって指定される加算、減算、および乗算などの動作を実行するように構成され得る、処理回路46、48、50、52をさらに含む。実際には、処理回路46、48、50、および52により実行される処理は、いくつのコンポーネントがベクトルHPA数値を構成するかと、実行されているプログラム命令との両方に依存する。具体的には、ベクトルHPA数が複数コンポーネントから構成されている場合、キャリーアウト値は、最小有効ビット側から開始して処理回路46、48、50、52の異なる部分間に伝搬する。
図12に示される例では、4つの別々の処理レーンが例示されている。ベクトルHPA数が4つのコンポーネントを含む場合、これら4つのレーンのすべてが並列に使用され得る。HPA数が2つのコンポーネントを含む場合、そのような2コンポーネントHPA数が2つ並列で図12の回路内において処理され得、処理回路50および48のコンポーネント間でキャリーを実行しないことも可能である。
図13は、図12の回路の変種を例示する。図13の回路54において、ベクトルHPA数値は、この場合もやはり、プログラム命令により指定される処理に依存する。この場合、処理回路58は、プログラム命令と、いくつのコンポーネントがベクトルHPA数内に存在するかを示すメタデータとに従って、マイクロ動作生成回路60によって生成される、マイクロ動作命令によって制御される。具体的には、2つの4コンポーネントHPA数間の加算を実行するために4つのペアのコンポーネントが加算される必要がある場合、これら4つの加算は、処理回路58によって連続して実行される。これらの加算のうち最初のものは、キャリーイン入力を有せず、マイクロ動作命令ADDによって表現され得る。次の3つの加算は、前の加算からキャリー入力を受け取り、マイクロ動作命令ADDCによって指定され得る。最終結果のベクトルHPA数が、結果レジスタ62に書き込まれる。
図14は、図1の処理回路14の一部を形成し得る回路64を概略的に例示する。回路64は図11のものと同様だが、この場合は例外生成回路66を付加的に含む。例外生成回路66は、整合回路68、70および処理回路72からの入力に応答して、多様な例外条件の発生を識別する。これらの例外条件は、入力オペランドのうちの1つが非正規浮動小数点数である;ある数の形式間での変換が不正確であった;生成された結果値が結果レジスタ74のプログラム可能な有効度範囲をアンダーフローさせた;生成された結果値が結果レジスタ74のプログラム可能な範囲の有効度をオーバーフローさせ、ある入力オペランドが無限大の値を有する;非数である;または符号なしの目標値に変換されるときに符号付き値である、という条件のうちの1つ以上を含み得る。様々な他の形態の例外指示が可能であることは理解されるであろう。例外は、それらが発生するとき、大域的例外記憶装置76内に注記され得る。代替的に、例外は、個別のHPA数と関連付けられ、これらのHPA値と関連付けられたメタデータの一部を形成してもよい。他の構成も可能である。
本開示の少なくともいくつかの実施形態は、浮動小数点(FP)値を表すHPA数の変換および演算例外を処理するための方法を含む。いくつかの実施形態の目標は、FP数を加算する際にもたらされるであろうものと同じ例外(不正確以外)をもたらすこと(例えば、+無限大を−無限大に加算するとNaNおよび無効動作例外IOCが返される)、ならびに、アンカーベクトルによって指定された有効度が小さすぎるかどうかを検出するために必要な情報をプログラマに与えることであり得る。
完全幅または部分幅の浮動小数点値を表現するためのHPAデータタイプの使用は、IEEE 754例外処理の問題を引き起こす。表2は、DZC(ゼロによる除算、変換ではなく除算中に起こる例外)以外のFP例外のエントリ、ならびに無限大、NaN、および符号に対するメタデータエントリを含む。これらの例外は、大域的な例外ワードに直ちに記録されてもよいし、またはHPAデータタイプが標準的なFPデータタイプ(SPまたはDP)に変換された後に記録されてもよいし、または大域的なワードに一度も記録されなくてもよい。それらは、そのデータタイプのメタデータに組み込まれても組み込まれなくてもよい。一部は非標準的な例外であり、その他はIEEE 754指定である。
表2のFP−>intおよびint−>FP列は、FPと64または32ビット整数との間のIEEE−754変換中に何が起こるかを示す。これらは、IEEE−754の挙動に関する手引きを提供するために含まれている。最後の3つの列は、HPA値が関与する変換および加算に対してどの例外が可能であるか、ならびにこれらの動作が無限大およびNaNにどのように対処することができるかを示す。
HPA数ベクトルがFPタイプを正確に表現するのに十分大きければ、例外のほとんどは起こらないであろう。あらゆる有限FP数には特有のHPA数が存在するため、HPA数への変換では、オーバーフローおよびアンダーフローは発生しないはずであり、不正確ですら発生しないはずである。加算および減算はアンダーフローを引き起こすことができず、またそれらは正確であるため、例外は生じないはずである。最後に、最大限のHPA精度が使用されれば、FPへの再変換はアンダーフローしないはずである。
オーバーフローは、加算とFPへの再変換との両方で起こり得る。単純に最大の正FP数のHPA等価物をそれ自体に加算すると、(HPA数にいくつのビットを与えるかに応じて)加算をオーバーフローさせ得る結果がもたらされ、それはFPへの再変換をオーバーフローさせる。
より小さなベクトルを使用すれば(性能の理由でプログラマが行いたいであろうこと)、例外のうちより多くが可能になる。さらに、この演算でなし得る1つの目的は再現可能かつ正確であることであるため、これらの例外はプログラマにとって有意義となる。概して、オーバーフロー、アンダーフロー、または不正確があるということは、HPA数を記憶するにはより大きなベクトルが必要であることを示す。
表2は、例外指示を処理/生成する一実施形態の一例であり、例外ビットの他の定義および他の状況が可能であり得る。「FP−>int」という列は、標準的な浮動小数点データタイプ(例えば、SPおよびDP)から標準的な整数形式(完全または任意精度)への変換であり、「int−>FP」は、逆変換であり、「FP−>AHP」は、標準的な浮動小数点形式またはFP値の計算された積からHPAデータタイプへの変換であり、「HPA−>FP」は、HPAデータタイプから標準的なFP形式への逆変換であり、「AP加算/減算」は、HPAデータの加算または減算を考察する。
表2は、どの例外が可能であるか(yによって示される)、どの例外が起こり得ないか(「いいえ(no)」のnまたは「該当なし(not applicable)」のNAによって示される)を示し、脚注は、例外的挙動をより詳細に説明する。

(a)整数より小さい数は、例外フラグを設定することなくゼロに変換される。
(b)整数が保持できるより大きい数は、最大の正整数または最大の負整数に変換され、ofcではなくiocが返される。
(c)整数が保持できるより大きい数、符号なし形式に変換された負数、入力無限大、または入力NaNは、すべて無効である。返される整数は、ゼロ、または最大正数もしくは最大負数である。
(d)これらは、最大の正整数または最大の負整数に変換され、IOCを返す。
(e)これらは、ゼロに変換され、IOCを返す。
(f)十分大きな宛先(destination)ベクトルを考慮すると、この例外は起こらないが、プログラマはより小さな宛先を指定することができる(プログラマが、すべての入力が2^−100〜2^+100の範囲内にあることを知っているとして)。このフラグは、プログラマが間違っていたことを示す。
(g)(f)のように、このフラグは、プログラマのエラー、すなわち入力値が所与のアンカー固定点範囲内で表現され得るものよりも小さいことを示し得る。プログラマが行おうとしていることに応じて、これは深刻である場合もそうでない場合もある(例えば、プログラマは、とても小さな数を破棄したいかもしれない)。一部の実装形態では、IXCとUFCとの組み合わせは付加的情報をもたらす。UFCは、ビットのうちのいずれも変換されなかったことしか意味しないが、UFCおよびIXCは、部分的変換を意味する。部分的変換を丸めるための試みは行われない。
(h)このフラグは、深刻な問題、すなわち入力値が所与のHPAベクトルにおいて表現され得るものよりも大きいことを示す。(g)と同様に、変換の部分的な成功を示すためにIXCフラグを使用することになるが、いかなる場合でもこのフラグは、より大きなHPAベクトルを用いた再試行が必要であることを示す。
(i)このフラグは、深刻な問題を示す。我々は、それを入力無限大またはNaNに設定し、(符号なしHPA形式を作る場合は)負の非ゼロを符号なしHPA形式に変換することを提案する。入力無限大またはNaNは、メタデータフラグを調整する必要もある。
(j)以下のメタデータの説明を参照されたい。無限大およびNaNの記号が関与するFP計算と同じ結果をもたらすためには、所与の数が無限大またはNaNであるという何らかの指示、ならびに無限大の符号が必要である。これらは、HPA数の作成中に生成された例外の何らかの記録と一緒に、理想的には第2のメタデータベクトルの一部として、HPA数と共に記憶されるのが最良である。
本開示の少なくともいくつかの実施形態は、HPA数もしくは整数、すなわち、64ビットより幅広の数を加算または減算するために、SIMD様ハードウェアを使用することを含む。拡張可能なレジスタを使用すると、一部の実装形態では、何であれ実装されるベクトル長の単一サイクル加算を用いて、数千ビット長の数を加算することが可能となり得る(少なくとも、あり得そうな実装形態については)。
SIMD様システムは、拡張可能なベクトルレジスタを含み得、これらのレジスタは、複数の64ビット値を含むことができる。新たな加算および減算命令の目的のために、拡張可能なベクトルレジスタが、n個の64ビット数のレジスタではなく、1つの長い64*nビットの2の補数整数と見なされることが提案される。SIMDスキームに従って、加算または減算は、ハードウェアによって実装時定義のチャンク(例えば256ビットまたは512ビット)に分割され、下位チャンクから上位チャンクに加算される。各チャンクは、単一サイクルで実行し得る(少なくとも最大1024ビットのチャンク)。
チャンクがキャリーアウトを生成する場合、そのキャリーアウトは、次のチャンクへの入力であり得る。これは、述語条件フラグを使用して指示/制御することができる。これは、述語条件の非標準的用途である。
チャンクに対する各加算または減算は、キャリー述語条件フラグ(以降PCARRYと称す)の読み書きの両方を行い、PCARRYが設定された場合は加算または減算へのキャリーインを設定し、その後そのチャンクからのキャリーアウトの存在に基づいてPCARRYを設定またはクリアする。
減算は、通常の2の補数方法、すなわち、A−B=A+〜B+1で行われ得る。+1は、下位チャンク(キャリーを生成するためにより下位のものが何も存在しないため、これは使用されない)へのキャリーインとして処理されることになる。
チャンクに対する単一サイクル加算は、既存の64ビット加算器を使用して行われ、チャンクサイズが何であれ、加算を拡張するために桁上げ選択論理が使用される。いくつかの64−b加算器から構築された256ビット加算器の一例が、図1に示されている。
代替的な「桁上げ先見」手法(図2に例示される)を用いて、図2に示される加算器に沿ったキャリー入力を加速することができ、ここで、gは、64−bキャリー生成信号であり、pは、64−bキャリー伝搬信号であり、Gn:0は、有効度64×(n+1)から下の64−b加算器生成および伝搬信号をすべて合わせたキャリー信号である。
桁上げ先見手法は、最大1024ビットのサイズの和の単一サイクル実行を可能にし得る。
加算/減算命令が述語レジスタも使用した場合、述語ビットを使用して、キャリーが任意の所与の64ビット境界で伝搬し得るか否かを制御してもよい。これにより、ベクトルが、128ビットまたはより大きな整数値を複数含むことが可能になるであろう。つまり、1024ビットベクトルレジスタは、16個の64ビット値、または4個の256ビット値、または単一の1024ビット値と見なされ得、単一の加算命令がすべての場合で正しく機能するであろう。
これの可能な実装形態の1つは、「PCARRYを有効にする(enable PCARRY)」を意味する述語ビットを有することであり、これは、いずれかの64ビット要素について設定されると、その特定の加算器へのキャリーインを可能にする。このより一般的なスキームにおける減算(A−B)は、(すべての64ビット位置において)Bを反転させ、「PCARRYを有効にする」ビットが設定されていない場所で1を加算することによって実装される。
このスキームは、既存の加算命令が現在動作するのと全く同じように動作することを可能にするが(「PCARRYを有効にする」ビットが設定されていなければ)、入力ベクトルが、より高精度の数の任意の混合物を含むものと解釈されることも可能にするであろう。表3にあるように、「PCARRYを有効にする」ビットを含んだ述語と併せて512ビットベクトルの加算を考察する。

ケース(a)では、新たな述語ビット(PCiと表記される)のうちのいずれも設定されておらず、そのためこの加算は、8個の64ビット値のそれぞれの別々の加算と解釈される。
ケース(b)では、述語ビットが、奇数の64ビットレジスタから偶数の64ビットレジスタへのキャリーを可能にし、これは、加算が今度は128ビット値を扱っていることを意味する。
(c)および(d)では、これらのキャリーが、漸進的に大きな数に許可される。
ケース(e)は、所与のベクトルに関して混合解釈すら可能であることを示す。
図15は、1つ以上のオペランドを受信し、そのオペランドに応答して結果を生成する処理回路102を備える装置の一例を示す。処理回路は、結果値の目標有効度および目標サイズ(長さ)のうち少なくとも1つを指定するプログラム可能な制御データ104を受信する。プログラム可能な制御データC4に応答して、処理回路102は、処理回路102に供給されたオペランドの値に関係なく、目標有効度および/または目標サイズを有する結果値を生成する。入力オペランドに対する処理動作(例えば乗算または加算)の実行が、指定された目標有効度および目標サイズを有する結果値において表現可能でない値を与える場合、処理回路は、結果値が正確でないことを示す例外信号106を出力し得る。例えば、例外指示は、次のうちの1つを示し得る。
●処理動作の結果が、指定された有効度およびサイズの結果値を使用して表現可能なものよりも大きい場合のオーバーフロー条件、
●結果が、指定された有効度およびサイズを有する結果値により表現可能なものよりも小さい場合のアンダーフロー条件、または
●結果が、目標有効度およびサイズを有する値を使用して表現可能なものよりも精確である場合の不正確条件。
真の処理結果がその有効度の外側に位置する場合でさえ、処理回路が指定された有効度の結果を生成することが許可されるべきであるのは、直感に反するように思えるかもしれない。しかしながら、図16の例に示されるように、このことは、結果がより少数のビットに収まることが概して予想される場合に、非常に大きな数を処理する必要がないように、必要とされる処理の量を限定するために有用となり得る。例えば、制御データ104は、有効度下方境界110と有効度上方境界112との一方または両方を指定し得る。処理回路102は、指定された有効度境界110、112内に位置する結果値のビット値を判定し、境界の外側に位置するビット値を判定しないように、その処理を限定し得る。故に、結果値は、広範囲の数空間114内にある数を表現することができる形式を有するが、制御データ104が数空間内の可変長および位置の枠を定義し、処理回路102は、処理を高速化しエネルギー消費量を低減させるように、指定された枠内のビットのみを計算する。例えば、プログラマは、有効なオペランド値および結果がある特定の有効度範囲内に位置すると予想されることを知らない場合があり、そのため、制御データを適切に設定することにより、予想される範囲より低い有効度または高い有効度のビット値を計算するのに処理リソースが浪費されない。そうは言っても、処理が実行される枠は、広範囲の値が(しかしより小さなハードウェアオーバーヘッドで)サポートされ得るようにプログラム可能な制御データを変更することによって、調整することができる。
一部の場合では、結果値のサイズは固定されていてもよく、制御データ104は有効度の下方および上方境界110、112のうちの一方のみを指定してもよく、もう一方は、指定された境界および既知の結果サイズから判定される。代替的に、サイズは可変であってもよく、制御データ104において明確に指定されてもよいし、またはある特定のビット数の倍数(例えば32または64ビット)として表現されてもよい。別の例では、制御データ104は、有効度の下方および上方境界110、112の両方を指定してもよく、これは、境界間の差としてサイズを効率的に識別する。このように、結果値の目標サイズおよび目標有効度が制御データから判定され得る、いくつかの方法が存在する。
図17は、高精度アンカー固定(HPA)データ形式におけるデータ値の一例を示す。HPA数は、それぞれが(正規化されていない)二進値のそれぞれの部分を表す2の補数の数を含むいくつかのデータ要素d[0]〜d[3]を含む、データベクトルViと、それぞれがデータベクトルVi内の対応するデータ要素の有効度(「重み」)を指定するアンカー値要素a[0]〜a[3]を含む、メタデータベクトルまたは「アンカー」ベクトルVaと、を含む。例えば、各アンカー値要素a[i]は、対応するデータベクトルVi内の最小有効ビットの有効度を指定し得る。図17は、ベクトルVi、Vaが4つのデータ要素(これらは64または128ビットなどのある特定の要素サイズであり得る)を含む例を示すが、ベクトルが様々な数のデータ要素を有してもよいことは理解されるであろう。ベクトル内の要素の数は、例えば、使用されていない任意のベクトルレーンのアンカー値要素a[i]内に所定のビットパターンまたは状態フラグを提供し、その結果、処理される要素の数がそのビットパターンを有しないアンカー値要素によって示されるようにすることによって、アンカー値Va内に示されてもよい。例えば、重みを有するアンカー値ベクトルVa(X,118,54,−10)(ここでXは未使用のレーンを示すビットパターンまたは状態フラグである)は、64ビットデータ要素d[2]と、d[1]と、d[0]とが一緒に、有効度2−10の最小有効ビットと有効度2181の最大有効ビットとを有する192ビットの二進値を表すことを示し得る。代替的に、HPA数は、このHPA数において処理される要素の数を指定する、何らかのさらなるメタデータ120を有してもよい。また、アンカー値ベクトルVaまたはさらなるメタデータ120は、データベクトルViにより表されるデータ値の符号、ベクトルの処理中に生じ得たあらゆる例外条件(例えば、オーバーフロー、アンダーフロー、不正確、無効動作、または入力非正規例外)を示す例外情報、または、例えばデータ値が無限大、非数(NaN)、もしくはゼロであるかどうかを示す特徴情報といった、他の情報を指定してもよい。HPA値を加算または減算する際、アンカー値は、その加算/減算への様々な入力に対して固定され、同じアンカー値を用いて結果が生成される。これは、単純な固定小数点加算器を使用してHPA値を処理することができ、したがって丸めおよび正規化をサポートする浮動小数点加算回路は必要とされず、これにより、一連の加算または減算の処理がより素早くなり得ることを意味する。アンカー値は、HPA形式と、浮動小数点または整数もしくは固定小数点形式といった他の形式との間の変換時に、適切な有効度を有する値を生成するために使用される。非常に大きな累算器を要することなく、様々な有効度の可変長値の処理を効率的に処理することを可能にするため、値をこの方法でベクトルとして表現することは有用である(例えば以下の図19参照)。
図18は、HPA数形式のデータ値をサポートする記憶ユニット(例えばレジスタファイル)130の一例を示す。本開示のいずれの実施形態に示される装置も、図18に示される記憶ユニットを備えてよい。記憶ユニットは、それぞれが対応するメタデータ記憶素子(レジスタ)134を有するいくつかのデータ記憶素子(レジスタ)132を含む。一部の例では、メタデータレジスタ134は、データ記憶レジスタ132とは別々のレジスタファイル内にあってもよい。代替的に、データレジスタおよびメタデータレジスタは、単一のレジスタファイルの一部であってもよく、または同じレジスタの異なる部分を構成してもよい。各データ記憶レジスタ132は、所与のHPA数に関するデータベクトルViを記憶し得る。対応するメタデータ記憶レジスタ134は、そのHPA値に関するアンカーベクトルVaおよび任意のさらなるメタデータ120(提供される場合)を記憶する。
一部の例では、メタデータ記憶レジスタ134内のメタデータは、対応するデータ記憶レジスタ内の特定のデータ値よりもむしろ、対応するデータ記憶レジスタ132自体に関連付けられていると見なされ得る。つまり、アンカー値Vaは、いかなる値がデータ記憶レジスタ内に記憶するために実際に計算される前に、所与のレジスタについて定義されてもよい。データ記憶レジスタ132のうちの1つを宛先レジスタとして指定する処理動作を実行する際、処理回路102は、対応するメタデータレジスタ134からアンカー値を読み取り、処理動作に対するいかなる入力の値または有効度とも独立して、アンカー値(複数可)によって指定された目標有効度および/または目標長を有する結果値を生成する。アンカー値は、プログラマにより供給される制御データに基づいてプログラム可能である。一部の場合では、プログラマは、アンカー値を直接指定してもよいが、他の例では、ライブラリまたは他のソフトウェアプログラムが、プログラマにより入力された制御データを、処理回路102によって読み取られ得る好適な形式のアンカー値(複数可)へと変換してもよい(この手法は、プログラマが、ハードウェアにより使用される内部メタデータ形式を理解する必要なしにアンカー値を設定することを可能にする)。
HPA数が、単一のデータレジスタ132内に記憶され得るよりも多くの要素を必要とする場合、そのHPA数は、いくつのレジスタがHPA数に対応するかを識別し、各データ要素により表される所与の二進値の部分の有効度を定義する対応するメタデータを含む、複数のレジスタにまたがる場合がある。
図19は、HPA形式の数を処理するための処理回路102の一例を示す。処理回路102は、所与のHPA数の対応するメタデータベクトルVa内のアンカー値に基づいて、データベクトルViのそれぞれのデータ要素に対して並列レーンの処理(例えば変換または演算動作)を実行するための、いくつかの処理ユニット140を有し得る。一部の場合では、処理回路102は、2つのHPA数に作用してもよく、各レーンが、2つのHPA数の対応する要素d0[i]、d1[i]を受信してもよい。この場合では、HPA数は同じアンカー値を共有し、対応する結果のデータ要素r[i]が、同様に入力と同じアンカー値を有するHPA形式の結果値をもたらすように生成される。処理の実行前に同じアンカー値を有するHPA数に対して異なるアンカー値を有するHPA数をマッピングすることが可能である。
代替的に、命令がソースオペランドとして1つのHPA数および浮動小数点数を指定することに応答して、その浮動小数点数(または複数の浮動小数点オペランドに実行された演算動作から得られた浮動小数点数)を、他方のHPA数と組み合わせられる前にHPA形式にマッピングしてもよい。各レーンは、アンカーベクトルVaの対応するアンカー値a[i]を受信し、これは、浮動小数点オペランドFPがHPA数の対応する要素にどのようにマッピングされるかを制御し得る。
所与の計算のために処理される要素の数は、メタデータに応じて様々であり得る。処理ユニット140は、ある特定の数のレーンのために提供されるが、特定の計算にすべてのレーンが必要とされるわけではない場合、未使用のレーンは、電力を節約するために、パワーゲーティングされる、すなわちレーン内での内部ビット状態のトグリングを防止するためにゼロ入力を提供される。その一方で、メタデータまたはアンカー値が、ハードウェア内に備えられた処理ユニット140の数よりも大きな数の要素を指定する場合は、HPA数は、ハードウェアの複数のパスにおいて処理され得る。
要約すると、本明細書に記載される高精度固定小数点演算システムは、「高精度アンカー固定」(HPA)データタイプを組み込む。HPAデータタイプはベクトルペアであり得、その一方は、固定長整数の順序集合(例えば、8つの64ビット整数の順序集合)を含み、他方は、固定長整数のそれぞれ1つがハードウェアによりどのように解釈されるべきかを指定するメタデータ(アンカー値)(例えば、整数内の各ビットの指数重みを与える範囲情報)を含む。各レーンが、データと、そのデータに特有のメタデータとの両方を受信するため、レーンは、全体としてベクトルに有意義な結果をもたらす異なる動作を行うことができる。例えば、HPA値は、例えば、浮動小数点数または固定小数点形態の積を表す200〜4000ビット長の、非常に長い整数を表し得る。この長整数の各64ビット部分に関連付けられたアンカー要素は、どのようにその64ビット整数を解釈すべきかを64ビットレーンに伝える。したがって、データと、そのデータに関連付けられたメタデータと、それぞれがそのデータ項目に特有のメタデータを有する複数のデータ項目を作成する能力とから成るデータタイプが提供される。
HPAデータは、フルサイズデータタイプであっても、またはフルサイズデータタイプの範囲および精度の一部分であってもよい。フルサイズデータタイプは、例えば、2099ビット(すべての倍精度数を保持するため)、もしくは4198ビット(すべての倍精度積を保持するため)、または、これらの値の多くをオーバーフローさせることなく加算することを可能にするさらに大きな何らかのサイズであってもよい。明らかにこれはより大きなビット数であり、これらのデータタイプに対する動作は複数サイクルを要することになり、記憶装置はかなりのものになるであろう。しかしながら、多くの場合において、実行されている機能またはアプリケーションは、完全なデータタイプを必要とせず、データタイプの一部分のみを必要とし、これは、数値解析およびシミュレーションによってプログラマに既知となるであろう。例えば、特定のプログラムは、非正規入力を決して有しないかもしれないし、または何らかの他の範囲制限を有するかもしれない。これらの場合、より小さなHPAデータを使用することができる。
このデータタイプは、ほんの少数の特徴により定義され得る。これらは、一部の場合ではビットもしくはベクトルレーンサイズの倍数におけるデータタイプのサイズを含むか、またはそれは、32ビットもしくは64ビットなどの固定データサイズの観点から定義される場合もある。さらに、データタイプは、表現され得る最も低い指数によって定義されてもよい。例えば、アルゴリズムが[+/−1025,1045]の範囲内の単精度データを処理し、すべての中間計算が同じ範囲内にある場合(中間計算の範囲は入力データ範囲より大きくても小さくてもよいが、最終範囲はほとんどの場合両方の範囲の広がりを組み込むべきである)、データタイプは、この範囲内のデータを表現するのに必要な数のビットのみを含むことになる。この例において、1025は283よりもわずかに大きく、1045は2150よりも少しだけ小さいため、このアルゴリズムに適切なデータタイプは91ビット(150−83+24)となり、アンカー値は、83として表現可能な最小の指数を識別することになる。このデータ項目への合計には、最大限の2099ビットではなく91ビットのデータタイプが関与し、計算時間および記憶装置要件の大幅な縮小がもたらされるであろう。
浮動小数点例外を処理するためには、各HPA数に関するメタデータが少なくとも以下の情報を含むことも有用となり得る。
●符号(値が正であるか負であるか)
●例外ビット、例えばIEEE 754−2008定義ビット−IXC(不正確例外(inexact exception))、IOC(無効動作例外(invalid operation exception))、UFC(アンダーフロー例外(underflow exception))、OFC(オーバーフロー例外(overflow exception));または実装定義ビット−IDC(入力非正規例外(input denormal exception))。DZC(ゼロによる除算(division by zero))例外ビットは、HPA数の除算が必要とされない場合は、必要とされない場合がある。
●特徴的なビット(例えば、値が無限大、NaN(非数)、ゼロであるかどうかを示すもの)
これらのビットはデータタイプの一部であり、すべてのレーンについて必ずしも複製されるわけではない。
図20は、HPA値を使用して実行され得る動作の一例を示す。この場合では、その動作は、一連の浮動小数点値の和を見出すための累算動作である。これらが浮動小数点演算で処理された場合、浮動小数点値ペアの各加算は丸めおよび正規化が原因で不精確性をもたらし得るため、浮動小数点値が加算される順序が結果に影響し、そのため浮動小数点加算は結合的ではない。したがって、予測可能な結果を与えるためには、浮動小数点加算を使用した一連の浮動小数点値の累算は、加算が固定順序で順次実行されることを必要とし、このことは、それを迅速に実行することを困難にする。
対照的に、HPA数の加算は結合的であるため、HPA形式を使用することにより性能を大幅に向上させることができ、そのため、一部の加算がマルチプロセッサシステム内で並列に実行される場合でも、または、どのオペランドが最初に利用可能になるかに応じて加算が再順序付けされる場合でも、その結果は依然として正しくかつ繰り返し可能となる。図20は、1つの加算で実行され、その後、各浮動小数点値を累算するために何回か繰り返され得るステップを示す。各加算において、入力浮動小数点値FPが、HPA形式のデータベクトルVi1に対して、そのHPA数について前もって指定されているプログラム可能なアンカーベクトルVaに基づいてマッピングされる。浮動小数点値FPの仮数部Fは、アンカーベクトルVaおよびその浮動小数点値の指数Eにおいて定義された有効度境界に応じて、データベクトルVi1の1つ以上の要素の一部分に対してマッピングされる。ベクトルが浮動小数点値の仮数部Fより大幅に大きいため、典型的にベクトルのほんの少数のレーンにのみ仮数部からのビット値が投入され、より上位のレーンにはもっぱら符号ビットが投入され、より下位のレーンにはゼロが投入される。変換動作は、以下でより詳細に説明する。
このように、変換されたデータベクトルVi1は事実上、浮動小数点値により表される二進値の代替的表現を提供する、長い固定小数点値である。このことは、それが、浮動小数点演算に関する整合、正規化、丸め、および指数調整ステップを必要とすることなく、単純な整数加算によってHPA形式の別のデータベクトルVi0(これはVi1と同じアンカー値を有する)に加算され得ることを意味する。これは、加算動作が他の加算と結合的であり、そのため並列に実行することができるか、または性能を向上させるように再順序付けすることができることを意味する。ベクトルViRは、データベクトルVi0、Vi1を加算することによって生成され、これは、Vi0、Vi1と同じアンカーベクトルVaを有するHPA形式の結果値のデータベクトルを表す。これが累算の最後の加算でなければ、結果ベクトルViRは次の加算のための第2のベクトルVi0となり、このとき、別の浮動小数点値FPが入力され、HPA形式に変換され、前の累算結果に加算される。これらのステップを数回繰り返すことによって、精度を損失せずに、一連の浮動小数点値を非常に迅速に加算することができ、これは、浮動小数点演算では不可能である。最終累算結果を生成したら、結果のデータベクトルViRはその後、所望であれば浮動小数点値に再変換されてもよく、アンカーベクトルVaは、浮動小数点値が結果値に対応する二進値を表すように(必要であれば丸めを用いて)変換が実行される方法を制御する。
このように、浮動小数点(FP)数または積は、高精度アンカー固定(HPA)数に変換され得る。これらのHPA数は数百(単精度)または数千(倍精度)のビット長であり得るが、それらはFP入力の正確な表現であり得、FP数とは異なり、これらの数は、演算の通常の結合的特性に従う。
ここで、FP数からHPA数への変換をより詳細に説明する。単精度浮動小数点(SP)数は、符号ビットと、8個の指数ビットと、23個の小数部ビットとを含む。1.fractionまたは0.fraction形態の仮数部を構築するために使用される隠れビット(hidden bit)(指数に基づく)も存在する。最大指数および最小指数は特殊な数のために予約されているが、仮数部の第1のビットは、指数により指定される他の2−2=254個の位置のうちいずれに現れてもよい。仮数部の第1のビットには小数部が続き、符号を表す1個の付加的なビットが存在するため、いかなる有限SP数も、254+23+1=278ビットの固定小数点数として表すことができる。この数を保持するために5つの64ビット値のベクトルを構築するとした場合、下位ベクトル要素はビット0〜63を保持し、次の要素はビット64〜127を保持するなどということになり、上位要素はビット256〜279を保持する。
これはどのようにベクトルプロセッサ内に収まるのだろうか。SP浮動小数点数SiをHPA数Vi,Va(ここで、Viはデータベクトルであり、Vaはアンカーベクトルである)に変換するための命令、
CVT_SP_to_HPA Vi,Va,Si
があると想定すると、Viは、279ビットの固定小数点結果を含むことになる。Vaは、Viにおける5つの64ビットの宛先のそれぞれに関する境界情報を含むことになるため、上記の例では、Va=<256,192,128,64,0>である。各64ビットレーンは、SP数Siのコピーを得ることになり、Viの適切な部分にどのビットを設定するかを計算するために、境界情報およびSP数の指数を使用する。Vi=<D4,D3,D2,D1,D0>とする。Siが指数70を有する場合、Viのビット[70:64](すなわち、D1のビット[6:0])は、Siの仮数部の上位7ビットに設定され、Viのビット[63:47](すなわち、D0のビット[63:47])は、Siの仮数部の下位17ビットに設定される。残りのビットのすべては、ゼロに設定されることになる(簡略化のために、ここでは正数を仮定しよう)。各レーンは、Vaの対応するエントリから完全な仮数部、指数、および境界情報を受信する。
通常の場合では、Vaは、全面的にその下位64ビットにおける基底値によって決定され、次に続く各64ビット値は、前の64ビットにおける値よりも64多いため、すべてのレーンがVa内のその場所を「知って」いたら、スカラー基底値で事足りるかもしれない。しかしながら、一部のベクトル処理回路では、各レーンがベクトル内におけるその位置を承知している必要がないように基底値のベクトルを含めることがより明快であり得るが、代替的な実装形態では、単一の基底値で十分であることが想像され得る。
Viにより表される二進値は2の補数の数であるため、24ビット仮数部を2の補数の数に変更する(変換後に2の補数に変更してもよいが、279ビット値の変換は24ビット値の変換よりも大幅に遅い)。2の補数は通常の方法で変換する:数が正である場合何もせず、さもなければ〜significand+1の値を使用する。この変換後、279ビットの変換は、場合により改変されている仮数部を使用し、仮数部の左側のビットをゼロの代わりに符号ビットに設定することを除いて、先行の段落と全く同じように進行する。
本方法の美点はその柔軟性にある。プログラマがFP数を表現するために使用したいと思うかもしれない、可能な固定小数点数は多数存在する。FP仮数ビットのすべてが70〜197の範囲内に落ち着くことをプログラマが確信していたとするとどうだろう。その場合はVa内のエントリを適切に改変することにより、固定小数点数が128ビットの宛先に保持され得る。128ビットの固定小数点数に対処することは、場合により大幅に大きな固定小数点数に対処することよりもずっと素早い。
FP数の積を精確に加算することも望ましく、我々の方法は、これを可能にするように容易に発展する。提案される命令は次のものである。
MUL_SP_to_HPA Vi,Va,Sn,Sm
Viは、固定小数点結果を含み、この場合もやはり、Vaは、各レーンに対する境界情報を含むことになる。2つのSP数SnおよびSmは、丸めなしで乗算され、仮数部の完全な48ビットの積を保持し、積指数の9ビットバイアス付き(255過剰)表現である新たな指数を計算する。2つのSP数の積は1つのSP数より大幅に大きくも大幅に小さくもなり得るため、余剰の指数ビットが提供される。変換は、CVT_SP_to_fixed命令と全く同じように起こり、積の2の補数を取り、その後各レーンに、固定小数点数が何らかの仮数ビットを有するかどうかをVaに基づいて計算させ、仮数部の左側に符号ビット、そして右側にゼロで、残りのビットを満たす。
提案された2つのSP命令に加えて、2つの類似したDP命令、または任意の他の浮動小数点形式のための命令が存在する。それらは同じ方法で機能するが、DP入力または積(より幅広の仮数部および指数)の解釈の仕方を知っている。固定小数点ベクトルのサイズは、DPに対して大幅に高い場合がある。巨大な(表現可能より大きな)、またはとても小さな(表現可能より小さな)数を除外した方がいいかもしれない。関心のある主な事例に関する最大サイズは次の通りである。

「first bit」列は、いくつの可能性のある場所が仮数部の第1のビットを保持し得るかを示し、「frac bits」は、いくつの小数部ビットがその仮数部に続くかを示す(これらの数は積に関してより高い)。「length」のフィールドは、単にfirst_bit+frac_bits+1の和であり、これは、指定された入力に関する固定小数点形態のすべての数を保持するのに必要とされる最小の長さである。「64−bit words」の列は、指定された入力に関する固定小数点形態のすべての数を保持するのに必要とされる64ビットワードの最小の数である。
行エントリは、DP(すべてのDP数)、DP prod(すべての可能なDP積)、DP prod nontiny(DP最小非正規数未満のあらゆるビットを無視したすべての積)、およびDP prod nontiny+nonhuge(DP非正規数未満またはDP最大超のあらゆるビットを無視したすべての積)である。SPの行は同様の説明を有する。関心をもっているビットを反映するように境界ベクトルVaをただ調整することができるため、これらの関心のある事例のすべてに対して別々の命令は必要ない。
プログラマは独自の境界を作成するであろうと考えられる。恐らく、2−50よりも小さい積は、特定の計算には無関係である。こうした種類の事例は、単純に境界ベクトルVaを調整することによって容易に管理される。
図21は、HPAデータ形式を有する値への浮動小数点値の変換の一例をより詳細に示す。変換が、同じ結果をもたらす図21に示されるものとは異なる一連の動作で実装され得ることは理解されるであろう。図21は、対応するアンカーベクトルVa[x]に基づいてHPA値のデータベクトルの単一のデータ要素Vi1[x]を生成するように実行されるステップを示すが、同じステップをベクトル内の他のデータ要素それぞれに対して実行してもよい。図21に示されるように、ステップ150において、浮動小数点値の符号ビットSが1である場合、(1の暗黙ビット(implicit bit)を含む)浮動小数点値の仮数部Fは、ステップ150において符号反転される。符号反転は、仮数部値Fの2の補数を見出すために、仮数部のビットを反転させ1を加算することによって実行され得る。代替的に、変換されたHPA値に加算が実行される予定であれる場合(例えば上記の図20にあるように)、ステップ150において、仮数部Fを反転させて仮数部の1の補数を生成し、この段階では1を加算せず、後に加算を実行する際に加算器へのキャリー入力をアサートして、2の補数を完成させてもよい(1つの加算ステップを省略することにより、この手法はより素早いかもしれない)。いずれにしても、符号反転は、浮動小数点形式において、符号ビットが1である場合は仮数部のすべてのビットに負の重みが付けられるように、値が符号マグニチュード形式で表されるという事実の主な原因であり、一方HPA形式では、ベクトルは2の補数値を表し、最大有効ビットが1であっても、それより低い有効度のビットすべてに正の重みが付けられる。
その後、中間値162が、仮数部F、または符号反転ステップ150から生じる修正された仮数部−Fから形成される。仮数部Fまたは修正された仮数部−Fは、中間値162の最小有効部分に置かれ、中間値162の上位部分は、ある特定の数、Lsizeの0を含み、Lsizeは、ベクトルレーンサイズ(1つのデータ要素内のビット数)である。例えば、Lsizeは、64、128、または256ビットであり得る。その後、シフタ160が、次のように決定されるシフト量Lshiftによって指示される場所の数だけ中間値162を左シフトする。
●Z>0およびZ<Lsize+Fsizeである場合、Lshift=Z=E−B−Va[x]+1であり、式中、
○Eは、FP値のバイアス付き指数であり、
○Bは、FP値に対するバイアス量(例えば、DPでは1023、SPでは127)であり、
○Vm[x]は、アンカー点値Vaから決定される、処理されているデータ要素の最小有効ビットの目標有効度であり、
○Lsizeは、データ要素内のビット数(ベクトルレーンサイズ)であり、
○Fsizeは、FP値の仮数部内のビット数である(暗黙ビットを含まない)。
●Z≦0またはZ>Lsize+Fsizeである場合、Lshift=0である。
事実上、FP値の仮数部Fのビットのいずれもが、現在処理されているデータ要素のビットの有効度に対応する有効度を有しない場合、Lshiftは0である。Lshiftが非ゼロである場合、Lshiftビット位置だけ中間値162を左シフトすることにより、FP仮数部の少なくとも一部が、HPAベクトルのデータ要素内にある対応する有効度のビットに対してマッピングされる。その後、データ要素Vi[x]のLsizeビット値が、シフトの結果からの上位Lsizeビットとして選択される。
同じ動作をベクトルの他のデータ要素それぞれに対して同様の方法で実行して、各データ要素が浮動小数点値に対応する二進値のそれぞれの部分を表す、HPA値の全体的なベクトルVi1を生成することができる。
ベクトルの最大有効データ要素に適用される処理に関しては、シフタ160により適用されるシフトが、仮数部Fのいずれかの非符号拡張ビットがシフト結果の最大有効ビットを超えてシフトアウトされることをもたらす場合、オーバーフロー条件の信号となる例外指示が生成され得、これは、浮動小数点値が指示されるメタデータを使用してHPAベクトルによって表現され得るよりも大きかったことを示す。同様に、ベクトルの最小有効要素に適用される処理に関しては、浮動小数点値FPのすべてのビットがその要素の最小有効ビットの有効度よりも小さい有効度を有する場合、アンダーフロー例外の信号が送られ得る。また、浮動小数点仮数部のビットの一部が、変換されたHPAベクトルで表現されるが、他のビットがベクトルの最小有効ビットよりも低有効度であった場合、不正確例外の信号が送られ得る。これらの例外条件は、メタデータVmにおいて設定された有効度境界が、処理されている現在の浮動小数点値に対して不適切であったことの信号となり得る。
図21に示される変換動作は、浮動小数点値を対応するHPA値に変換するための専用の変換命令に応答して実行され得る。代替的に、変換は、何らかの演算も実行する演算命令に応答して実行されてもよい。例えば、加算または減算命令が、浮動小数点値を別のHPA値と加算もしくは減算する前にHPA形態に変換させてもよく、または乗算・変換命令が、2つの浮動小数点オペランドの乗算をトリガしてもよく、その後、浮動小数点形態におけるこれらのオペランドの積が、図C7に示される動作を使用してHPA値に変換されてもよい。
同様に、HPA数を浮動小数点数に変換することができる。SPに対する基本的な命令は、
CVT_HPA_to_SP Sd,Vd,Va
であり、ここで、Sdは、宛先SP数であり、Vdは、高精度固定小数点データを含むデータベクトルであり、Vaは、Vdの各64ビットレーンに関する境界情報を含むアンカーベクトルである。Vdは、2の補数の数であり、Vdのすべてのビットは、Vaの境界情報に基づく重みを有し、そのため、Vaの下位64ビットワードが100を含む場合、Vdにおける下位ワードの下位ビットは重み100を有し、次のビットは重み101を有するなどである。通常の場合では、Vaは、全面的にその下位64ビットにおける基底値によって決定され、次に続く各64ビットは64異なる。したがってこの場合では、
Va=<…,296,228,164,100>
である。これらすべての値を有するようにベクトルVaを提供する理由は、各64ビットレーンがそのベクトルVdの部分を大域的な知識一切なしで解釈するからである。レーンがより大きなベクトル内のそれら自体の場所を「知って」いたら、基底値(この場合は100)は、変換を完了するのに十分な情報を与えるであろう。
基底値は、浮動小数点数の指数に正確に対応する。Vdの下位ワードのビット62で開始する仮数部を構築し、Vaは上記の通りであった場合、その仮数部に対応する指数は、全面的に仮数部位置(62)および基底値(100)によって決定される。SP数については、その指数は100+62−23=139となる。この−23は、SP値の小数部ビットの数に由来する。すべてのSP数を表現することが望まれる場合では、高精度固定小数点数は278ビット長となり、その下位ビットは非正規数の下位ビットに対応することになる。第1の可能な正規の仮数部は指数1を有し、Vdのビット[23:0]に位置することになる。
VdをSPに変換するには、2つの基本的な方法、左から右または右から左がある。
左から右への変換はより明快である。Vdの最上位の第1のビットは符号ビットであり、それがSP結果Sdの符号となる。その後、第1の非符号ビット(符号が1である場合ゼロ、符号がゼロである場合1)を検索する。そのビットが仮数部の第1のビットとなり、それから次の23ビットを小数部として、第24番目のビットをガードビットとして、そして残りのビットすべての論理ORをスティッキービットとして取る。指数は、第1の非符号ビットが見出されるレーンの重み(W)、第1の非符号ビットの場所(L)、およびSP数における小数部ビットの数(23)に基づいて計算され、W+L−23の指数が与えられる。指数計算がゼロ未満の値を返す場合、返される指数はゼロである。入力が負であり、最初のゼロが24個以上のゼロの列の一部である場合、指数は1だけインクリメントされる。小数部は正の入力については変更されず、さもなければ小数部の2の補数が使用される。結果として得られる数は、丸めモード、小数部の最小有効ビット、ガード、そして最後にスティッキービットに基づいて、通常の方法で丸められる。倍精度では、動作は同じだが、より大きな仮数部および指数を用いる。
図22は、データベクトルViおよびメタデータVmを用いてHPA値を浮動小数点値FPに変換するために左から右への変換を使用する一例を示す。この場合もやはり、これは、スタンドアロンの変換命令、または何らかの演算のみならず変換も含む演算命令に応答して実行され得る。データベクトルViの最大有効ビットは、浮動小数点値FPの符号ビットSに対して直接マッピングされる。
浮動小数点値の仮数部Fを生成するために、一連の動作が次のように実行される。ベクトルの最大有効ビットが1である(すなわちHPA値が負である)場合、ステップ170において、修正されたベクトルVi’をもたらすようにベクトルViが符号反転される(反転および1の加算)。正値の場合、ベクトルViは変更されない。故に、ベクトルVi’は少なくとも1つの先行ゼロを有し、そのため正値を表す。ベクトルの最大有効要素から開始して、仮数部生成動作が要素毎に順次実行される。最大有効要素の処理レーンは、その要素内の第1の非符号ビット(すなわち、最初の1のビット値)を検索する。この例では、上位要素Vi[3]はいかなる非符号ビットも含まず、そのため処理は次のレーンVi[2]に移る。
要素Vi[2]の処理は、1の非符号ビットを識別し、非符号ビット1に先行するゼロの数を表す先行ゼロカウントLZCを判定する。その後、部分的な仮数部が対応するデータ要素Vi[2]のkビットから形成され、ここで、k=min(Lsize−LZC,Fsize)であり、式中、Lsizeは、1つのデータ要素内のビット数であり、Fsizeは、生成されるFP値の仮数部内のビット数(暗黙ビットを含む)であり、LZCは、先行ゼロカウントである。kビットの部分的な仮数部値は、仮数部、ガードビットG、およびスティッキービットSについて依然として得られるべき残りのビットの数の指示(Fsize−k)と一緒に出力される。Lsize−LZC>Fsizeである場合、ガードビットGは、部分的な仮数部について取られたビットの1つ右側の場所の要素Vi[2]のビットに等しく、Lsize−LZC≦Fsizeである場合、G=0である。同様に、Lsize−LZC>Fsize+1である場合、スティッキービットSは、ガードビットGの右側にある要素Vi[2]のあらゆるビットのビットORに等しく、さもなければスティッキービットS=0である。
その後処理は要素Vi[1]に関する次のレーンに移り、ここで別の部分的な仮数部値が生成される。要素Vi[1]の上位部分が、前のレーンから出力された値Fsize−kに対応して取られたビット数と共に、部分的な仮数部として選択される。このレーンはまた、ガードおよびスティッキービットG、Sの値を更新し、ガードビットGは、部分的な仮数部について取られた最下位ビットの1つ右側の場所の要素Vi[1]のビットに等しく、スティッキービットSは、ガードビットGより低い有効度のあらゆるビットのビットORに対応する。最小有効要素Vi[0]の処理レーンは、より上位のレーンからスティッキービットSを受信し、要素Vi[0]のすべてのビットに前のレーンからのスティッキービットSを論理和する(ORing)ことによってそれを更新する。
レーン2および1について生成された部分的な仮数部は、その後連結されて仮数部値Fを形成する。仮数部は、任意の所望の丸めモードを使用し、ガードおよびスティッキービットG、Sの値に基づいて丸められる。その後、浮動小数点値FPに関する記憶された仮数部が、浮動小数点表現において暗黙的である丸められた仮数部の最大有効ビットを無視して、丸められた仮数部値から得られる。
一方で、浮動小数点値のバイアス付き指数Eは、次のように決定され、
E=Va[j]+Lsize−LZC+B
式中、Va[j]は、最大有効非符号ビットが見出されたデータ要素Vi[j]の最小有効ビットの有効度(例えば、図22に示される例において要素Vi[2]のアンカー点値によって指示される有効度)であり、Lsizeは、1つのデータ要素内のビット数であり、LZCは、先行ゼロカウントであり、Bは、使用されている浮動小数点表現のバイアス値である。
Fsize<Lsizeである場合、図22の例にあるように、多くても2つの隣接するデータ要素のみが、丸められていない仮数部Fに寄与するビット値を含むことができ、他のレーンは、符号ビットのみを含んだより高有効度のレーン、またはスティッキービットSにのみ寄与するより低い有効度のレーンのいずれかになる。丸められていない仮数部は、レーン内の第1の非符号ビットの位置に応じて、もっぱら1つのレーン内のビット値から形成され得る可能性もある。しかしながら、Lsize<Fsizeである場合、丸められていない仮数部に寄与するレーンがより多く存在し得る。
図22は、HPA値の各データ要素を左から右へ順次処理する一例を示す。しかしながら、ベクトルサイズが大きくなるにつれて、これは比較的遅くなり得る。これは常に問題とはならないかもしれない。例えば、図20に示される累算動作では、FPからHPAへの変換は、HPAからFPへの再変換より大幅に高頻度で発生し得る(FP−HPA変換は各加算について発生するが、HPA−FP変換は最終結果が生成された時点でしか発生しない)。しかしながら、処理を高速化することが所望される場合、いくつかのレーンで動作を並列に実行することが可能である。例えば、図19に示される形態の処理回路が使用され得る。この場合では、各レーンが最も高い非符号ビットを検出し、部分的な仮数部をそれがベクトル全体中に最も高い非符号ビットを含むと仮定して生成してもよく、それから、処理回路が後に、第1の非符号ビットを実際に含むレーンからFsizeビットを得ることによって部分的な仮数部を組み合わせ、必要であれば次の下のレーンからFsize−kビットを得てもよい。
最小有効要素がまず処理される、右から左への変換も可能である。Vd=<D4,D3,D2,D1,D0>(これはあらゆるSP数を保持するのに十分である)と想定し、Va=<256,192,128,64,0>とする。VaベクトルがVdソースに関する別の範囲を指定し得ることを思い返されたい。右から左への変換には2つの方法が使用され得る。
1.D0を保持するレーンが、SP数を、これら64ビットのみが利用可能であるかのように、左から右への変換と同じアルゴリズムを使用し、しかし丸めまたは符号ベースの操作を一切行わずに計算する。返される値は、35ビットベクトル<sign,exponent[7:0],significand[23:0],guard,sticky>である。D1を保持するレーンは同じことを行うが、D0レーンによって生成されるデータにも注目する。D1レーンがすべて符号ビットである場合、D0結果が上位に渡される。さもなければ、新たなSP数が、第1の非符号ビットの新たな場所に基づいて計算される。この新たな数の小数部ビットの一部はD0に由来し得るが、我々はそのレーンから返された35ビットベクトルからのそれらのビットに関する情報を有する。新たな指数、符号、ガードおよびスティッキービットも計算される。このプロセスは、D2、それからD3について繰り返され、最後にD4レーンから返されたベクトルを丸めることによって終了する。DP変換は全く同じ方法で機能するが、より大きな指数および仮数部を有する。
2.第2の方法では、各Dxブロックがその他とは独立して35ビットベクトルを計算する。4つのDxブロックがハードウェア内に実装されているシステムでは、各35ビットベクトルが、4つのDxブロックのセットに対して単一の35ビットベクトルを計算する第2のブロックに出力される。この値が保持され、同様の様式で、次のデータビットセットの出力からの35ビットベクトルと組み合わせられる。上記の例において、256ビットのShojiエンジンを用いると、64ビットチャンクD3〜D0は、第1の反復で処理され、各Dxブロックが35ビットベクトルをもたらし、最終的なベクトルがD3〜D0セットについて生成されることになる。第2のパスが、D4ブロック内のビットに対して別の35ビットベクトルを生成し、第2のブロックが、このベクトルを、より下位のD3−D0ブロックからのベクトルと組み合わせて、最終的なベクトルを生成する。この最終的なベクトルは、指定またはデフォルトの丸めモードに従って丸められて、最終的な単精度結果をもたらすことになる。方法1と同じく、DP変換は同様に機能するが、その大きな指数および仮数部のために異なる実装形態を要するであろう。
境界ベクトルが、可能性のある範囲を限定する値を含む場合は、278個の可能性のあるビットすべてにSP数を生成させる必要はなく、同様に、境界ベクトルが範囲を限定する場合は、2099個の可能性のあるビットすべてにDP数を生成させる必要はない。また、いくつかの数は、SPまたはDP数の範囲を超え得ることに留意されたい。これは、積和の変換時に特に起こり得るが、多くの大きな数を加算する際にも起こり得る。DPまたはSP最大値よりも大きな数は、通常の丸め変換(通常は無限大を返す)に従うべきであり、DPまたはSP最小非正規数よりも小さな数は、丸め前にスティッキービットを調整すべきである。これをサポートするために、オーバーフローを捕捉する手段が必要となり、一実施形態では、オーバーフロー条件を識別する単一のビットで十分であろう。
高精度固定小数点和がその入力と異なる形式に変換されることを妨げるものは何もない。例えば、半精度および四倍精度(quad−precision)(128ビット形式)は、いかなる想像可能な整数もしくは固定小数点形式または十進法浮動小数点形式も実装され得るのと同様に、上述のものと同じ方法を使用して実装され得る。
装置は、演算動作を実行するための処理回路を有し得る。処理回路は、結果値の目標有効度を示すプログラム可能な有効度データに応答して、その目標有効度を有する結果値を生成し得る。これは、どの範囲の有効度が所与のアプリケーションに関する典型的なデータ値を収容すると予想されるか、例えば、地球上の温度センサによって測定されるデータが、センサの場所またはセンサの精度に応じて、比較的制限された値の範囲に限定される可能性が高いということを、実際にはプログラマが承知しているという認識を利用するものである。したがってプログラマは、予想される結果の有効度を指定するように、プログラム可能な有効度データを設定することができる。すると、処理回路は、結果のうちこれらの境界の外側の部分を計算する必要がなく、エネルギーが節約され、より素早い処理が提供される。
例えば、プログラム可能な有効度データは、処理回路に、結果値を生成するために使用される少なくとも1つのオペランドの有効度とは独立して、目標有効度を有する結果値を生成させてもよい。故に、オペランドが、所与の演算動作の結果がプログラム可能な有効度データによって指示される有効度の外側になるべきであるような値を有する場合でも、不正確であり得ようとも指示された有効度を有する結果が依然として生成される。一部の場合では、結果値は、整数もしくは固定小数点データ値、または上述のHPA形式で表される値であってもよい。一部の例では、プログラム可能な有効度データは、結果値に関する少なくとも1つの有効度の境界を示す境界情報を含み得る。処理回路は、境界情報に応答して、少なくとも1つの有効度の境界内の有効度を有する結果値のビット値を判定してもよい。処理回路は、例えば例えば、処理を、結果値のうち指示された境界内の部分を判定することに限定してもよい。
一部の例では、境界情報は、それぞれ結果値の最小有効ビットおよび最大有効ビットの有効度を示す、有効度下方境界および有効度上方境界のうちの少なくとも1つを示し得る。一部の場合では、下方境界と上方境界との両方が、境界情報によって明確に指示されてもよい。代替的に、これらのうちの1つが指示されてもよく、他方は、処理されている値のサイズ(長さ)から暗黙的であり得る。サイズは固定されている場合もあり、または境界情報において指定される可変サイズである場合もある。一部の例では、プログラム可能なデータによって指示される目標サイズは、ハードウェアでサポートされる値のサイズとは独立していてもよい。例えば、ハードウェアは、最大Nビットの結果値を並列に生成することしかできない場合がある。プログラム可能なサイズ情報がNビットより大きなサイズを示す場合、演算動作は、ハードウェアの複数のパスにおいて実行されてもよい。サイズがNビット未満である場合、ハードウェアのすべてが使用されるわけではないかもしれない。
例えば、並列レーンの処理を実行するための処理ユニットが、処理回路内に提供されてもよく、プログラム可能な有効度データが、いくつのレーンが使用されるべきかを指定してもよい。プログラム可能な有効度データが、レーンのうちの1つの有効度を指示し、他のレーンの有効度が、この指示から判定されてもよい。代替的に、有効度は、各レーンにつき別々に表現されてもよく、これは、全体的なベクトル内のそのレーンの位置に関する「大域的な知識」を一切必要とすることなく、各レーンにそのレーンのデータ要素を処理させるために有用となり得る。
別の例において、装置は、少なくとも1つのデータ記憶素子と、少なくとも1つの対応するデータ記憶素子に関するメタデータを記憶するためのメタデータ記憶素子とを有してもよい。メタデータ(例えば、上述のアンカー点値)は、対応するデータ記憶素子内に記憶されるデータ値の目標有効度および目標長を示してもよい。故に、メタデータは、データ記憶素子内に記憶されたいずれかの特定のデータ値よりもむしろ、記憶素子に関連付けられてもよい。データ記憶素子内に置かれるデータ値を生成する際、処理回路は、メタデータ記憶素子内の対応するメタデータを参照して、生成されるデータ値の有効度およびサイズを判定してもよい。これにより、処理回路が、メタデータにより指定された目標有効度およびサイズによって定義される枠内のビット値を生成するように、その処理を限定することが可能になる。
かさねて、メタデータはプログラム可能であり得る。一部の場合では、メタデータ記憶素子は、データ記憶素子とは別々の記憶素子であってもよい。他の例では、メタデータ記憶素子は、対応するデータ記憶素子の一部を構成し得る。
一部の場合では、1つのメタデータ記憶素子は、いくつかのデータ記憶素子がそれぞれ同じメタデータを共有するように、それらの間で共有されてもよい。データ記憶素子は、どのメタデータ記憶素子がそれと関連付けられるべきかを示すプログラム可能な値を含んでもよい。
メタデータによって指示される目標サイズは、データ記憶素子自体の物理的サイズとは独立していてもよい。故に、メタデータは、データ記憶素子の記憶素子サイズより大きな目標サイズを指定してもよい。目標サイズがデータ記憶素子サイズより大きい場合、データ値は、いくつかのデータ記憶素子にまたがって記憶されてもよい。メタデータは、いくつのデータ記憶素子が同じデータ値の部分を表すかを指定する情報を含んでもよい。
メタデータはまた、対応するデータ記憶素子内でのデータ値の生成中に例外条件が生じたかどうかを示す例外情報、データ値が正か負かを示す符号情報、または、データ値の特徴、例えばそれがゼロ、無限大、もしくは非数であるかどうかなどを示す特徴情報といった、他の情報を表現してもよい。例えば、例外情報は、データ記憶素子内に記憶されるデータ値を生成するための演算動作の結果が、メタデータにおいて指示された目標有効度および長さを有する値を使用して表現可能であるよりも大きかった場合、オーバーフロー条件を指示してもよい。
他の例では、装置は、浮動小数点値を、その浮動小数点値に対応する二進値のそれぞれのビット有効度部分を表す複数のデータ要素を含むベクトルに変換するための変換動作を実行するための処理回路を備えてもよい。これは、浮動小数点値自体を使用した浮動小数点演算よりも容易に並列化される、ベクトル形式を使用した演算をサポートするのに有用である。二進値をベクトル形態で表現することが有用であるのは、これにより、ベクトルのデータ要素の数に応じてハードウェアが実施する処理の量を見積もるためにハードウェアを処理することを可能にするフレームワークが提供されるからである。例えば、ベクトルは、上述のHPA形式を有し得る。ベクトルは、精度を向上させるために、浮動小数点値の仮数部よりも大きなビット数を有してもよい。
変換動作は、処理回路が浮動小数点値および制御情報に基づいてベクトルの各データ要素に関する値を選択するように、プログラム可能な制御情報に応答してもよい。制御情報は、変換動作を行うために実行される命令内のパラメータとして、例えば、制御情報を記憶するレジスタを識別する中間値もしくはレジスタ指定子として指定されてもよいし、または制御レジスタなどの専用の場所に提供されてもよい。
一例において、制御情報は、変換動作において生成されるベクトルのデータ要素によって表現されるビット有効度部分のうち少なくとも1つの有効度を指示してもよい。故に、ベクトルは、プログラム可能に選択される有効度の二進値を表現してもよい。一部の場合では、制御情報は、ベクトルの所定のデータ要素に関する有効度を指示してもよく、他の要素の有効度は、所定のデータ要素(例えば、既知のデータ要素サイズのインターバルのカウントアップ)の有効度に由来する。しかしながら、他の例は、各要素について有効度の別々の指示を提供し得る。これは、各ベクトルレーンがそのデータ要素の部分を他の要素と比較して考慮する必要がないように、ベクトル処理を簡略化するのに有用である。
制御情報はまた、ベクトルのデータ要素の変数を指示してもよい。これは、データ要素の数を指定する明確なサイズ指示を用いて、または各レーンに対する有効度指示を使用することによって行うことができる。例えば、特定のデータ要素の有効度について指示される所定のビットパターンは、このデータ要素が現在の計算において使用されていないことの信号となり得る。
制御情報は、変換されている浮動小数点値とは独立していてもよい。したがって、浮動小数点値の有効度または値に関係なく、浮動小数点値が、制御情報において指示される有効度および/またはサイズのベクトルによって正確に表現され得ない値を有する場合でも、この有効度およびサイズを有するベクトルが生成され得る。
一部の実装形態は、ベクトルの要素を一度に1つだけ生成する処理回路を使用し得る。しかしながら、性能を向上させるために、処理回路は、ベクトルに対するデータ要素のうちの少なくとも2つを並列に生成するための処理ユニットを有してもよい。
変換は、異なる方法で実行されてもよい。一例において、各データ要素に対し、処理回路は、浮動小数点値の指数と、そのデータ要素によって表現される二進値の部分の有効度とに基づいて、そのデータ要素に、浮動小数点値に基づいて選択されるビット値を投入すべきかどうかを判定し得る。例えば、一部のデータ要素は、浮動小数点仮数部のビットのいずれの有効度にも対応しない有効度を有する場合があり、その場合、これらの要素には、浮動小数点仮数部から選択されるいかなるビット値も投入されない。一例において、各データ要素に対し、処理回路は、浮動小数点値の仮数部に応じて初期値を形成し、その後その初期値を、浮動小数点値の指数と、そのデータ要素に関する制御情報によって指示される有効度とに依存するシフト量だけシフトさせてもよい。これにより、各処理レーンがいかなる他のレーンとも独立してそのデータ要素を生成することができる比較的単純な技術が提供され、これは、ベクトル処理の順次または並列いずれの実装形態をサポートするのにも有用である。その後、結果ベクトルを、各レーンについてシフタにより生成された値からアセンブルすることができる。シフト動作は、オーバーフロー、アンダーフロー、または、浮動小数点値に対応する二進値がメタデータにおいて指示された有効度またはサイズを有するベクトルによって正確に表現され得ないときの不精確条件を指示する例外情報を生成するのにも有用であり得る。そのような例外情報は、プログラマによって設定された有効度が変換されている浮動小数点値の現在値を処理するのに好適でないときをシステムが判定することを可能にし得る。
概して、各データ要素は、2の補数値を含み得る(符号マグニチュード形態における浮動小数点値の仮数部に対するものとして)。したがって、浮動小数点値が負である場合、ベクトルの少なくとも1つのデータ要素が、浮動小数点値の仮数部に対して符号反転されている値と共に生成されるように、符号反転動作が変換動作中に実行されてもよい。これにより、ベクトルが浮動小数点値と同じ符号の値を表すことが確実となる。
概して、処理回路は、変換のみを実行するためのスタンドアロンの変換命令、または演算動作を変換と組み合わせる演算命令であってもよい第1の命令に応答して、変換動作を実行し得る。例えば、演算命令に応答して、処理回路は、演算動作(例えば乗算)を行って結果の浮動小数点値を生成してもよく、この値はその後、変換動作中にベクトルに変換することができる。他の例では、変換をまず実行してもよく、その後、変換されたベクトルおよびさらなるベクトルに演算動作(例えば加算または減算)を適用してもよい。
また、変換動作は、上述の形態のベクトルを、ベクトルのそれぞれのビット有効度部分によって表される二進値の代替的表現を表すスカラー値に変換するように実行されてもよい。例えば、スカラー値は、二進法もしくは十進法の浮動小数点値、整数値、または固定小数点値であってもよい。これにより、上述のベクトル形態が、必要に応じて外部表現可能な形式にマッピングし戻されることが可能になる。例えば、他のデバイスとの互換性に関して、内部処理に使用されるベクトル形式を固定小数点、整数、または浮動小数点形式に対してマッピングすることが有用であり得る。
かさねて、ベクトル−スカラー変換動作は、プログラム可能な制御情報に応答して、ベクトルに従うスカラー値を生成してもよい。制御情報は、中間値もしくはレジスタ指定子によって命令内で指定されてもよいし、または固定制御レジスタ内に置かれてもよい。制御情報は、単一の値として、あるいは各要素につき別々に指定される複数の値として、ベクトルのデータ要素によって表現されるビット有効度部分の有効度を指示してもよい。制御情報はまた、ベクトルのデータ要素がいくつ存在するかを指定してもよい。これにより、ベクトルが可変サイズおよび有効度の二進値を表現することができるようにプログラマが制御情報を定義することが可能となる。ベクトルは、要素毎に順次、または、データ要素のうち少なくとも2つを並列に処理するように処理ユニットで並列に処理することができる。
スカラーが整数または固定小数点値である場合、ベクトルのデータ要素の少なくとも一部に関して、処理回路は、制御情報によって指示される有効度に基づいて、スカラー値のビット部分に対応する有効度を有するデータ要素の1個以上のビットを選択し、その後、選択されたビットに基づいてスカラー値を形成してもよい。
ベクトルを浮動小数点値に変換するために、処理回路は、ベクトルの最大有効非符号ビットの位置と、最大有効符号なしビットを有するベクトルのデータ要素に関する制御情報によって指示される有効度とに基づいて、指数を判定してもよい。浮動小数点値の仮数部は、ベクトルの要素のうち少なくとも1つに関する部分的な仮数部値を生成し、浮動小数点値の仮数部が各要素につき生成された部分的な仮数部値に基づいて形成されるように、仮数部生成動作を実行することによって生成されてもよい。例えば、所与のデータ要素に対する仮数部生成動作は、その要素が少なくとも1つの非符号ビットを有するかどうかを検出することと、そうであれば、部分的な仮数部値として、データ要素の最大有効非符号ビットと、最大有効符号なしビットの位置に応じて選択されるデータ要素の低有効度ビットの数とを出力することと、を含み得る。
一部の実装形態では、仮数部生成動作は、処理を高速化するために、データ要素のうち少なくとも一部に対して並列に実行されてもよい。それから、各要素に対する結果が後に組み合わされて、全体的な仮数部を決定され得る。例えば、各処理レーンは、ベクトルのその要素がベクトル全体の最大有効非符号ビットを含むという仮定の上で、仮数部生成動作を実行してもよい。処理回路はその後、各レーンの結果が分かった時点で、どのレーンが最大有効非符号ビットを実際に含むかに基づいて浮動小数点値の仮数部を形成し得る。
代替的に、有効生成動作は、要素のうち少なくとも一部に対して順次実行されてもよい。これは処理を簡略化し得、それは、少なくともいくつかのレーンに関しては、仮数部がもっぱら他のレーンについて生成された部分的な仮数部値から形成されることが既知であれば、部分的な仮数部を生成する必要がない場合があるからである。後の要素に対する仮数部生成動作は、必要な処理量を低減させるために、より前の要素に対する仮数部生成動作において生成された情報に依存し得る。一例において、仮数部生成動作は、ベクトルの最大有効要素から開始して最小有効要素で終わるように左から右へ順次実行されてもよい。この場合では、非符号ビットを有する最大有効要素が置かれるとき、その要素に対して生成された部分的な有効値が浮動小数点値の仮数部に必要な合計ビット数よりも少ないビットを有する場合、生成される残りのビットの数を指示する制御値が出力され得、これは、次の要素に対する仮数部生成動作において、必要な残りのビット数を選択するために使用され得る。これにより、各要素について完全な仮数部生成動作を実行する必要性が回避される。ベクトルの低有効度要素に関する処理レーンは、部分的な仮数部の生成を必要とするのではなく、むしろ、丸めに使用されるガード/スティッキービットなどの状態情報を単に更新するだけの場合がある。
他の例では、仮数部生成動作は、最小有効部分から開始してベクトルのより高有効度の部分で終わるように右から左へ順次適用され得る。
スカラー値が浮動小数点値を含み、ベクトルが負の二進値を表すとき、浮動小数点値の仮数部が、ベクトルの少なくとも一部に対して符号反転されている二進値を有するように、符号反転動作が変換動作中に実行されてもよい。これにより、ベクトル形式で表現された数の符号が保たれる。
浮動小数点−ベクトル変換に関しては、ベクトル−スカラー変換が、専用の変換命令、または変換を演算動作と組み合わせる演算命令に応答して実行されてもよい。
概して、変換は、本明細書で説明された高位値アンカー固定点(HPA)形式を有する値と、HPAデータ値により表される二進値の代替的表現を提供する別のデータ値との間で、いずれの方向で実行されてもよい。
本明細書に記載される少なくともいくつかの実施形態例において、演算回路の上流に配設された整合回路は、プログラム可能な有効度パラメータに従って1つ以上の入力オペランドを整合させるように、例えば、等しい有効度をもつ入力オペランドのビット位置が、演算回路の対応するビット入力に供給され、演算回路がその後、例えば、整数演算動作によって入力オペランドを処理し得るように、入力オペランドを整合させるように機能する。プログラム可能な有効度パラメータは、整合された結果値とは独立していてもよい(例えば、結果値は正規化されない)。むしろ、プログラム可能な有効度パラメータは、例えば結果値の有効度に従って、または入力オペランドの有効度に従って、別様に設定されてもよい。
演算回路は、多様な異なる形態をとることができる。演算回路のいくつかの形態例は、整数加算器および/または整数乗算器を含む。他の形態の演算回路も可能である。
入力オペランドが多様な異なる形態を有することができることは理解されるであろう。いくつかの実施形態例では、入力オペランドのうちの1つ以上が、浮動小数点入力オペランドであり得る。この場合、浮動小数点入力オペランドの指数値も、浮動小数点入力オペランドの仮数部値の整合をプログラム可能な有効度パラメータと指数値との両方に従って制御するために、整合回路に供給されてもよい。
他の実施形態では、場合により、1つ以上の浮動小数点入力オペランドと組み合わせて、アンカー固定オペランドがまた、整合回路に対する入力として機能し得る。そのようなアンカー固定オペランドは、それ自体のプログラム可能な入力オペランド有効度を有し、整合回路は、このプログラム可能な入力オペランド有効度と、前述のプログラム可能な有効度パラメータとの両方に応答し得る。
プログラム可能な入力オペランド有効度は、多様な異なる方法で指定され得る。いくつかの実施形態例では、プログラム可能な入力オペランド有効度は、有効度下方境界と有効度上方境界との間の範囲を指定するように機能する。これは例えば、境界値を直接指定すること、1つの境界値および幅を指定すること、1つの境界値と、それぞれ既知の幅をもつベクトルのコンポーネントの数とを指定することなどによって達成され得る。
一部の実施形態では、プログラム可能な有効度パラメータは、入力オペランドの形態または相対的な有効度とは独立して、出力記憶素子に対して設定されてもよい。例えば、結果値が書き込まれる結果レジスタは、関連付けられたプログラム可能な有効度パラメータを有し得、入力オペランドは、結果レジスタの有効度に対応し、かつ未だ計算されていない結果値とは独立した有効度を有するために、演算回路の動作の前に整合回路により整合されている。
他の実施形態例において、プログラム可能な有効度パラメータは、その代わりに、1つ以上の入力オペランドのうちのいずれかの最も高い有効度と一致するように、出力記憶素子に対して設定されてもよい。
添付の図面を参照しながら本発明の例示的な実施形態を本明細書に詳細に記載してきたが、本発明はこれらの精確な実施形態に限定されないこと、そして、添付の特許請求の範囲によって定義される本発明の範囲および主旨から逸脱することなく様々な変更、追加、および修正が当業者によって本発明に行われ得ることを理解されたい。例えば、本発明の範囲から逸脱することなく、独立請求項の特徴と従属請求項との特徴の様々な組み合わせがなされ得る。

Claims (11)

  1. データを処理するための装置であって、
    ビット有効度に関して、1つ以上の入力オペランドのうちのいずれかを、出力記憶素子について指定されたプログラム可能な有効度パラメータに対して整合させて、1つ以上の整合された入力オペランドを提供するための整合回路であって、前記プログラム可能な有効度パラメータは、前記出力記憶素子に記憶される結果値の各ビットにより2の何乗と表すのかを示す、前記整合回路と
    前記1つ以上の整合された入力オペランドを受信し、前記1つ以上の整合された入力オペランドに対して演算動作を実行して前記結果値を生成し、前記結果値を前記出力記憶素子に記憶するように、前記整合回路に連結された演算回路と、を備え、
    前記プログラム可能な有効度パラメータが、前記結果値とは独立している、装置。
  2. 前記演算回路が、整数加算器である、請求項1に記載の装置。
  3. 前記演算回路が、整数乗算器である、請求項1に記載の装置。
  4. 前記1つ以上の入力オペランドのうち少なくとも1つが、指数値および仮数部値を有する浮動小数点入力オペランドであり、前記整合回路が、前記プログラム可能な有効度パラメータおよび前記指数値に応答して、ビット有効度に関して前記仮数部を前記結果値と整合させる、請求項1〜3のいずれか一項に記載の装置。
  5. 前記1つ以上の入力オペランドのうち少なくとも1つが、プログラム可能な入力オペランド有効度を有するアンカー固定オペランドであり、前記整合回路が、前記プログラム可能な有効度パラメータおよび前記プログラム可能な入力オペランド有効度に応答して、ビット有効度に関して、前記アンカー固定オペランドを前記結果値と整合させる、請求項1〜4のいずれか一項に記載の装置。
  6. 前記プログラム可能な入力オペランド有効度が、有効度下方境界と有効度上方境界との間の範囲を指定する、請求項5に記載の装置。
  7. 前記プログラム可能な有効度パラメータが、前記1つ以上の入力オペランドとは独立して、前記出力記憶素子に対して設定される、請求項1〜6のいずれか一項に記載の装置。
  8. 前記プログラム可能な有効度パラメータが、前記1つ以上の入力オペランドのうちのいずれかの最も高い有効度と一致するように、前記出力記憶素子に対して設定される、請求項1〜7のいずれか一項に記載の装置。
  9. 前記出力記憶素子が出力レジスタであり、前記プログラム可能な有効度パラメータが前記結果値のビット有効度を指示し、
    前記整合回路が、前記結果値のビット長を指示するプログラム可能な長さパラメータにより指定されたサイズを有する前記結果値を生成するよう構成された、請求項1〜8のいずれか一項に記載の装置。
  10. データを処理するための装置であって、
    ビット有効度に関して、1つ以上の入力オペランドのうちのいずれかを、出力記憶素子について指定されたプログラム可能な有効度パラメータに対して整合させて、1つ以上の整合された入力オペランドを提供するための整合手段であって、前記プログラム可能な有効度パラメータは、前記出力記憶素子に記憶される結果値の各ビットにより2の何乗と表すのかを示す、前記整合手段と
    前記1つ以上の整合された入力オペランドを受信し、前記1つ以上の整合された入力オペランドに対して演算動作を実行して前記結果値を生成し、前記結果値を前記出力記憶素子に記憶するための、前記整合手段に連結された演算手段と、を備え、
    前記プログラム可能な有効度パラメータが、前記結果値とは独立している、装置。
  11. データを処理する方法であって、
    ビット有効度に関して、1つ以上の入力オペランドのうちのいずれかを、出力記憶素子について指定されたプログラム可能な有効度パラメータに対して整合させて、1つ以上の整合された入力オペランドを提供することであって、前記プログラム可能な有効度パラメータは、前記出力記憶素子に記憶される結果値の各ビットにより2の何乗と表すのかを示す、前記提供することと、
    前記1つ以上の整合された入力オペランドを受信することと、
    前記1つ以上の整合された入力オペランドに対して演算動作を実行して前記結果値を生成することと、
    前記結果値を前記出力記憶素子に記憶することと、を含み、
    前記プログラム可能な有効度パラメータが、前記結果値とは独立している、方法。
JP2017522512A 2014-11-03 2015-09-22 有効度整合 Active JP6694880B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462074149P 2014-11-03 2014-11-03
US62/074,149 2014-11-03
US14/582,974 2014-12-24
US14/582,974 US9690543B2 (en) 2014-11-03 2014-12-24 Significance alignment
PCT/GB2015/052730 WO2016071665A1 (en) 2014-11-03 2015-09-22 Arithmetic processing with alignment to programmable decimal point position

Publications (2)

Publication Number Publication Date
JP2017538197A JP2017538197A (ja) 2017-12-21
JP6694880B2 true JP6694880B2 (ja) 2020-05-20

Family

ID=55852722

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2017522513A Active JP6853777B2 (ja) 2014-11-03 2015-09-18 プログラム可能な有効度データを使用するデータ処理装置および方法
JP2017522512A Active JP6694880B2 (ja) 2014-11-03 2015-09-22 有効度整合

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2017522513A Active JP6853777B2 (ja) 2014-11-03 2015-09-18 プログラム可能な有効度データを使用するデータ処理装置および方法

Country Status (5)

Country Link
US (8) US9916130B2 (ja)
JP (2) JP6853777B2 (ja)
CN (5) CN107077416B (ja)
GB (3) GB2545607B (ja)
WO (8) WO2016071661A1 (ja)

Families Citing this family (59)

* 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
US10838719B2 (en) 2014-11-14 2020-11-17 Marvell Asia Pte, LTD Carry chain for SIMD operations
US20160179530A1 (en) * 2014-12-23 2016-06-23 Elmoustapha Ould-Ahmed-Vall Instruction and logic to perform a vector saturated doubleword/quadword add
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US11204764B2 (en) * 2016-03-31 2021-12-21 Intel Corporation Processors, methods, systems, and instructions to Partition a source packed data into lanes
RU2633095C1 (ru) * 2016-07-05 2017-10-11 Федеральное государственное бюджетное образовательное учреждение высшего образования "Кубанский государственный технологический университет" (ФГБОУ ВПО "КубГТУ") Цифровое устройство для логарифмирования двоичных чисел
US10019231B2 (en) * 2016-08-22 2018-07-10 Arm Limited Apparatus and method for fixed point to floating point conversion and negative power of two detector
US20180088946A1 (en) * 2016-09-27 2018-03-29 Intel Corporation Apparatuses, methods, and systems for mixing vector operations
US9785435B1 (en) 2016-10-27 2017-10-10 International Business Machines Corporation Floating point instruction with selectable comparison attributes
US10216479B2 (en) * 2016-12-06 2019-02-26 Arm Limited Apparatus and method for performing arithmetic operations to accumulate floating-point numbers
US10067744B2 (en) * 2016-12-08 2018-09-04 International Business Machines Corporation Overflow detection for sign-magnitude adders
US10579338B2 (en) * 2017-01-30 2020-03-03 Arm Limited Apparatus and method for processing input operand values
JP6992271B2 (ja) * 2017-04-06 2022-01-13 株式会社デンソー 無線通信端末
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US11321049B2 (en) 2017-05-04 2022-05-03 The Research Foundation For The State University Of New York Fast binary counters based on symmetric stacking and methods for same
US11437032B2 (en) 2017-09-29 2022-09-06 Shanghai Cambricon Information Technology Co., Ltd Image processing apparatus and method
JP6540770B2 (ja) * 2017-10-17 2019-07-10 富士通株式会社 演算処理回路、演算処理回路を含む演算処理装置、演算処理装置を含む情報処理装置、および方法
EP3499362B1 (en) * 2017-12-13 2022-11-30 ARM Limited Vector add-with-carry instruction
US11630666B2 (en) 2018-02-13 2023-04-18 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
US11663002B2 (en) 2018-02-13 2023-05-30 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
KR102252137B1 (ko) * 2018-02-13 2021-05-13 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 계산 장치 및 방법
CN116991226A (zh) 2018-02-14 2023-11-03 上海寒武纪信息科技有限公司 处理器的控制装置、方法及设备
US11119730B1 (en) * 2018-03-26 2021-09-14 Cloud & Stream Gears Llc Elimination of rounding error accumulation
CN108647779B (zh) * 2018-04-11 2021-06-04 复旦大学 一种低位宽卷积神经网络可重构计算单元
WO2019218896A1 (zh) 2018-05-18 2019-11-21 上海寒武纪信息科技有限公司 计算方法以及相关产品
CN108762720B (zh) * 2018-06-14 2021-06-29 北京比特大陆科技有限公司 数据处理方法、数据处理装置以及电子设备
WO2020001438A1 (zh) 2018-06-27 2020-01-02 上海寒武纪信息科技有限公司 片上代码断点调试方法、片上处理器及芯片断点调试系统
JP6867518B2 (ja) 2018-08-28 2021-04-28 カンブリコン テクノロジーズ コーポレイション リミティド データ前処理方法、装置、コンピュータ機器及び記憶媒体
EP3859488A4 (en) 2018-09-28 2022-06-29 Shanghai Cambricon Information Technology Co., Ltd Signal processing device, signal processing method and related product
US10824692B2 (en) 2018-10-12 2020-11-03 Google Llc Low-power adder circuit
JP2020098469A (ja) * 2018-12-18 2020-06-25 富士通株式会社 演算処理装置および演算処理装置の制御方法
CN111385462A (zh) 2018-12-28 2020-07-07 上海寒武纪信息科技有限公司 信号处理装置、信号处理方法及相关产品
CN109934255B (zh) * 2019-01-22 2023-05-30 小黄狗环保科技有限公司 一种适用于饮料瓶回收机投递物分类识别的模型融合方法
US10963245B2 (en) * 2019-02-06 2021-03-30 Arm Limited Anchored data element conversion
US10459688B1 (en) 2019-02-06 2019-10-29 Arm Limited Encoding special value in anchored-data element
US10936285B2 (en) * 2019-02-06 2021-03-02 Arm Limited Overflow or underflow handling for anchored-data value
FR3093571B1 (fr) * 2019-03-08 2021-03-19 Commissariat Energie Atomique Procédé et dispositif de représentation en virgule flottante avec précision variable
US20200334522A1 (en) 2019-04-18 2020-10-22 Cambricon Technologies Corporation Limited Data processing method and related products
CN111832739B (zh) 2019-04-18 2024-01-09 中科寒武纪科技股份有限公司 一种数据处理方法及相关产品
US11216281B2 (en) 2019-05-14 2022-01-04 International Business Machines Corporation Facilitating data processing using SIMD reduction operations across SIMD lanes
US11676029B2 (en) 2019-06-12 2023-06-13 Shanghai Cambricon Information Technology Co., Ltd Neural network quantization parameter determination method and related products
EP3772022A1 (en) 2019-06-12 2021-02-03 Shanghai Cambricon Information Technology Co., Ltd Method for determining quantization parameters in neural network and related products
US11640649B2 (en) 2019-06-19 2023-05-02 Samsung Electronics Co., Ltd. Methods and apparatus for efficient range calculation
CN112148371B (zh) * 2019-06-27 2023-10-24 北京地平线机器人技术研发有限公司 基于单指令多数据流的数据运算方法、装置、介质和设备
US11256476B2 (en) 2019-08-08 2022-02-22 Achronix Semiconductor Corporation Multiple mode arithmetic circuit
US10778245B1 (en) * 2019-08-20 2020-09-15 Micron Technology, Inc. Bit string conversion
EP4020321A4 (en) 2019-08-23 2024-01-17 Anhui Cambricon Information Technology Co., Ltd. DATA PROCESSING METHOD, APPARATUS, COMPUTER APPARATUS AND STORAGE MEDIUM
US11334317B2 (en) 2019-11-27 2022-05-17 Core Concept Technologies Inc. Information processing apparatus, program, and information processing method configured to handle a high-precision computer number
WO2021106253A1 (ja) * 2019-11-27 2021-06-03 株式会社コアコンセプト・テクノロジー 情報処理装置、プログラム、及び情報処理方法
CN111290790B (zh) * 2020-01-22 2023-03-24 安徽大学 一种定点转浮点的转换装置
CN111708986A (zh) * 2020-05-29 2020-09-25 四川旷谷信息工程有限公司 管廊状态参数测量方法
US11704092B2 (en) * 2020-10-27 2023-07-18 Arm Limited High-precision anchored-implicit processing
CN112732223B (zh) * 2020-12-31 2024-04-30 上海安路信息科技股份有限公司 半精度浮点数除法器数据处理方法及系统
US11442696B1 (en) * 2021-03-23 2022-09-13 SambaNova Systems, Inc. Floating point multiply-add, accumulate unit with exception processing
US11366638B1 (en) 2021-03-23 2022-06-21 SambaNova Systems, Inc. Floating point multiply-add, accumulate unit with combined alignment circuits
US11429349B1 (en) 2021-03-23 2022-08-30 SambaNova Systems, Inc. Floating point multiply-add, accumulate unit with carry-save accumulator
WO2022215173A1 (ja) * 2021-04-06 2022-10-13 三菱電機株式会社 固定小数点演算ビット幅の検証システム及び決定システム
CN113805844B (zh) * 2021-09-14 2024-04-09 北京升哲科技有限公司 一种数据处理方法、装置、电子设备及存储介质
US20230289139A1 (en) * 2022-03-08 2023-09-14 International Business Machines Corporation Hardware device to execute instruction to convert input value from one data format to another data format

Family Cites Families (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4240144A (en) 1979-01-02 1980-12-16 Honeywell Information Systems Inc. Long operand alignment and merge operation
DE3138897A1 (de) * 1981-09-30 1983-04-14 Siemens AG, 1000 Berlin und 8000 München Schaltungsanordnung zur verarbeitung von speicheroperanden fuer dezimale und logische befehle
DE3144015A1 (de) 1981-11-05 1983-05-26 Ulrich Prof. Dr. 7500 Karlsruhe Kulisch "schaltungsanordnung und verfahren zur bildung von skalarprodukten und summen von gleitkommazahlen mit maximaler genauigkeit"
US4815021A (en) 1986-01-30 1989-03-21 Star Technologies, Inc. Multifunction arithmetic logic unit circuit
US4866653A (en) 1986-08-04 1989-09-12 Ulrich Kulisch Circuitry for generating sums, especially scalar products
US5257215A (en) * 1992-03-31 1993-10-26 Intel Corporation Floating point and integer number conversions in a floating point adder
US5619198A (en) 1994-12-29 1997-04-08 Tektronix, Inc. Number format conversion apparatus for signal processing
US5602769A (en) 1995-07-05 1997-02-11 Sun Microsystems, Inc. Method and apparatus for partially supporting subnormal operands in floating point multiplication
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US5968165A (en) 1996-05-08 1999-10-19 Microunity Systems Engineering, Inc. System and method for minimizing the size of operands
US6108772A (en) 1996-06-28 2000-08-22 Intel Corporation Method and apparatus for supporting multiple floating point processing models
CA2418916C (en) 1997-01-20 2008-08-19 Hitachi Ltd. Graphics processing unit and graphics processing system
JP3675111B2 (ja) * 1997-06-12 2005-07-27 ソニー株式会社 3入力比較器
EP1061436B1 (en) * 1997-10-23 2007-12-19 Advanced Micro Devices, Inc. Multifunction floating point addition/subtraction pipeline
DE69801678T2 (de) * 1997-10-23 2003-01-16 Advanced Micro Devices Inc Multifunktionnelle zweiteilige nachschlagetabelle
US6247116B1 (en) 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers
US6263426B1 (en) * 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
TW514822B (en) 1999-05-06 2002-12-21 Ind Tech Res Inst Low power consumption mathematic apparatus and method
US6460177B1 (en) 1999-09-22 2002-10-01 Lucent Technologies Inc. Method for target-specific development of fixed-point algorithms employing C++ class definitions
KR100325430B1 (ko) * 1999-10-11 2002-02-25 윤종용 상이한 워드 길이의 산술연산을 수행하는 데이터 처리장치 및 그 방법
US6633895B1 (en) 2000-02-22 2003-10-14 Hewlett-Packard Development Company, L.P. Apparatus and method for sharing overflow/underflow compare hardware in a floating-point multiply-accumulate (FMAC) or floating-point adder (FADD) unit
US6671796B1 (en) 2000-02-25 2003-12-30 Sun Microsystems, Inc. Converting an arbitrary fixed point value to a floating point value
US6701424B1 (en) 2000-04-07 2004-03-02 Nintendo Co., Ltd. Method and apparatus for efficient loading and storing of vectors
US7170997B2 (en) 2000-12-07 2007-01-30 Cryptico A/S Method of generating pseudo-random numbers in an electronic device, and a method of encrypting and decrypting electronic data
US20130212353A1 (en) * 2002-02-04 2013-08-15 Tibet MIMAR System for implementing vector look-up table operations in a SIMD processor
US20030167460A1 (en) * 2002-02-26 2003-09-04 Desai Vipul Anil Processor instruction set simulation power estimation method
JP2004071045A (ja) 2002-08-06 2004-03-04 Sony Corp デフェクト検出装置、デフェクト検出方法
US7236995B2 (en) 2002-12-27 2007-06-26 Arm Limited Data processing apparatus and method for converting a number between fixed-point and floating-point representations
CN100356314C (zh) * 2003-01-06 2007-12-19 上海奇码数字信息有限公司 可控制锁存累加器的系统与方法
EP1623307B1 (en) * 2003-05-09 2015-07-01 QUALCOMM Incorporated Processor reduction unit for accumulation of multiple operands with or without saturation
US7428567B2 (en) * 2003-07-23 2008-09-23 Sandbridge Technologies, Inc. Arithmetic unit for addition or subtraction with preliminary saturation detection
US7899855B2 (en) 2003-09-08 2011-03-01 Intel Corporation Method, apparatus and instructions for parallel data conversions
US7472155B2 (en) * 2003-12-29 2008-12-30 Xilinx, Inc. Programmable logic device with cascading DSP slices
GB2410097B (en) 2004-01-13 2006-11-01 Advanced Risc Mach Ltd A data processing apparatus and method for performing data processing operations on floating point data elements
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7797363B2 (en) * 2004-04-07 2010-09-14 Sandbridge Technologies, Inc. Processor having parallel vector multiply and reduce operations with sequential semantics
US7447725B2 (en) * 2004-11-05 2008-11-04 International Business Machines Corporation Apparatus for controlling rounding modes in single instruction multiple data (SIMD) floating-point units
US7725519B2 (en) * 2005-10-05 2010-05-25 Qualcom Incorporated Floating-point processor with selectable subprecision
US8024394B2 (en) 2006-02-06 2011-09-20 Via Technologies, Inc. Dual mode floating point multiply accumulate unit
US8595279B2 (en) * 2006-02-27 2013-11-26 Qualcomm Incorporated Floating-point processor with reduced power requirements for selectable subprecision
US8627050B2 (en) * 2007-10-08 2014-01-07 International Business Machines Corporation Executing perform floating point operation instructions
JP4935619B2 (ja) * 2007-10-23 2012-05-23 ヤマハ株式会社 デジタル信号処理装置
GB2454201A (en) 2007-10-30 2009-05-06 Advanced Risc Mach Ltd Combined Magnitude Detection and Arithmetic Operation
JP2009110353A (ja) 2007-10-31 2009-05-21 Hitachi Ltd マイクロコントローラ及び制御システム
CN100535851C (zh) * 2007-11-16 2009-09-02 中国科学院计算技术研究所 一种浮点数据转换装置和方法
US8327120B2 (en) * 2007-12-29 2012-12-04 Intel Corporation Instructions with floating point control override
US20100115233A1 (en) 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US8402464B2 (en) 2008-12-01 2013-03-19 Oracle America, Inc. System and method for managing contention in transactional memory using global execution data
US9582281B2 (en) 2009-03-31 2017-02-28 Nxp Usa, Inc. Data processing with variable operand size
US20110004644A1 (en) 2009-07-03 2011-01-06 Via Technologies, Inc. Dynamic floating point register precision control
US8468191B2 (en) 2009-09-02 2013-06-18 Advanced Micro Devices, Inc. Method and system for multi-precision computation
US8615541B2 (en) 2009-09-23 2013-12-24 Nvidia Corporation Extended-precision integer arithmetic and logical instructions
GB2474901B (en) * 2009-10-30 2015-01-07 Advanced Risc Mach Ltd Apparatus and method for performing multiply-accumulate operations
US8977669B2 (en) 2010-01-08 2015-03-10 International Business Machines Corporation Multi-input and binary reproducible, high bandwidth floating point adder in a collective network
CN101751244B (zh) * 2010-01-04 2013-05-08 清华大学 微处理器
US8694572B2 (en) 2010-07-06 2014-04-08 Silminds, Llc, Egypt Decimal floating-point fused multiply-add unit
US8880573B2 (en) 2010-10-12 2014-11-04 Dolby Laboratories Licensing Corporation System and method of dynamic precision operations
CN102025375B (zh) * 2010-12-07 2013-12-04 西安电子科技大学 模数转换器及其数字校准电路
EP2711835A4 (en) 2011-05-16 2014-10-29 Nec Corp ARITHMETIC TREATMENT DEVICE AND METHOD
TWI427597B (zh) 2011-08-11 2014-02-21 Innolux Corp 顯示器及其驅動方法
US9104479B2 (en) * 2011-12-07 2015-08-11 Arm Limited Apparatus and method for rounding a floating-point value to an integral floating-point value
CN102495719B (zh) * 2011-12-15 2014-09-24 中国科学院自动化研究所 一种向量浮点运算装置及方法
CN104011647B (zh) * 2011-12-22 2018-06-15 英特尔公司 浮点舍入处理器、方法、系统和指令
WO2013095658A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing a horizontal add or subtract in response to a single instruction
US8984042B2 (en) 2012-02-09 2015-03-17 International Business Machines Corporation Mixed precision estimate instruction computing narrow precision result for wide precision inputs
US9059726B2 (en) * 2012-05-11 2015-06-16 Arm Limited Apparatus and method for performing a convert-to-integer operation
US9081608B2 (en) 2012-05-19 2015-07-14 Digital System Research Inc. Residue number arithmetic logic unit
US9128759B2 (en) 2012-11-27 2015-09-08 International Business Machines Corporation Decimal multi-precision overflow and tininess detection
CN103092571B (zh) * 2013-01-10 2016-06-22 浙江大学 支持多种数据类型的单指令多数据算术单元
US9916130B2 (en) * 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing

Also Published As

Publication number Publication date
US9703529B2 (en) 2017-07-11
GB2545607B (en) 2021-07-28
US20160124711A1 (en) 2016-05-05
CN107077415B (zh) 2021-03-12
WO2016071665A1 (en) 2016-05-12
GB2546906A (en) 2017-08-02
JP6853777B2 (ja) 2021-03-31
WO2016071663A1 (en) 2016-05-12
US20160124714A1 (en) 2016-05-05
US9766857B2 (en) 2017-09-19
WO2016071662A1 (en) 2016-05-12
GB201705563D0 (en) 2017-05-24
CN107077323B (zh) 2021-06-01
US20160124905A1 (en) 2016-05-05
CN107077416B (zh) 2020-11-27
GB2546906B (en) 2021-08-18
GB2545607A (en) 2017-06-21
US9690543B2 (en) 2017-06-27
WO2016071666A1 (en) 2016-05-12
US20160126975A1 (en) 2016-05-05
US20160126974A1 (en) 2016-05-05
CN107077415A (zh) 2017-08-18
CN107077322B (zh) 2021-07-09
WO2016071667A1 (en) 2016-05-12
WO2016071668A1 (en) 2016-05-12
CN107077323A (zh) 2017-08-18
CN107077322A (zh) 2017-08-18
CN107077417A (zh) 2017-08-18
JP2017538197A (ja) 2017-12-21
US20160124710A1 (en) 2016-05-05
CN107077417B (zh) 2021-02-09
CN107077416A (zh) 2017-08-18
GB2546907B (en) 2021-07-28
US20160124712A1 (en) 2016-05-05
GB201705565D0 (en) 2017-05-24
GB201705562D0 (en) 2017-05-24
US20160124746A1 (en) 2016-05-05
US9766858B2 (en) 2017-09-19
US9886239B2 (en) 2018-02-06
JP2018500635A (ja) 2018-01-11
US9916130B2 (en) 2018-03-13
US9665347B2 (en) 2017-05-30
WO2016071661A1 (en) 2016-05-12
GB2546907A (en) 2017-08-02
WO2016071664A1 (en) 2016-05-12
US9778906B2 (en) 2017-10-03

Similar Documents

Publication Publication Date Title
JP6694880B2 (ja) 有効度整合
EP3374853B1 (en) Multiplication of first and second operands using redundant representation
US9733899B2 (en) Lane position information for processing of vector
US9720646B2 (en) Redundant representation of numeric value using overlap bits
JP6877812B2 (ja) 重複伝搬演算

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180914

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190702

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191002

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200326

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200420

R150 Certificate of patent or registration of utility model

Ref document number: 6694880

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250