CN107077323A - 使用可编程有效性数据的数据处理的装置和方法 - Google Patents
使用可编程有效性数据的数据处理的装置和方法 Download PDFInfo
- Publication number
- CN107077323A CN107077323A CN201580058293.1A CN201580058293A CN107077323A CN 107077323 A CN107077323 A CN 107077323A CN 201580058293 A CN201580058293 A CN 201580058293A CN 107077323 A CN107077323 A CN 107077323A
- Authority
- CN
- China
- Prior art keywords
- value
- data
- hpa
- process circuit
- validity
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 118
- 238000012545 processing Methods 0.000 title claims description 84
- 230000008569 process Effects 0.000 claims abstract description 98
- 230000004044 response Effects 0.000 claims abstract description 31
- 238000013500 data storage Methods 0.000 claims description 46
- 238000003860 storage Methods 0.000 claims description 12
- 230000000694 effects Effects 0.000 claims description 11
- 238000003672 processing method Methods 0.000 claims description 5
- 230000005611 electricity Effects 0.000 claims description 4
- 239000013598 vector Substances 0.000 description 165
- 238000007667 floating Methods 0.000 description 94
- 238000007792 addition Methods 0.000 description 81
- 238000006243 chemical reaction Methods 0.000 description 68
- 230000000295 complement effect Effects 0.000 description 54
- 239000000047 product Substances 0.000 description 39
- 230000008859 change Effects 0.000 description 29
- 238000004422 calculation algorithm Methods 0.000 description 15
- 230000004087 circulation Effects 0.000 description 15
- 229910002056 binary alloy Inorganic materials 0.000 description 14
- 238000013519 translation Methods 0.000 description 12
- 238000006073 displacement reaction Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 9
- 238000002347 injection Methods 0.000 description 9
- 239000007924 injection Substances 0.000 description 9
- 230000001186 cumulative effect Effects 0.000 description 8
- 102100036597 Basement membrane-specific heparan sulfate proteoglycan core protein Human genes 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 238000001514 detection method Methods 0.000 description 6
- 238000013459 approach Methods 0.000 description 5
- 230000006399 behavior Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 235000013399 edible fruits Nutrition 0.000 description 5
- 230000001133 acceleration Effects 0.000 description 3
- 238000010606 normalization Methods 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 239000000654 additive Substances 0.000 description 2
- 230000000996 additive effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000011049 filling Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 101150008147 nanB gene Proteins 0.000 description 2
- 238000005381 potential energy Methods 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000005945 translocation Effects 0.000 description 2
- 241001168730 Simo Species 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000012084 conversion product Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 208000002173 dizziness Diseases 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000001568 sexual effect Effects 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
- G06F5/012—Methods 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49915—Mantissa overflow or underflow in handling floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49921—Saturation, i.e. clipping the result to a minimum or maximum value
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
- G06F7/49947—Rounding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/50—Adding; Subtracting
- G06F7/505—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
- G06F7/506—Adding; 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/507—Adding; 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/02—Conversion 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/12—Conversion 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
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/14—Conversion to or from non-weighted codes
- H03M7/24—Conversion to or from floating-point codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3404—Recording 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/348—Circuit details, i.e. tracer hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/483—Indexing scheme relating to group G06F7/483
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/50—Adding; Subtracting
- G06F7/505—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
- G06F7/506—Adding; 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
Abstract
一种装置可以具有处理电路来执行一个或多个算术运算以基于至少一个操作数生成结果值。针对至少一个算术运算,该处理电路响应于指示结果值的目标有效性的可编程有效性数据而生成具有该目标有效性的结果值。例如,这允许程序员为算术运算设置有效性边界,以使得处理电路不必计算具有落在指定的边界外的有效性的位值,从而能够提升性能。
Description
本申请要求美国临时申请62/074,149的优先权,其全部内容通过引用合并于此。
本技术涉及数据处理的领域。
已知提供了支持整数算法和浮点算法的数据处理系统。
一方面,提供了一种装置,该装置包括:
处理电路,该处理电路执行一个或多个算术运算以基于至少一个操作数生成结果值;
其中针对至少一个算术运算,该处理电路响应于指示结果值的目标有效性的可编程有效性数据而生成具有该目标有效性的结果值。
另一方面,提供了一种设备,该设备包括:
用于执行一个或多个算术运算以基于至少一个操作数生成结果值的处理装置;
其中针对至少一个算术运算,该处理装置响应于指示结果值的目标有效性的可编程有效性数据而生成具有该目标有效性的结果值。
另一方面,提供了一种数据处理方法,该方法包括:
使用处理电路执行算术运算以基于至少一个操作数生成结果值;
其中该处理电路响应于指示结果值的目标有效性的可编程有效性数据而生成具有该目标有效性的结果值。
另一方面,提供了一种装置,该装置包括:
至少一个数据存储元件;以及
存储针对至少一个相应的数据存储元件的元数据的元数据存储元件,其中该元数据指示将被存储在所述至少一个相应的数据存储元件中的数据值的目标有效性和目标大小。
另一方面,提供了一种设备,该设备包括:
用于存储数据值的至少一个数据存储装置;以及
用于存储针对至少一个相应的数据存储装置的元数据的元数据存储元件装置,其中该元数据指示将被存储在所述至少一个相应的数据存储装置中的数据值的目标有效性和目标大小。
从以下对说明性实施例的详细描述中可以看出上述及其他对象、特征和优点,将结合附图来阅读对示例的对说明性实施例的详细描述。
图1概要地示出了选择进位加法器;
图2概要地示出了先行进位加法器;
图3示出了使浮点数加到HPA数的方式;
图4示出了数字的示例HPA表示;
图5是在将HPA数转换为浮点数时生成有效数字的示例;
图6示出了使用HPA算法使若干浮点值相加的示例,其中HPA数适合硬件大小;
图7示出了使用HPA算法使若干浮点值相加的示例,其中HPA数比硬件大小宽;
图8概要地示出了数据处理系统;
图9概要地示出了用于表示将在数据处理系统内被操纵的数字的不同格式;
图10概要地示出了双精度浮点值和HPA值之间的示例关系;
图11概要地示出了用于使输入操作数与结果HPA寄存器配准的电路;
图12概要地示出了用于根据向量HPA数中的多个组分以及程序指令对该HPA数执行处理运算的电路,其中不同组分被并行地处理;
图13概要地示出了用于根据向量HPA数中的多个组分以及程序指令对该HPA数执行处理运算的电路,其中不同组分被串行地处理;
图14概要地示出了关于使用HPA数执行的处理的例外指示生成;
图15示出了具有处理电路的装置的示例,该处理电路用于基于可编程控制数据所指定的目标有效性和/或目标大小来生成结果;
图16示出了设置算术运算的高有效性边界和低有效性边界的示例;
图17示出了高精度锚定(HPA)数据格式的示例;
图18示出了用于存储元数据(包括锚定值)的元数据存储元件的示例,元数据指示将被存储在相应的数据存储元件中的数据值的目标有效性;
图19示出了包括用于执行并行处理线路的多个处理单元的处理电路的示例;
图20示出了用于使一系列浮点值相加的累加运算的示例;
图21示出了将浮点值转换为具有HPA数据格式的值的示例;以及
图22示出了将具有HPA数据格式的值转换为浮点值的示例。
这里公开了新的数据类型和新的指令,它们允许快速且正确地累加程序员可选的范围内的浮点(FP)数。对将容纳大部分问题的适度范围而言,这种累加比FP加法块,且是结合的。结合加法允许问题被并行化,同时仍给出可重现且正确的结果,使得与现有硬件相比能够加速例如100倍或更多倍。我们相信这些益处在高性能计算(HPC)领域是极为诱人的,对于许多非HPC应用也是引人注目的。
浮点(FP)算法的已知问题在于它是非结合的,这一事实使得和是或然性的:
·即使在使3个数相加时程序员也需要为完全不同的结果而烦恼
·程序员使用比他们所需要的更广泛的格式以期望避免这些完全不同的结果
·程序员不能方便地使代码并行化,因为除非以严格相同的顺序进行计算否则和是不可再现的
例如,在单精度中
220+(-244+244)=220
但是
(220+-244)+244=0
取决于运算被执行的顺序,结果是一百万或零。因为指数相差24所以这是一个极端的示例,但是如果指数相差1,或者即使全部指数都是相同的并且我们使得多个3项相加,那么我们也能够得到不同的答案。C编程语言通过要求和被从左到右按顺序地进行评估而解决了再现性问题,但是这对正确性没有任何帮助,并且使并行化变得不可能。
对高性能计算(HPC)而言,这些问题是尤为突出的,其中程序可能需要使成千上万项相加。程序员想要使这些问题并行化,但是缺乏再现性使得调试比通常情况更为困难。即使完美地对机器进行重新编程,那些机器的不同配置也将产生不同的答案。
浮点数
浮点型(FP)是使用少量比特来逼近实数的有用的方式。IEEE 754-2008FP标准处理针对FP数的多种不同格式,但是其中三个为二进制64(也称作双精度,或DP)、二进制32(也称作单精度,或SP)、以及二进制16(也称作半精度,或HP)。数字64、32和16指的是每种格式所需的比特数。
表示
FP数十分类似于科学课上所教导的“科学记数法”,其中不写负二百万而是写作-2.0×106。该数的各部分为:符号(在此情形下为负号)、有效数字(2.0)、指数的基数(10)、以及指数(6)。全部这些部分在FP数中有类似物,但是存在差异,最主要的差异是这些组成部分被存储为二进制数,并且指数的基数总是2。
更确切地说,FP数包括符号位、一些有偏倚的指数位、以及一些小数位。具体地,DP、SP和HP格式包含以下位:
格式 | 符号 | 指数 | 小数 | 指数偏倚 |
DP[63:0] | 63 | 62:52(11位) | 51:0(52位) | 1023 |
SP[31:0] | 31 | 30:23(8位) | 22:0(23位) | 127 |
HP[15:0] | 15 | 14:10(5位) | 9:0(10位) | 15 |
对于负数符号是1,对于正数符号是0。每个数包括零在内都有符号。
指数是偏倚的,这表示真正的指数不同于该数字中所存储的指数。例如,偏倚的SP指数位8比特长且范围为从0到255。指数0和255是特殊情形,但是全部其他指数具有偏倚127,这表示真正的指数比偏倚的指数小127。最小的偏倚的指数是1,其对应于真正的指数-126。最大的偏倚的指数是254,其对应于真正的指数127。HP和DP指数利用上表中所指示的偏倚以相同的方式起作用。
SP指数255(或DP指数2047或HP指数31)被预留用于无穷大一级称作NaN的特殊符号(不是数字)。无穷大(可以是正的或负的)具有零小数。具有指数255和非零小数的任意数字是NaN。无穷大提供了饱和值,所以它实际上表示类似于“该计算生成了大于以此格式能够表示的最大数字的数字”的事情。
对于并非用数学方法在实数上定义的运算(例如,除以零或取负数的平方根)返回NaN。
在任意格式中,指数零被预留用于次正规数和零。正规数表示如下值:
-1符号×1.小数×2e
其中e是从偏移的指数计算得出的真实指数。项1.小数被称作有效数字,并且1不被存储为FP数的一部分,而是从指数推导出的。除零和最大指数之外的全部指数指示1.小数形式的有效数字。指数零指示0形式的有效数字,并且真正的指数等于1-给定格式的偏倚。这样的数字被称为次正规数(历史上这些数字被称为非正规数,但是现代用法偏好术语次正规数)。
具有等于零的指数部分和小数部分的数字是零。
下表具有HP格式的一些示例数字。这些条目是二进制的,其中添加了字符“_”以增加可读性。注意,次正规条目(该表的低第4行,具有零指数)与上一行中的正规条目相比产生了不同的有效数字。
符号 | 5位指数 | 10位小数 | 11位有效数字 | 值 |
0 | 01111 | 00_0000_0000 | 100_0000_0000 | 1.0×20 |
1 | 01110 | 10_0000_0000 | 110_0000_0000 | -1.1×2-1 |
0 | 00001 | 10_0000_0000 | 110_0000_0000 | 1.1×2-14 |
0 | 00000 | 10_0000_0000 | 010_0000_0000 | 0.1×2-14 |
1 | 11111 | 00_0000_0000 | -无穷大 | |
0 | 11111 | 00_1111_0011 | NaN |
FP实现方式的大部分复杂度是由次正规数带来的,因此经常通过微代码或软件来处理次正规数。一些处理器在硬件中处理次正规数,与软件或微代码实现方式相比使这些运算加速了10到100倍。
整数、定点型、浮点型
处理符号的FP方式被称为符号数值,并且它不同于整数被存储在计算机中的常规方式(二进制补码)。在符号数值表示中,同一数字的正版本和负版本的不同之处仅在于符号位。由符号位和3个有效数字位构成的4位符号数值整数将如下来表示正一或负一:
+1=0001
-1=1001
在二进制补码表示中,n位整数i由二进制n+1位值2n+i的低阶n位来表示,所以4位二进制补码整数将如下来表示正一或负一:
+1=0001
-1=1111
二进制补码格式在实践中通用于有符号整数,因为它简化了计算机算法。
定点数看起来与整数一模一样,但事实上表示具有某些小数位的值。传感器数据经常是定点格式的,并且存在在广泛采用FP之前编写的大量定点软件。以定点数进行工作是十分冗长乏味的,因为程序员不得不跟踪“二进制点”(即,数字的整数部分和小数部分的分隔符),并且还不得不不断地对数字进行移位以保持这些位在正确的地方。FP数不具有这种困难,因此能够在定点数和FP数之间转换是可取的。能够进行这种转换还意味着我们能够继续使用定点软件和数据,但是在编写新软件时不再限于定点型。
舍入FP数
IEEE-754标准要求大部分FP运算就像该运算是以未舍入的范围和精度实现的那样被计算,然后进行舍入以适应于FP数。如果计算严格符合FP数,则该值总是被返回,但是计算结果经常是介于两个连续浮点数之间的值。舍入是选取两个连续数字中哪个数字应当被返回的过程。
存在多种舍入方式,称为舍入模式;其中的六个如下表所示:
该定义并没有告诉我们如何以任何切实可行的方式进行舍入。一种常用的实现方式是进行运算,关注截断值(即,满足FP格式的值)以及全部剩余位,并且如果某些条件成立则调整截断值。这些计算全部都基于:
L-(最低)截断值的最低有效位
G-(防护)下一个最高有效位(即,第一位未被包括在截断中)
S-(粘滞)对并非截断的一部分的全部剩余位的逻辑或
在给定这三个值以及截断值时,我们总能根据下表计算出正确舍入的值:
模式 | 改变到截断值 |
RNE | 如果(L&G)|(G&S)则增大 |
RNA | 如果G则增大 |
RZ | 无 |
RP | 如果正的&(G|S)则增大 |
RM | 如果负的&(G|S)则增大 |
RX | 如果G|S则设置L |
例如,考虑使两个4为有效数字相乘,然后舍入到4位有效数字。
sig1=1011(十进制11)
sig2=0111(十进制7)
相乘产生
sig1×sig2=1001_101(十进制77)
L_Gss
截断的4位结果的最低有效位被标注为L,下一位是G,并且S是被标注为s的剩余位的逻辑或(即,S=0|1=1)。为进行舍入,我们根据舍入模式以及上表的计算来调整4位结果(1001)。所以。例如,在RNA舍入中,G被设置为使得我们得到1001+1=1010。对于RX舍入,G|S为真,所以我们将L设置为1(因为它已经是1了,所以在此情形下没有改变)并返回1001。
舍入整数和定点数
如果我们将FP数转换为整数或定点型,我们也要进行舍入。该概念与FP舍入基本相同。恰好为整数的FP数总是舍入到该整数。全部其他FP数位于两个连续整数之间,并且舍入决定返回哪个整数。不幸地是,用于整数的输入逻辑有点难,这是因为二进制补码和符号数值形式之间的差异。增大符号数值形式的数总是增大数值,所以增大的数离零更远。对于正的二进制补码形式的数会发生相同的事情,但是负的二进制补码形式的数在增大时变得更接近零。这意味着舍入逻辑不得不基于整数是正的还是负的而改变。这还意味着我们不得不仔细选取基值(将增大或不增大的值)。对于正整数,该值仅是截断的FP有效数字,所以1.37将具有基值1以及1或2的结果。对于负整数,我们同样截断有效数字并且取该结果的二进制反码(二进制反码是全部位被反相的原始数字),-1.37被截断到1并然后反相,给出基值-2。那么一切都解决了,因为我们希望我们的结果为-2或(当增大时)-1。
为使事情更复杂,我们的转换方法需要一些计算来找到针对负整数的L、G和S。正确的舍入将需要我们完成二进制补码处理(反相并加1)并且然后计算L、G和S,但是与仅进行反相相比加1是慢的。理想地,我们想要从原始移位的输入来计算实际的L、G和S(即,从我们关于符号做任何事情之前的输入。所以浮点数1.37或-1.37都将右移到整数1)。
设L0、G0和S0为反相前的最低有效位(1sb)、防护以及粘滞,并且设Li、Gi和Si为反相后的lsb、防护以及粘滞,最后设L、G和S为反相且加1后的lsb防护以及粘滞。
如果S0是零,则对Si有影响的位全是一,因此(通过向那些Si位加1获得的)S也是零。如果S0非零,则Si不全是一,因此S非零。所以在所有情形下S0=S。
如果G0是零,则Gi是1,且除了存在来自S位的进位的情形(仅当S0是零时才会发生这种情形)外G也是一。如果G0是一,则Gi是零,且除了存在来自S位的进位的情形(仅当S0是零时才会发生这种情形)外G也是一。所以G=G0^S0。
通过非常类似的逻辑,L=L0^(G0|S0)。
现在有了针对正整数和负整数的L、G和S,我们能够给出我们的舍入规则:
模式 | 改变到正值 | 改变到负值 |
RNE | 如果(L&G)|(G&S)则增大 | 如果(L&G)|(G&S)则增大 |
RNA | 如果G则增大 | 如果(G&S)则增大 |
RZ | 无 | 如果(G|S)则增大 |
RP | 如果(G|S)则增大 | 如果(G|S)则增大 |
RM | 无 | 无 |
RX | 如果G|S则设置L | 如果G|S则设置L |
定点数舍入的方式与整数一模一样。针对(到整数或定点型)无符号转换的规则与针对正转换的规则相同。
注入舍入
进行舍入的更快速的方式是注入舍入常数作为有效数字加法的一部分,有效数字加法几乎是每个FP运算的一部分。为看看这是如果起作用的,考虑将以美元和美分计的数字相加,然后舍入到美元。如果我们加
$1.27
+$2.35
$3.62
我们看到和更接近$4而不是$3,所以无论哪个舍入到最近模式都应返回$4。如果我们用二进制来表示该数,则我们能够使用上一节的L、G、S方法获得相同的结果。但是,假设我们仅加五十美分,然后截断结果?
$1.27
+$2.35
+$0.50(舍入注入)
$4.12
如果我们仅返回来自我们的和($4.12)的美元量($4),则我们已经使用RNA舍入模式正确地进行舍入。如果我们添加$0.99而不是$0.50,则我们将使用RP舍入来正确的进行舍入。RNE略微复杂些:我们添加$0.50,截断,然后查看剩余的美分。如果美分余数非零,则阶段的结果是正确的。如果剩余的为零美分,则我们在注入之前恰好在两个美元量之间,所以我们选取偶数美元量。对于二进制FP,这相当于将美元量的最低有效位设置为零。
使三个数相加仅比使两个数相加略微慢点,因此与我们使两个有效数字相加、检查L、G和S、然后根据舍入模式来增大我们的结果相比,我们通过使用注入舍入更快地获得了舍入结果。
实现注入舍入
对于FP,舍入注入是三个不同值之一,这些值取决于舍入模式和(有时)结果的符号。
RNA和RNE都要求我们在G位置注入1(这就像在美元和美分的示例中加$0.50)。
RP和RM舍入取决于符号以及模式。RP向上舍入正结果(朝正无穷增大有效数字的大小)但截断负结果(选取更接近正无穷的有效数字)。类似地,RM向上舍入负结果(朝负无穷增大有效数字的大小)但截断正结果(选取更接近负无穷的有效数字)。因此,我们将RM和RP拆分为两种情形:当符号匹配舍入方向时向上舍入(RU),并且当符号与舍入方向不同时截断(RZ)。对于RU情形,我们在G位位置处以及逻辑上对s有影响的每个位置处注入1(这就像在美元和美分的示例中加$0.99)。
对于RZ和RX模式,以及对于精简为RZ模式的RP和RM模式,我们注入零。
对于大多数舍入模式,添加舍入注入并然后截断给出了正确舍入的结果。两个例外是RNE和RX,它们要求在添加之后检查G和S。对于RNE,如果G和S都为零,则我们将L设置为0。对于RX,如果G或S非零,则我们将L设置为1。
FP数不是实数
很容易认为FP数就像实数一样,但是它们是根本不同的,即使是对于最基本的属性:
1.它们是不结合的。例如,在SP中,我们使3和数相加并返回1百万或零,可能不会有什么人看作是舍入误差:
(245+-245)+220=220
245+(-245+220)=0
2.它们不服从分配率。同样是在SP中:
3,000,001*(4.00001+5.00001)=0x4bcdfe83
(3,000,001*4.00001)+(3,000,001*5.00001)=0x4bcdfe82
并且在存在上溢时情况更为糟糕:
250*(278-277)=2127
(250*278)-(250*277)=无穷大
3.在一些实现方式中,它们甚至不可交换,除非是默认NaN模式(将全部NaN转换为单一NaN的模式),因为一般而言,nanA+nanB!=nanB+nanA。数值加和乘是可交换的。
4.因为IEEE NaN规则,不存在乘法单位元和加法单位元。一和零作为针对数值值的单位元。
考虑FP数的一种有用的方式是将它们看作非常长的定点数,其中至多有若干(对于DP是53个)连续位能够是非零的。例如,非无穷DP数可以使得有效数字的第一位在2046个位置中的任意位置,并且第一位后面跟着52个其他有效数字位,并且由符号位,所以有限的DP数可以被表示为2046+52+1=2099位定点数。以此方式来看,这变得非常明显,使两个FP数相加一般不会得出另一FP数:不得不对加法的结果进行舍入以使得它成为FP数。
高精度锚定数
高精度锚定(HPA)数是由长二进制补码整数i(通常为128位或更多)和小锚定整数a构成的对(i,a),其中a表示i的位的权重(通常通过指定i的最小位的指数值)。锚定整数a可被看作是提供可编程有效性参数/值。锚定整数a可以形成HPA数的元数据的一部分,该元数据可以包括额外的信息,比如,例外信息:无穷大、符号、NaN。该对在某种程度上类似于FP数的有效数字和指数值,但是不同之处在于:长整数i不是正规化的且经常比FP有效数字大得多,并且锚定值a对于到和的全部输入可以是固定的。使FP数相加使得指数改变,但是使HPA数相加不会改变锚定值。
作为简单的示例,考虑由10位i和锚定值-4构成的表示。表1中给出了此格式的一些值:
表1:示例HPA数(i,-4)
当我们使两个这样的数(比方说,0.5和1.5)相加时,锚定值不改变,通过只使i部分相加而便利地给出了和。因为,HPA求和只是二进制补码加法,所以HPA是结合的。
实现可靠的HPA累加器的一种方式采用下述:
1.限制所需要的数的范围以使得HPA累加器不必太庞大的方式。
2.迅速地使大二进制补码数相加的方式。
3.从FP转换到HPA的快速单元,以及
4.从HPA转换到FP的单元。
在下面的章节中我们将处理这些要求中的每个要求。
限制范围
FP数具有大的范围。双精度(DP)数可以小于2-1000且大于21000,但是大多数累加不跨过整个范围。实际上,难以想象将有意义地累加整个该范围内的值的这种问题。亚原子问题可以累加非常小的值,天文学计算可以累加非常大的值,但是将质子的宽度加到星系之间的距离上一般是没有意义的。即使对于高精度计算而言,大部分累加都是在有限的范围内发生的。
许多程序员使用FP时为了方便而不是FP的范围。音频编解码器可以使用FP,且音频数据无论在频率方面还是在音量方面都具有有限的范围。以FP进行编程更为简单,这对程序员而言是有吸引力的。
如果程序员确定特定求和的全部数据具有小于260的大小,并且大小低于2-50的值将不会以任何有意义的方式影响求和,则使用具有128位i的HPA格式(i,-50)使数据相加,则累加是结合的,并且可以以任意顺序是这些数相加。
使大数相加
我们提出将64位整数的向量看作是一个大整数。例如,256位整数将包括四个64位整数。
给出两个这样的向量,我们对64位SIMD加法器(如ARM有限公司的NEON SIMD引擎)做出适度的改变以计算256位和a+b。通过使低阶的64位然后是接下来64位相加,连同低阶加法的进位等来完成加法。在实践中,这可以在十分大的SIMD单元的单次循环中实现-1024位加法器可能是切实可行的。
针对适度的大小(比方说多达256位)的一种方式是构建如图1中的选择进位加法器。每个线路i计算ai+bi和ai+bi+1,线路i-1的进位被用于在两个和之间做出选择。我们认为这能够在我们目前的CPU的单次循环中容易地计算出来。
针对更宽的SIMO单元(比方说多达1024位),类似于图2中那个的提前进位加法器可以保持单次循环性能。与前面相同,每个线路i计算ai+bi和ai+bi+1,但是该线路还计算其和是否为全一(pi),即线路i中的和是否将向线路i+1传递输入进位。
对于近期更可能实现的SIMD宽度,比方说128位或256位,处理器将需要保持跟踪向量进位输出和向量进位输入。1024位加法能够在256位实现方式的4此循环中完成。将以常规方式来进行减法,每个线路i将ai-bi作为进行计算,向低阶向量上的低阶线路进位输入。
我们提出四个新的指令来完成长加法和减法:
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语言中,这些向量将被称为:
长长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是长二进制补码整数且a是给出该整数的最低有效位的权重(从而给出该整数的所有位的权重)的锚定值。我们的长整数将在SIMD单元上进行处理,所以让我们更详细一点描述i和a。假设我么有256位SIMD单元。那么,i的低阶256位被拆分为四个64位的部分Vi[3:0]。将锚定值也分为四部分将是方便的,Va[3:0],其中Va[0]=a且对于i>0,Va[i]=Va[i-1]+64。这里我们尚未真正改变任何东西,我们只不过是采用了更方便的SIMD表示,其中HPA数(i,a)的低阶256位被表示为(Vi,Va)。
图3示出了将FP数F加到HPA数(Vi,Va)的有效方式。SIMD单元的每个线路具有特定于该线路的(Vi,Va)值,即,线路j具有Vi[j]和Va[j]。每个线路还接收F的副本。每个线路将F的指数与其锚定值Va[j]进行比较,并且向该线路填充F的有效数字的适当位。至多有两个线路将包含有效数字位。每个线路独立地计算它的64位转换值,使得所产生的256位整数包括四个64位线路值。该256位值然后被加到Vi,可能会有进位输入值cin,并且结果是表示(Vi,Va)+F的新的256位值,连同进位输出值cout。注意到,将这两个256位值作为整数相加是有意义的,因为这两个值具有完全相同的锚定值。
假设我们具有128位SIMD单元,并且我们想用-50的锚定值来转换这些值。这意味着128位i的最低阶的位对应于2-50,下一位对应于2-49,以此类推(参见图4)。Vi[0]的高阶位对应于213而Vi[1]的低阶位对应于214。所以,值为214+213=24,576的HPA数将具有这两个位集。i的位127(Vi[1]的高阶位)是符号位。替代的实施例可以使用无符号HPA格式,其中由HPA数的Vi部分表示的值时无符号的。在此情形下,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个一。最高的线路看到指数太低(该线路的最小权重是14),所以它用零充满它的位。最低的线路将位[63:50]设置为零,并将位[49:0]设置为一。有效数字中剩余3个一(对应于值2-51+2-52+2-53),但是在转换中这些值将被忽略因为他们的权重小于锚定值-50。可选地实现方式可以对经转换的值进行舍入,但是现在我们假设进行截断。
示例2 F=220-ulp=412f_ffff_ffff_ffff。真指数是19,所以位[127:70]是一,位[16:0]是零。该数完全符合,所以舍入是不相关的。需指出的是,每个线路仍独立地对其自己的64位发挥作用。
示例3 F=-220=c130_0000_0000_0000。真指数是20,但是现在我们不得不考虑符号。一种方法是像对整数那样地来进行转换,但是返回在每个线路中计算的值的二进制反码,然后向128位值加一。在此情形下,位70在二进制反码前是一设置位,所以它在二进制反码后是一个零位。将1加到128位值,得到位[127:70]被设置为一,并且位[69:0]被设置为零。
示例4F=280=44f0_0000_0000_0000。真指数是80,但是我们的最大权重是76,所以我们设置上溢标识。我提议在此情形下我们返回零,或者可能在高阶线路中返回最大值并且在其他地方返回零(因为低阶线路不知道上溢,所以我们不能按照整数转换的示例并返回最大整数)。这是重大错误,所以在任何情形下结果都会是无意义的。
示例5F=无穷大或NaN。返回零,设置OFC(无穷大)或IOC(NaN)。
每个线路以相同的方式进行转换。一种方式是仅将有效数字放在线路的64位的右侧,然后使有效数字左移值左移(lshift)=e-偏椅-Va[i]+1。注意到,e′-偏倚是真指数e,并且如果lshift值是负的或零,则不进行移位。
概念上,到移位器的输入是64+53=117位值,包括64个零,后面是有效数字(在实践中,输入中不需要这64个零)。移位器的输出是该线路的64位值。有意义的移位距离(即,能够将有效数字位放入线路内的移位距离)的范围在1和64+52=116之间。该范围外的左移值不需要进行任何移位,因为它们将总是返回零。
对于示例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。因为输入是负的,所以每个线路返回它的移位值的二进制反码(对超出范围的移位为全一)。向128位加法器的进位输入被设置以针对转换或加法(HPA+FP)完成二进制补码运算。对于减法(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实现方式,则可以在两个完全管线式的周期中实现这些操作。
对于比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位向量。下面的示例示出了如何能够使用这些指令。
示例6HPA数符合128位值。则将DP数D0加到HPA数(V0,V10)是简单的。
ADDO_HPA_DP V0,V10,D0
因为没有高阶项,所以不需要进位,但是上溢检测是重要的。
示例7HPA数是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)内,还是跨两个向量分布。低阶部分在不需要进行上溢检测的情况下被求和,因为上溢超出较低位并不是问题。高阶部分不得不处理来自低阶部分的进位,它还要检测上溢,因为上溢超出较高位总是有问题。
示例8HPA数是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
注意到,出于与示例中给出的相同原因,全部三个指令接收相同的DP数D0。低阶部分和中间部分在不需要进行上溢检测的情况下被求和,因为上溢超出这些部分并不是问题。中间部分需要处理来自低阶部分的进位。高阶部分不得不处理来自中间部分的进位,它还要检测上溢,因为上溢超出较高位总是有问题。
示例9HPA数符合128位值。则HPA数(V0,V10)减去DP数D0是简单的。
SUBO_HPA_DP V0,V10,D0
因为没有高阶项,所以不需要进位,但是上溢检测是重要的。以常规的方式来进行减法,将D0已经被转化为的128位的项反相,然后加1。
示例10HPA数是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
注意到,出于与示例中给出的相同原因,全部三个指令接收相同的DP数D0。在该示例中,在所有情形下,将减去的数被反相(二进制反码),但是在该示例中,用于完成二进制补码运算的借位仅是针对低阶指令SUB_HPA_DP生成的。在该示例中,用于完成二进制补码运算的借位仅针对减法运算的无进位版本SUB_HPA_DP和SUBO_HPA_DP进行设置。在这点上,指令与示例3中的加法完全一样地进行。
将HPA转换为FP
如上,我们将考虑同样具有向量表示(Vi,Va)的HPA数(i,a),其中Vi是64位整数的向量且Va是权重的向量,Va[0]=a且对于i>0Va[i]=Va[i-1]+64。为了转换到FP,我们需要记录Vi的符号,在Vi中找到第一无符号位,从它以及格式指定数目的后面的位(对DP为52,对SP为23)构造出有效数字,对有效数字进行舍入,以及从第一位和相应的权重构造适当的指数。
为简单起见,假设我们正在将(i,a)转换为DP(53位有效数字)。更具体地,转换步骤为:
1.符号位是i的高阶位。如果将HPA数设置为负的,且是否定的,则它是正数。一种这样做的方式是从零减去HPA数的整数部分。初始符号被记住,因为需要用它来构造FP数,但是该转换的其余部分假设它正在转换的值是非负的。
2.从高阶线路开始,每个线路进行计数前导零运算(CLZ)以确定线路中的第一个一之前的零的数目。如果存在一,在该数目(前导零计数(LZC))的范围为0到63。如果找到一,则线路返回以该位位置开始的有效数字的k=min(64-LZC,53)位,并且如果64-LZC>53,则返回有到效数字的右侧的下一位(G),并且如果64-LZC>54,则返回到G的右侧的全部位的逻辑或(S)。来自线路j的该信息全部随关于从线路j-1的高阶位取多少位有效数字的计数53-k一起被传递到下一线路j-1。图5示出了如何针对各种LZC从两个相邻线路构造有效数字。如果在线路j中找到第一个,那么我们可以使用该线路的锚定值来计算(未经偏移的)指数e=Va[j]+63-LZC。
3.符号、指数、有效数字、G和S被向右传递直到它们到达低阶线路为止。每个中间线路(包括低阶电路)利用其全部位的逻辑或来更新S。低阶线路构造DP数并根据任意已经指定的舍入模式来对其进行舍入。
HPA到FP的转换比FP到HPA的转换略慢些。如果按所描述的方式实现,则128位HPA数将需要3个循环来构造FP输出:1个循环使得HPA数成为正的,一个循环处理高阶线路,还有一个循环处理低阶线路并产生舍入的结果。由于针对每次累加存在一个这样的转换,这不太可能成为问题。针对较大的实现方式,比方说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次循环:三个循环用于乘法,一个用于到HPA的转换,还有一个用于HPA加法。转换与上述基本相同,但是具有能够跨三个64位线路的更宽的有效数字。不向每个线路广播单DP数,而是向每个线路广播双长度DP乘积。
乘法和转换到HPA指令仅是Vi=0的MADD指令。当然会存在SP变体,以及可能的乘法-减法变体。
这些指令仍是完全管线化的,并且能够在每次循环中被发布,所以如果HPA数符合硬件长度的寄存器,则n个乘积的加和将需要n+4次循环。
高精度输入,以及使HPA数乘以标量值
对于需要高内在精度的应用,比如,多项式近似、或泰勒级数、或针对初等函数的范围缩减,在HPA数中包括比FP输入中所能表示的更高的精度可能是有用的。例如,我们可能想要使得常数1/π被表示为128位或更高的精度。通过计算想要的值并将其与正确的锚定值一起存储为长整型(在64位向量部分中),这是容易实现的。所产生的HPA数能够像任意其他HPA数一样地被使用。
我们可能希望使HPA数(i,a)乘以FP数f。如果f具有有效数字s和真指数e,则结果是HPA数(i*s,a+e)。如果(i,a)由向量(Vi,Va)来表示,则一种这样做的方式是经由向量通过具有高部分和低部分的标量乘法。
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相加的单独指令,或者通过将e加到Va中的每个条目的向量标量加法来调整锚定值。
与初始的(i,a)相比,乘积(i*s,a+e)的整数部分有更多位,所以具有转换回初始精度以调整结果锚定值的指令可能是有用的。
应用
该部分使用样本应用来在一些示例实施例中展示HPA的性能和能量益处中的一些益处。
应用1使用HPA加n个FP项,其中HPA数符合硬件大小(例如,128位SIMD上的128位HPA)。转换和加指令具有2个循环的延时,并且被完全管线化,其吞吐量为每循环1HPA加法。图6示出了4个FP数到HPA数(Vi,Va)的加法。指令从顶部向底部进行,循环从左向右读,所以在循环1中,第一加指令正执行FP到HPA转换(表中的C),并且在循环2中,来自第一加指令的经转换的值被加上(表中的A),同时第二加指令正执行期FP到HPA转换(C)。
一般而言,我们在n+1次循环中加n个值,算法是结合且(到程序员所指定的精度)正确的。相反,根据C规则进行的标准FP加法将需要a×n次循环,其中a是FP加法的延时,所以在ARM最快的FPU上为3n次循环。这甚至还低估了HPA的优点。ARM的“大”核具有两个128位SIMD整数管线,因为HPA加法是结合的,所以我们能够轻易地使用两个累加器,在约n/2次循环中累加n个FP数,然后使两个累加器值相加类得到最终的和。这表示在ARM核上的HPA累加比在同一核上的FP累加快6倍。
应用2使用HPA加n个FP项,其中HPA数比SIMD硬件大小宽(例如,128位SIMD上的256位HPA)。转换和加指令仍具有相同的延时,但是针对每个HPA值需要两次转换和加。图7示出了2个FP数到HPA数(Vi,Va)的加法。Vi和Va被拆分成高部分和低部分,并且每个FP数首先被加到低部分,然后与低部分的进位输出一起被加到高部分。
以此方式加n项需要2n+1次循环,仍比FP累加快。如应用1中所示,我们也能够通过使用第二个SIMD单元来使这种延时减半。
应用3FP AMR编解码器。该编解码器将其大部分处理时间花在简单的子例程Dotproduct40上,该子例程使用DP使40个SP乘积相加,然后转换回SP。该子例程明显地使用DP进行累加,因为在SP中舍入误差是或然性的。在ARM最快的FPU上,该例程将占用最少126次循环:40个SP乘法,40个SP到DP转换,39个DP加法,加上一个转换回SP。因为C的排序规则,DP加法单独就需要39×3=117次循环。如果我们使用HPA来做相同的事情,能够在一个SIMD单元上的47次循环中实现Dotproduct40:40个HPA乘法-加法,以及一个HPA到SP转换。如应用1中所示,我们也能够通过使用第二个SIMD单元来使这种延时减半。除了更快之外,HPA解决方案使用显著减少的控制逻辑(约指令的1/3,节省了大量的提取、解码、发布和退出资源),所以它将有可能需要更少的功率。它必然将需要更少的能量。
应用4密度矩阵乘法,最简单的算法。这是一系列点积,每行乘以每列。HPA乘法-加法能够在任意数目的处理器上以可再现(且正确!)的方式来这样做。在单一处理器上加速同样可以是三或六的因数,由于使用并行化的能力,大得多的加速是可能的。
例外
因为HPA的缩小的范围,更可能存在超出范围的数。我们需要提供工具和仪器来允许程序员建立正确的边界,但是我们尤其需要在边界被侵犯时提供信息。我们提出使用下溢、不准确以及上溢例外(无论是FP所使用的相同的例外或者新的HPA特定的例外)来指示边界问题。
设想我么有256位HPA数(i,a)。存在两个边界,在低端的a和在高端的a+254。具有权重小于2a的位的任意FP数将会丢失一些关于转换的信息。这通常不是问题,因为通过选取权重a,程序员已经指示小于2a的值是不重要的。虽然如此,我们仍需要标志这些位已经丢失的事实。一种这样做的方式是当到HPA的转换丢弃了在低端的一些位时设置不准确标志,并且当整个FP输入被丢弃时设置下溢标志。在此示例中,这些计算仅应用于针对无进位指令的低阶线路,所以实现方式应当能够区分该线路。
对大小大于2a+254的数的转换设置了上溢例外,并且这总是要求程序使用不同的锚定值重新计算的严重问题。对于整数加法器中的上溢发生了相同的例外,解决方案同样是使用不同锚定值重新计算。HPA程序应当核查上溢标志以查看程序的结果是否是有意义的。
大多数累加使用FP数的范围的一小部分,所以它们能够使用HPA数更快速且正确地进行计算。HPA累加是可再现且可并行化的,并且在确定数据界限后对程序员而言没有明显比FP难。当然,在FP缺乏结核性引起问题的情形下,对程序员而言HPA要简单得多。很少有人被训练以分析FP给出不好的结果的情况。一种频繁的响应是使用更宽的FP格式来重新编码,但是对于任意比DP大的数这样做的性能并不好。使用HPA给出了更好的性能并且摆脱了舍入问题的最大害处。
HPA还易于实现,只需要对ARM的SIMD单元进行适当的改变。虽然这些改变向SIMD单元本身添加了少量的面积和功率,但是在核心级,功率(特别是能量)将会低得多。执行单元不是无序的机器中耗费能量最多的地方,并且使得累加更快允许我们关闭耗费能量的控制逻辑。
图8概要地示出了用于在程序指令的控制下执行数据处理操作的数据处理装置2。数据处理装置2包括存储器4,存储器4存储程序指令6和将要操纵的数据8。处理器核10被耦合到存储器4并且包括寄存器组12、处理电路14、指令提取单元16、指令管线单元18和指令解码器20。将认识到,在实践中,数据处理系统2可以包括许多另外的元件,图8中表示被简化了以辅助理解。在操作中,程序指令6被指令提取单元16从存储器4提取,并提供给指令管线18。当程序指令达到指令管线18内的适当级时它们被指令解码器20解码,并生成控制信号,这些控制信号用于控制寄存器组12和处理电路14的操作以执行解码的程序指令所指定的(一个或多个)处理操作。多个输入操作数可被从寄存器组读取,并提供给处理电路14,这些输入操作数在处理电路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……)。还可能是位有效性的范围的宽度能够以一位宽为步长连续地变化。
如先前所提到的,(一个或多个)锚定值(在元数据内)可以以各种不同的方式来指定可编程位有效性。一个示例是指定每个向量组分的下边界位有效性。因此,每个向量组分可以包括在位有效性的总范围内的该值的有效性位的它的部分的整数值,以及表示(锚定)该组分内的最低位的有效性的元数据。另一选项是(一个或多个)锚定值指定整个HPA数的位有效性的下边界以及位有效性的范围的总宽度。另一选项是(一个或多个)锚定值可以包括指定位有效性的范围的下边界和上边界的数据。其他变体也是可能的,比如,(一个或多个)锚定值包括位有效性的范围的下边界以及组分的数目,其中哪些组分以指示固定宽度的组分。
图10概要地示出了以双精度浮点型可表示的值的大小和HPA数的有效性范围之间的关系。在双精度浮点数的情形下,可以指定的位值的大小从近似2-1022扩展到2+1023(未计入次正规数)。表示20的二进制值大约位于该范围的中间。
如所示的,HPA数具有可编程位有效性范围,其可被看作是使用浮点值可表示的位有效性的范围内的位有效性的窗口。该可编程位有效性可以由下边界和上边界来指定,并且取决于下边界和上边界的值,可被认为是沿着浮点值所提供的位有效性的范围滑动。窗口的宽度以及其起始点和结束点可以由指定位有效性的的可编程元数据(包括(一个或多个)锚定值)的适当的值来指定。因此,HPA数可以具有程序员所选择的形式以匹配将要执行的计算。
图11概要地示出了可以形成图1的处理电路14的一部分的电路22。电路22包括配准电路24、26,它们用于根据针对结果寄存器28指定并被存储在与结果寄存器28相关联的元数据存储装置30(其存储(一个或多个)锚定值)内的可编程有效性值对输入操作数执行配准操作。输入操作数(可以是浮点数、定点数、整数值、HPA数、或它们的混合)被配准以使得它们的整数位的值在将被存储在结果寄存器2内的结果值被确定之前被与针对结果寄存器28所指定的位有效性配准。配准电路24、26生成配准的输入操作数,这些输入操作数被提供给算术电路32。算术电路32可以是例如整数加法器或整数乘法器,它们将配准的输入操作数看作整数值并且相应地对这些配准的输入操作数执行相对快速且低能量的算术运算。由算术电路32生成的结果值已经被配准到结果寄存器28的可编程有效性,并且在结果寄存器28内被存储为HPA数。
在被提供给配准电路24、26的输入操作数中有一个或多个数浮点值的情形下,则配准电路24、26还在确定浮点值的有效数字应当如何被配准以匹配针对结果寄存器28所指定的位有效性时对浮点值的指数值作出响应。
将认识到,元数据存储装置30内所存储的可编程位有效性参数((一个或多个)锚定值)是与算术电路32所生成的配准的结果值无关的;不执行HPA数的正规化。因此,关于坠HPA数所执行的处理,上溢、下溢以及其他例外情况是可能的,如稍后将在下面讨论的。
在图11的示例中,可编程位有效性参数((一个或多个)锚定值)在处理被执行之前被存储在元数据存储装置30内。在其他实施例中,还可能是,如果输入操作数是HPA数,则针对结果寄存器28的可编程有效性参数可以取自与这些输入操作数中的一个或多个相关联的可编程有效性参数,例如,任意HPA输入操作数的可编程有效性参数中最大的可编程有效性参数可被选取并用作针对结果寄存器28的可编程有效性参数。
图12概要地示出了在一些示例实施例中可以形成图1的处理电路14的一部分的电路。电路34对向量形式的HPA数执行处理,该向量包括存储于相应的向量存储元件36、38、40、42内的多个组分。元数据存储元件44(例如,元数据寄存器)用于存储至少包括形成特定向量HPA数的组分的数目的元数据。向量的最低有效性组分被存储在向量存储元件42内,较高阶的有效性组分根据需要被存储在向量存储元件40、38、36内。
电路34还包括与向量HPA数的各个组分相关联的处理电路46、48、50、52,它们可被安排为执行诸如由正被执行的程序指令指定的加法、减法和乘法之类的运算。在实践中,由处理电路46、48、50和52执行的处理取决于有多少组分包括向量HPA数值和正被执行的程序指令。具体地,当向量HPA数包括多个组分时,那么进位输出值被从最低有效位端开始在处理电路46、48、50、52的不同部分之间传递。
在图12中所示的示例中,示出了四个单独的处理电路。如果向量HPA数包括四个组分,则这四个线路全部可被并行地使用。还可能是,如果HPA数包括两个组分,则两个这样的双组分HPA数可在图12的电路内被并行处理,其中不在处理电路50和48的组分之间执行进位。
图13示出了图12的电路的变体。在图13的电路54中,向量HPA数值同样服从于程序指令所指定的处理。在此情形下,取决于程序指令和指示向量HPA数内的组分的数目的元数据,处理电路58是由微操作生成电路60所生成的微操作指令控制的。具体地,如果四对组分需要相加以在两个四组分HPA数之间执行加法,则由处理电路58串行地执行这四个加法。这些加法中的第一个不具有进位输入,并且可以由微操作指令ADD来表示。接下来的三个加法接收来自先前的加法的进位输入,并且可由微操作指令ADDC来指定。最终结果向量HPA数被写入到结果寄存器62内。
图14概要地示出了可以形成图1的处理电路14的一部分的电路64。电路64类似于图11的电路,但是在此情形下,还包括例外生成电路66。例外生成电路66对来自配准电路68、70和处理电路72的输入作出响应以标识各种例外情况的发生。这些例外情况可以包括如下一个或多个情况:输入操作数之一是次正规浮点数;在格式之间对数的转换已经是不准确的;所生成的结果值使得结果寄存器74的可编程有效性范围下溢,输入操作数具有无限大的值;不是数字;或者正被转换为无符号的目标值的是有符号值。将认识到,可能有各种其他形式的例外指示。这些例外当发生时可被记录在全局例外存储装置76内。替代地,例外可以与各个HPA数相关联,并形成与那些HPA值相关联的元数据的一部分。其他布局也是可能的。
本公开的至少一些实施例包括用于处理针对表示浮点(FP)值的HPA数的转换和算术例外的方法。一些实施例的目标可以是产生与当使FP数相加时(例如,+无穷大被加到-无穷大返回NaN和无效的运算例外IOC)将产生的相同例外(除不准确外),以及给程序员检测锚定向量所指定的有效性是否太小所需要的信息。
使用HPA数据类型来表示全宽度或部分宽度的浮点值给IEEE 754例外处理带来了问题。表2包括针对FP例外的条目(除DZC外)(除以零,在除法期间发生的例外,不转换),以及针对无穷大、NaN和符号的元数据条目。这些例外可以被立即记录在全局例外字段中,或者在HPA数据类型已经被转换为标准FP数据类型(SP或DP)后被记录在全局例外字段中,或者从来不被记录在该全局字段中。它们可以或者可以不被合并在针对数据类型的元数据中。一些是非标准的例外,而其他的是IEEE754所规定的。
表2的FP->int和int->FP列示出了在FP和64位或32位整数之间的IEEE-754转换期间会发生什么。包括这些以提供关于IEEE-754行为的指导。最后三列示出了对于涉及HPA值的转换和加法哪些例外是可能的,以及这些运算能够如何处理无穷大和NaN。
如果HPA数向量足够大以精确地表示FP类型,则大部分例外将不会发生。针对每个有限的FP数存在唯一的HPA数,所以对于到HPA数的转换,上溢和下溢应当不会发生,甚至不准确应当也不会发生。加法和减法不会引起下溢,并且它们是精确的,所以不应当出现任何例外。最后,如果使用全HPA精确度,则转换回FP应当不会下溢。
对于加法和转换回FP都会发生上溢。简单地将最大正FP数的HPA等价物加到它自身将或给出可能使加法上溢的结果(取决于我们对HPA数给定的位数),并且它将使转换回FP上溢。
如果使用更小的向量(程序员处于性能的原因而将想要做的一些事情),则更多的例外变得可能。此外,这些例外变得对程序员而言是有意义的,因为这种算法的一个可能的目的是再现性和准确性。一般而言,看到,上溢、下溢或不准确指示存储HPA数需要较大的向量。
表2是处理/生成例外指示的一个实施例的示例;例外位的其他定义和其他情形可以是可能的。列“FP->int”是标准浮点数据类型(例如,SP和DP)到标准整数格式(全精度或任意精度)的转换;“int->FP”是逆转换;“FP->AHP”是标准浮点格式或FP的计算乘积到HPA数据类型的转换;“HPA->FP”是针对HPA数据类型到标准FP格式的逆转换;以及“APadd/sub”关注HPA数据的加法或减法。
表2指示哪些例外是可能的(由y指示),哪些例外不会发生(由针对不的n或针对不适用的NA来指示),以及脚注更详细地解释例外行为。
表2
(a)比整数小的数字被转换为零,而不设置例外标志。
(b)比能够支持的整数大的数字被转换为最大正整数或最大负整数,并且返回ioc而非ofc。
(c)比能够支持的整数大的数字、被转换为无符号格式的负数、输入无穷大或输入NaN都是无效的。返回的整数是零或最大正数或最大负数。
(d)这些被转换为最大正整数或最大负整数,返回IOC。
(e)这些被转换为零,返回IOC。
(f)假设有足够大的目的地向量,该例外不会发生,但是程序员可以指定较小的目的地(比方说,程序员知道全部输入在2^-100到2^+100的范围内)。该标志指示程序员弄错了。
(g)与(f)类似,该标志能够指示程序员弄错了,即输入值小于给定锚定点范围内所能表示的值。取决于程序员打算做的事情,这可能是严重的也可能是不严重的(例如,程序员本打算不考虑很小的数)。在一些实现方式中,IXC和UFC的组合给出了额外的信息:UFC仅表示没有任何位被转换,而IXC和UFC表示部分转换。不试图对部分转换进行舍入。
(h)该标志指示严重问题,即输入值大于给定HPA向量中所能表示的值。正如在(g)中,我们将使用IXC标志来指示部分转换成功,但是在所有情形下,该标志说明我们需要使用更大的HPA向量来再次尝试。
(i)该标志指示严重问题。我们提出为输入无穷大或NaN设置该标志,以及(如果我们安排无符号HPA格式)为负的非零数到无符号HPA格式的转换设置该标志。输入无穷大或NaN也应当调整元数据标志。
(j)参考下面关于元数据的讨论。为了关于符号无穷大或NaN给出与FP计算相同的结果,我们需要给定数字是无穷大或NaN以及无穷大的符号的某种指示。这些连同在HPA数的产生过程中生成的一些例外的记录最好被与HPA数存储在一起,理想地,作为第二元数据向量的一部分。
本公开的至少一些实施例包括使用像SIMD一样的硬件来加或减HPA数或整数,即,比64位宽的数字。在一些实现方式中,可能使用可扩展寄存器来加成千上万位长的数字,不管所实现的向量长度有多长只使用单次循环加法(至少针对可能的实现方式)。
像SIMD一样的系统可以包括可扩展向量寄存器,并且那些寄存器可以包括多个64位的值。为了新的加或减指令,提议可扩展向量寄存器被看作是一个长64*n-位的二进制补码整数,而不是n个64位数字的寄存器。根据SIMD方案,加法或减法被硬件拆分为实现方式定义的块(例如,256位或512位),并且被从低阶块加到高阶块。每块可以在单次循环中执行(至少高达1024位的块)。
如果块生成进位输出,则该进位输出可以被输入到下一块。这可以使用谓词条件标志来指示/控制。这是对谓词条件的非标准使用。
对块的每个加法或减法将读和写进位谓词条件标志(下文称作PCARRY),如果设置了PCARRY则设置对加法或减法的进位输入,然后基于来自该块的进位输出的存在性来设置或清除PCARRY。
可以以常用的二进制补码方式来进行减法,即A-B=A+~B+1。+1将被作为向低阶块的进位输入进行处理(这未被使用,因为低阶中没有东西来生成进位)。
对块的单次循环加法将可能使用现有的64位加法器来进行,现有的64位加法器具有用于将加法扩展到任意块大小的选择进位逻辑。图1中示出可由若干64位加法器构成的256位加法器。
替代的“提前进位”途径(如图2中所示)能够被用来加速沿加法器的进位输入,如图2中所示,其中,gn是64位进位生成信号,pn是64位进位传递信号,以及Gn:0是将全部64位加法器生成并从有效性64×(n+1)向下传递的信号进行组合的进位信号。
提前进位途径可以支持大小高达1024位的和单次循环执行。
如果加/减指令使用谓词寄存器,谓词位可被用来控制在任意给定64位边界处是否传递进位。这将允许向量包括多个128位或更大的整数值。所以1024位向量寄存器能够被看作是十六个64位值或四个256位值或单个1024位值,并且单一加法指令将在所有情形下正确地起作用。
一种可能的实现方式将是具有表示“使能PCARRY”的谓词位,该谓词位当针对任意64位元件设置时将允许进位输入到特定加法器。在该更一般的方案中减法(A-B)是通过使B反相(在全部64位位置处)并且在未针对其设置“使能PCARRY”位的那些位置处加1。
该方案将允许现有的加指令就像它目前所做的那样起作用(如果没有设置“使能PCARRY”位),但还将允许输入向量被解释为包含高精度数的任意混合。考虑512位向量的加法以及包含“使能PCARRY”位为的谓词,如表3中:
PC7 | PC6 | PC5 | PC4 | PC3 | PC2 | PC1 | PC0 | |
(a)8×64位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
(b)4×128位 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
(c)2×256位 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
(d)1×512位 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
(e)1×256和2×128位 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 |
表3
在情形(a)下,没有任何新的谓词位(表示为PCi)被设置,所以加法被解释为8个64位值中的每个值的单独的加法。
在情形(b)下,谓词位允许从偶64位寄存器向奇64位寄存器进位,这意味着加法现在正作用于128位值。
在(c)和(d)下,这些进位针对逐步增大的数字被允许。
情形(e)示出了针对给定向量甚至是混合的解释也是可能的。
图15示出了包括处理电路102的装置的示例,处理电路102接收一个或多个操作数并响应于这些操作数而生成结果。该处理电路接收可编程控制数据104,可编程控制数据104指定结果值的目标有效性和目标大小(长度)中的至少一个。响应于可编程控制数据C4,处理电路102生成具有目标有效性和/或目标大小的结果值,而不考虑提供给处理电路102的操作数的值。如果对输入操作数执行处理操作(例如,乘法或加法)将给出具有指定目标有效性和目标大小的结果值无法表示的值,则处理电路可以输出例外信号106以指示该结果值不准确。例如,例外指示可以指示下述项之一:
·处理运算的结果大于使用具有指定有效性和大小的结果值所能表示
的值时的上溢情况;
·当结果小于具有指定有效性和大小的结果值所能表示的值时的下溢
情况;或者
·当结果比使用具有目标有效性和大小的值能表示的值更为精确时的
不准确情况。
即使真正的处理结果落在指定有效性外处理电路也应当被允许生成具有该有效性的结果可能看起来是不合常理的。然而,如图16的示例中所示,这对于限制所需要的处理的量能够是有用的,从而如果大体预期结果在较小的位数目内则不必处理非常大的数字。例如,控制数据104可以指定低有效性边界110和高有效性边界112中的一者或两者。处理电路102可以限制其处理,以使得它确定落在指定的有效性边界110、112内的结果值的位值,而不确定落在边界外部的位值。因此,虽然结果值具有能够表示数空间114的宽泛范围内的数字,但是控制数据104定义了该数空间内的变量长度和位置的窗口,并且处理电路102仅计算在指定窗口内的位,以加速处理并降低能耗。例如,程序员可能知道预期落在某一有效性范围内的有效操作数值和结果,所以通过适当地设置控制数据,使得处理资源不被浪费在计算有效性低于或高于预期范围的位值。虽然如此,可以通过改变可编程控制数据来调整在其中执行处理的窗口,从而可以以较小的硬件开销支持宽泛的值的范围。
在一些情形下,结果值的大小可以是固定的,并且控制数据104可以仅指定低有效性边界110和高有效性边界112之一,从指定的边界和已知的结果大小来确定另一边界。替代地,大小可以是可变的,并且可以在控制数据104中明确指定,或者可以被表示为某一位数(例如,32或64位)的倍数。在另一示例中,控制数据104可以指定低有效性边界110和高有效性边界112,这有效地将大小标识为边界之间的差值。因此,存在多种方式使得能够根据控制数据确定结果值的目标大小和目标有效性。
图17示出了高精度锚定(HPA)数据格式的数据值的示例。HPA数包括数据向量Vi和元数据向量或“锚定”向量Va,Vi包括多个数据元素d[0]-d[3],这些数据元素各自包括表示二进制值(它是未正规化的)的相应部分的二进制补码数,Va包括锚定值元素a[0]-a[3],这些锚定值元素各自指定数据向量Vi中的相应数据元素的有效性(“权重”)。例如,每个锚定值元素a[i]可以指定相应的数据元素向量Vi中的最低有效位的有效性。虽然图17示出了向量Vi、Va包括4个数据元素(这些数据元素可以具有诸如64或128位之类的某一元件大小)的示例,但是将认识到,这些向量可以具有变化数目的数据元素。向量中的元素的数目可以在锚定值Va内被指示,例如,通过在未被使用的任意向量线路的锚定值元素a[i]中提供预定位组合格式或状态标志,以使得将要处理的元素的数目由不具有该位组合格式的锚定值元素来指示。例如,具有权重(X,118,54,-10)的锚定值向量Va(其中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中所示的存储单元。该存储单元包括多个数据存储元件(寄存器)132,它们各自具有相应的元数据存储元件(寄存器)134。在一些示例中,元数据寄存器134可以与数据存储寄存器132在不同的寄存器文件中。替代地,数据寄存器和元数据寄存器可以是单一寄存器文件的一部分,或者可以包括同一寄存器的不同部分。每个数据存储寄存器132可以存储针对给定HPA数的数据向量Vi。相应的元数据存储寄存器134存储针对该HPA值的锚定向量Va以及任意另外的元数据120(如果有提供的话)。
在一些示例中,元数据存储寄存器134中的元数据可以被看作是与相应的数据存储寄存器132本身而不是相应的数据存储寄存器中的特定数据值相关联。也就是说,可以在任意值实际被计算以存储在数据存储寄存器中之前为给定寄存器定义锚定值Va。当执行将数据存储寄存器132之一指定为目的地寄存器的处理运算时,处理电路102可以从相应的元数据寄存器134读取锚定值并生成具有由(一个或多个)锚定值指定的目标有效性和/或目标长度的结果值,而与到该处理运算的任意输入的值或有效性无关。可基于程序员所提供的控制数据对锚定值进行编程。在一些情形下,程序员可以直接指定锚定值,而在其他示例中,库或其他软件程序可以将程序员输入的控制数据转换为(一个或多个)可被处理电路102读取的合适格式的锚定值(该途径允许程序员在不必理解硬件所使用的内部元数据格式的情况下设置锚定值)。
如果HPA数需要比单一数据寄存器132中所存储的更多的元素,则HPA数可以跨多个寄存器,其中相应的元数据指定与该HPA数相对应的寄存器的数目并且定义每个数据元素所表示的给定二进制值的各部分的有效性。
图19示出了用于处理HPA格式的数字的处理电路102的示例。处理电路102可以具有多个处理单元140,这些处理单元140用于基于给定HPA数的相应的元数据向量Va中的锚定值对数据向量Vi的各个数据元素执行并行的处理线路(例如,转换或算术运算)。在一些情形下,处理电路102可以对两个HPA数进行晕眩,并且每个线路了可以接收两个HPA数的相应的元素d0[i]、d1[i]。在此情形下,HPA数共享相同的锚定值,并且结果的相应的数据元素r[i]被生成以产生HPA格式的结果值,该结果值也具有与输入相同的锚定值。在执行处理之前将具有不同锚定值的HPA数映射到具有相同锚定值的HPA数是可能的。
替代地,响应于将一个HPA数和浮点数指定为源操作数的指令,浮点数(或者从对多个浮点操作数执行的算术运算获得的浮点数)可在被与其他HPA数结合之前被映射到HPA格式。每个线路接收锚定向量Va的相应的锚定值a[i],并且这可以控制浮点操作数FP如何被映射到HPA数的相应的元素。
针对给定计算处理的元素的数目可以根据元数据而变化。虽然处理单元140是针对某些数目的线路提供的,但是如果针对特定计算并不需要全部线路,则未使用的线路可以是功率选通的或者被提供零输入,以防止线路内的内部位状态的反复(toggling)来节省功率。另一方面,如果元数据或锚定值指定比硬件内所提供的处理单元140的数目多个数目的元件,则HPA数可以通过多个经过硬件而被处理。
总之,这里描述的高精度定点算术系统并入了“高精度锚定”(HPA)数据类型。HPA数据类型可以是一对向量,一个包含作为固定长度额整数的有序集合的数据(例如,八个64位整数的有序集合),且另一个包含指定每个固定长度的整数如何由硬件进行解释的元数据(锚定值)(例如,给出整数的每位的指数权重的范围信息)。因为每个线路接收数据和和特定于该数据的元数据,所以这些线路能够进行不同运算,这些运算整体产生对该向量有意义的结果。例如,HPA值可以表示非常长的整数,例如,200到4000位长,其以定点形式来表示浮点数或乘积。与该长整数的每个64位部分相关联的锚定元素告诉64位线路如何解释该64位整数。因此,提供了包含数据和与该数据相关联的元数据以及创建多个数据项(每个数据项具有特定于该数据项的元数据)的能力的数据类型。
HPA数据可以是完整大小数据类型或者该完整大小数据类型的范围或精度的一部分。完整大小数据类型可以是例如2099位(以支持全部双精度数),或4198位(以支持全部双精度乘积),或者是允许我们使这些值中的许多值相加而不会上溢的某一更大的大小。明显地,这是大量的位,并且对这些数据类型的运算将需要多次循环,并且存储将是重要的。然而,在许多情形下,被执行的功能或应用将不需要完整的数据类型而只需要该数据类型的一部分,并且程序员通过数值分析和仿真将获知这一点。例如,特定程序可能永远不会具有次正规输入,或者可能具有一些其他范围限制。在这些情形下,我们可以使用较小的HPA数。
该数据类型可以仅由若干特性来定义。这些包括数据类型的大小,在一些情形下以位或向量线路大小的倍数来计,或者它也能够就固定数据大小(比如,32位或64位)来定义。此外,该数据类型可以由能够表示的最低指数来定义。例如,如果算法处理在[+/-1025,1045]范围内的单精度数据,并且全部中间计算在相同的范围内(中间计算的范围能够大于或小于输入数据范围,但是在大多数情形下最终范围应当合并两个范围的外延),则该数据类型将仅包括表示该范围内的数据所必需的位的数目。在此示例中,1025略大于283且1045稍小于2150,所以针对该算法的适当的数据类型将是91位(150-83+24),并且锚定值将可表示的最小指数标识为83。该数据项的总和将涉及该数据类型的91位,而不是全部的2099位,从而大幅降低了计算时间和存储要求。
为了处理浮点例外,对于每个HPA数的元数据包括至少以下信息也会是有用的:
·符号(该值是正的还是负的)
·例外位,例如,IEEE 754-2008定义的位-IXC(不准确例外)、IOC(无效运算例外)、UFC(下溢例外)、OFC(上溢例外);或实现方式定义的位-IDC(输入非正规例外)。如果不需要HPA数的除法,则可以不需要DZC(除以零)例外位。
·特性位(例如,指示该值是无穷大、NaN(不是数字)、零)
这些位将是数据类型的一部分,并且不一定要针对每个线路进行复制。
图20示出了可以使用HPA值执行的运算的示例。在此情形下,运算是找到一系列浮点值的和的累加运算。如果这些是以浮点算法进行处理的,则浮点值被加的顺序将影响该结果,因为每个一对浮点值的加法可以导致由于舍入和正规化而引起的不精确,所以浮点加法是不结合的。因此,为给出可预测的结果,使用浮点加法累加一系列浮点值将要求这些加法按照固定的顺序被依次执行,这使得它难以被快速地执行。
相反地,通过使用HPA格式,性能可得到大幅提升,因为HPA数的加法是结合的,所以即使一些加法在多处理器系统内被并行地执行或者这些加法根据谁的操作数首先变得可用而被重新排序,结果也将是正确且可重复的。图20示出了在一个加法中执行的步骤,这些步骤然后可被重复多次以累加每个浮点值。在每个加法中,输入浮点值FP被基于提前针对HPA数指定的可编程锚定向量Va映射到HPA格式的数据向量Vi1。根据锚定向量Va中所定义的有效性边界和浮点值的指数E,浮点值FP的有效数字F被映射到数据向量Vi1的一个或多个元素的一部分。由于该向量比浮点值的有效数字F大得多,所以通常仅有该向量的少量线路将被填充来自有效数字的位值,更高的线路全部被填充符号位,更低的线路被填充零。下面将更详细地讨论转换运算。
因此,经转换的数据向量Vi1实际上是长定点值,它提供对由浮点值表示的二进制值的替代表示。这意味着它可以通过简单的整数加法被加到另一HPA格式的数据向量Vi0(它与Vi1具有相同的锚定值),而不需要像浮点算法那样的配准、正规化、舍入和指数调整步骤。这意味着该加法运算可与其他加法结合,所以能够被并行地执行或者能够被重新排序以提升性能。向量ViR是通过使数据向量Vi0、Vi1相加生成的,并且这表示HPA格式的结果值的数据向量与Vi0、Vi1具有相同的锚定值。如果这不是累加的最后的加法,则当另一浮点值FP被输入并转换为HPA格式并且加到先前的累加结果时,结果向量ViR成为用于下一个加法的第二向量Vi0。通过重复这些步骤若干次,可以非常快速地使一系列浮点值相加而不损失精度,这对于浮点算法是不可能的。已经生成最终的累加结果后,该结果的数据向量ViR然后可以根据需要被转换回浮点值,利用锚定向量Va来控制转换被执行的方式以使得浮点值表示与该结果值相对应的二进制值(如果必要的话则进行舍入)。
因此,浮点(FP)数或乘积可被转换为高精度锚定(HPA)数。这些HPA数可以成百(单精度)上千(双精度)位长,但是它们可以是FP输入的准确表示,与FP数不同,这些数字遵从算法的常规结合性质。
现在将更详细地讨论从FP数到HPA数的转换。单精度浮点(SP)数包括符号位、8个指数位、以及23个小数位。还存在(基于该指数的)隐藏位,该隐藏位被用来构造形式为1.小数或0.小数的有效数字。最大的指数和最小的指数被预留用于特殊数字,但是有效数字的第一位能够出现在指数所指定的其他28-2=254个位置中的任意位置。有效数字的第一位后面是小数,并且存在一个额外的位来表示符号,所以任意有限SP数可以被表示为254+23+1=278位定点数。如果我们打算构造五个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种的五个64位目的地中每个目的地的边界信息,正如在上面的示例中,Va=<256,192,128,64,0>。每个64位线路将得到SP数Si的副本,并且它将使用边界信息和SP数的指数来计算在Vi的适当部分中设置那些位。设Vi=<D4,D3,D2,D1,D0>。如果Si具有指数70,Vi的位[70:64](即,D1的位[6:0])将被设置为Si的有效数字的前7位,并且Vi的位[63:47](即,D0的位[63:47])将被设置为Si的有效数字的后7位。全部剩余位将被设置为零(为简单起见,我们现在假设为正数)。每个线路从Va的相应条目接收完成的有效数字、指数、和边界信息。
在常规情形下,Va完全由其低阶64位的基值来确定,每个相继的64位值比先前的64位大64,所以如果每个线路“已知”其在Va内的位置,则我们能够通过使用标量基值来得到它。然而,对于一些向量处理电路而言,更直接的是包括基值的向量,以使得每个线路不必知道它该向量内的位置,但是在替代的实现方式中,我们能够设想单一基值就足够了。
由Vi表示的二进制值是二进制补码数,所以我们将24位有效数字改变为二进制补码数(我们也能够在转换后再改变到二进制补码,但是转换279位值比转换24位值慢得多)。我们以常规的方式来转换到二进制补码:如果该数是正的,则什么也不做,否则使用该值~有效数字+1。在此转换后,到279位的转换完全按照先前的段落中那样进行,但是使用可能经改变的有效数字,并且将到该有效数字左侧的位设置为符号位而不是零。
该方法的美丽之处在于它的灵活性。存在许多程序员想要用来表示FP数的可能的定点数。设想程序员确信全部FP有效数字位将结束于范围70-197内?那么,通过适当地改变Va中的条目,定点数能够被容纳于128位目的地中。处理128位定点数比处理可能大得多的定点数快得多。
精确地使FP数的乘积相加也将是可取的,并且我们的方法易于扩展以允许这样。提出的指令将是
MUL_SP_to_HPA Vi,Va,Sn,Sm
Vi将包括定点结果,同样Va将包括针对每个线路的边界信息。使两个SP数Sn和Sm相乘而不进行舍入,保留有效数字的全部48位乘积,并且计算是乘积指数的9位偏倚的(超出255)表示的新指数。因为两个SP数的乘积可以远大于或远小于SP数,所以提供了额外的指数位。转换与CVT_SP_to_fixed指令中一模一地进行,取乘积的二进制补码,然后使得每个线路基于Va计算定点数是否具有任何有效数字位,并且在剩余位中填充符号位到有效数字的左侧并且填充零到有效数字的右侧。
除了所提出的两个SP指令外,还将有两个类似的DP指令,或者针对任意其他浮点格式的指令。它们以相同的方式起作用,但是知道如何解释DP输入或乘积(更宽的有效数字和乘积)。对DP而言,定点向量的大小可能大得多。我们可能想要排除巨大(比可表示的大)或微小(比可表示的小)的数字。针对主要感兴趣的情形的最大大小如下:
输入 | 第一位 | 小数位 | 长度 | 64位字 |
DP | 2046 | 52 | 2099 | 33 |
DP乘积 | 4092 | 105 | 4,198 | 66 |
DP乘积非微小 | 3069 | 105 | 3175 | 50 |
DP乘积,非微小+非巨大 | 2046 | 105 | 2152 | 34 |
SP | 254 | 23 | 278 | 5 |
SP乘积 | 508 | 47 | 556 | 9 |
SP乘积非微小 | 381 | 47 | 429 | 7 |
SP乘积,非微小+非巨大 | 254 | 47 | 302 | 5 |
“第一位”列说明有多少个可能的位置能够容纳有效数字的第一位,“小数位”说明该有效数字后有多少个小数位(对于乘积而言,这些数字更大)。“长度”字段就是第一位+小数位+1的和,这是容纳针对指定输入的定点形式的全部数字所要求的最小长度。“64位字”列是容纳针对指定输入的定点形式的全部数字所要求的64位字的最小数目。
行条目是DP(全部DP数),DP乘积(全部可能的DP乘积),DP乘积非微小(忽略任意低于DP最小次正规的位的全部乘积),以及DP乘积非微小+非巨大(忽略任意低于DP次正规或高于DP最大的位的全部乘积)SP行具有类似的解释。我们不需要针对全部这些感兴趣的情形有单独的指令,因为我们能够仅调整边界向量Va来反映我们感兴趣的位
我们相信程序员将创建他们自己的边界。小于2-50的乘积或许是与特定计算不相关的。通过简单地调整边界向量Va易于管理这些种类的情形。
图21更详细地示出了将浮点值转换为具有HPA数据格式的值的示例。将认识到,可以利用不同于图21中所示的操作的一系列不同的操作来实现该转换,并提供相同的结果。图21示出了经执行以基于相应的锚定向量Va[x]生成HPA值的数据向量的单一数据元素Vi1[x]的步骤,但是可针对向量中的每个其他数据元素执行相同的步骤。如图21中所示,在步骤150,如果浮点值的符号位S是1,则在步骤150该浮点值的有效数字F(包括1的隐含位)被否定。该否定可以通过使有效数字的位反相并加1以找到该有效数字F的二进制补码来执行。替代地,如果对经转换的HPA值执行加法(例如,如上面的图20中),则在步骤150,有效数字F可被反相以生成该有效数字的二进制反码,在该阶段不加1,并且随后当执行加法时,向加法器的进位输入可被宣称以完成二进制补码(通过取消一的加法步骤,该途径可能更快)。无论哪种方式,否定解释了如下事实:在浮点格式中,值是以符号数值格式表示的,所以如果符号位是1则有效数字的全部位被负加权,然而在HPA格式中,向量表示二进制补码值,其中,即使最高有效位是1,任意较低有效位仍被正加权。
然后从有效数字F或从否定步骤150生成的经修改的有效数字F形成中间值162。有效数字F或经修改的有效数字F被置于中间值162的最低有效部分,中间值162的较高部分包括0的特定数目、Lsize,其中Lsize是向量线路大小(一个数据元素内的位的数目)。例如,Lsize可以是64、128或256。移位器160然后使中间值162左移移位量Lshift所指示的多个位置,其中Lshift是如下确定的:
·Lshift=Z=E-B-Va[x]+1,如果Z>0且Z<Lsize+Fsize,其中:
○E是FP值的偏倚的指数,
○B是FP值的偏倚量(例如,对于DP为1023,对于SP为127)
○Vm[x]是根据锚定值Va确定的正在处理的数据元素的最低有效位的目标有效性;
○Lsize是数据元素中的位的数目(向量线路大小),以及
○Fsize是FP值(不包括隐含位)的有效数字中的位的数目。
·Lshift=0,如果Z≤0或Z>Lsize+Fsize。
实际上,如果FP值的有效数字F的位都不具有与当前正被处理的数据的位的有效性相对应的有效性则Lshift是0。如果Lshift是非零的,则使中间值162左移Lshift个位位置使得FP有效数字的至少一部分被映射到HPA向量的数据元素内具有相应有效性的位。针对数据元素Vi[x]的Lsize位值然后被选择作为来自移位的结果的较高Lsize位
可以以类似的方式针对向量的每个其他数据元素执行相同的操作以生成HPA值的总向量Vi1,其中每个数据元素表示与浮点值相对应的二进制值的相应部分。
针对被应用于向量的最高有效性数据元素的处理,如果移位器160所施加的移位导致有效数字F的任意非符号扩展位被移出移位结果的最高有效位,则可以生成例外指示以通过信号指示上溢情况,该情况指示浮点值大于HPA向量使用所指示的元数据所能表示的值。类似地,针对被应用于该向量的最低有效元素的处理,如果浮点值FP的全部位具有比该元素的最低有效位的有效性小的有效性,则通过信号指示下溢例外。并且,如果浮点有效数据的一些位是以经转换的HPA向量表示的而其他位不如该向量的最低有效位有效,则通过信号指示不精确例外。这些例外情况可以通过信号指示在元数据Vm中设置的有效性边界对于当前正被处理的浮点值是不恰当的。
图21中所示的转换运算可以响应于用于将浮点值转换为相应的HPA值的专门转换指令而被执行。替代地,该转换可以响应于还执行某种算法的算术指令而被执行。例如,加法或减法指令可以使得浮点值在被与另一HPA值进行加或减之前被转换为HPA形式,活着乘和转换指令可以触发两个浮点操作数的乘法并且浮点形式的这些操作数的乘积可以然后被使用图17中所示的运算转换为HPA值
类似地,HPA数可被转换为浮点数。针对SP的基本指令是:
CVT_HPA_to_SP Sd,Vd,Va
其中Sd是目的地SP数,Vd是包括高精度定点数据的数据向量,并且Va是包括针对Vd的每个64位线路的边界信息的锚定向量。Vd是二进制补码数,并且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且将位于Vd的位[23:0]处。
从在将Vd转换到SP的两种基本的方式:从左到右或从右到左。
从左到右转换是更直接的方式。Vd的顶部的第一位是符号位,且成为SP结果Sd的符号。我们然后搜索第一给非符号位(如果符号是一则为零,如果符号是零则为一)。该位成为有效数字的第一位,并且我们然后取接下来的23位作为小数部分,第24位作为防护位,且取全部剩余位的逻辑或作为粘滞位。基于从中找到第一个非符号位的线路的权重(W)、第一个非符号位的位置(L)、以及SP数中的小数位的数目(23)来计算指数,给出了指数W+L-23。如果指数计算返回小于零的值,则返回的指数是零。如果输入是负的且第一个零是24或更多个零的字符串的一部分,则指数增大1。对于正输入不对小数做出改变,否则使用该小数的二进制补码。基于舍入模式、小数的最低有效位、防护位以及最后的粘滞位来以常规方式对生成的数进行舍入。对于双精度,操作是相同的但是使用更大的有效数字和指数。
图22示出了使用从左到右转换来将具有数据向量Vi和元数据Vm的HPA值转换为浮点值FP的示例。同样,这可以响应于单独的转换指令或者包括转换以及某种算法的算术指令而被执行。数据向量Vi的最高有效位被直接映射到浮点值FP的符号位S。
为生成浮点值的有效数字F,如下执行一系列操作。如果向量的最高有效位是1(即,HPA值是负的),则在步骤170向量Vi被否定(反相且加1)以产生经修改的向量Vi’。对于正值,不对向量Vi进行改变。因此,向量Vi’至少具有一个前导零,所以表示正值。以该向量的最该有效元素开始,逐元素地依次执行有效数字生成运算。最高有效元素的处理线路搜索该元素内的第一个非符号位(即,第一个为1的位值)。在此示例中,Vi[3]的较高的元素不包括任意非符号位,所以处理移动到下一线路Vi[2]。
对元素Vi[2]的处理标识了为1的非符号位,并且确定表示在该非符号位1前面的零的数目的前导零计数LZC。然后从相应的数据元素Vi[2]的k位形成部分有效数字,其中k=min(Lsize-LZC,Fsize),其中Lsize是一个数据元素中的位的数目,Fsize是将被生成的FP值(包括隐含位)的有效数字中的位的数目,并且LZC是前导零计数。k位部分有效数字与针对该有效数字仍要获得的剩余位的数目的指示(Fsize-k)、防护位G和粘滞位S一起被输出。如果Lsize-LZC>Fsize,则防护位G等于元素Vi[2]的到为部分有效数字取的位的右侧的一个位置处的位,如果Lsize-LZC<=Fsize,则G=0。类似地,如果Lsize-LZC>Fsize+1,则粘滞位S等于元素Vi[2]的到防护位G的右侧的任意位的按位或,否则粘滞位S=0。
处理然后移动到帧对元素Vi[1]的下一线路,其中另一部分有效数字值被生成。元素Vi[1]的上部被选为部分有效数字,所取的位的数目对应于从先前的线路中输出的值Fsize-k。该线路还更新防护位G和粘滞位S的值,使得防护位G等于元素Vi[1]的到为部分有效数字取的最低位的右侧的一个位置处的位并且粘滞位S对应于不如防护位G有效的任意为的按位或。针对最低有效元素Vi[0]的处理线路从较高的线路接收粘滞位S,并且通过使元素Vi[0]的全部位于来自先前线路的粘滞位S进行或运算来更新粘滞位S。
针对线路2和1生成的部分有效数字然后被级联以形成有效数字值F。基于防护位G和粘滞位S的值、使用任意期望的舍入模式来对该有效数字进行舍入。针对浮点值FP存储的有效数字然后被从经舍入的有效数字值获取,忽略经舍入的有效数字的最高有效位,在浮点表示中该最高有效位是隐含的。
同时,针对该浮点值的偏倚的指数E被确定为:
E=Va[j]+Lsize-LZC+B,
其中Va[j]是在其中找到最高有效非符号位的数据元素Vi[j]的最低有效位的有效性(例如,在图22中所示的示例中元素Vi[2]的锚点值所指示的有效性),Lsize是一个数据元素中的位的数目,LZC是前导零计数,以及B是所使用的浮点表示的偏倚值。
如果Fsize<Lsize,则最多只有两个相邻数据元素可以包括对未经舍入的有效数字F有影响的位值,如在图22的示例中,且其他线路将或者是仅包括符号位的更高有效性的线路或者是仅对粘滞位S有影响的更低有效性的线路。还有可能是,取决于线路内的非符号位的位置,可以完全由一个线路被的位值来形成未经舍入的有效数字。
图22示出了按照从左到右的顺序依次处理HPA值的每个数据元素的示例。然而,随着向量大小变得越来越大,这可能是相对较慢的。这可能不会一直都是问题。例如,利用图20中所示的累加运算,从FP转换到HPA可以比从HPA转换回FP更频繁地发生(FP-HPA转换针对每个加法发生,则HPA-FP转换仅在最后生成结果时发生一次)。然而,如果想要加速处理,则针对若干线路并行地执行运算是可能的。例如,可以使用图19中所示的形式的处理电路。在此情形下,每个线路可以检测最高非符号位并生成部分有效数字(假设该部分有效数字包括整个向量内的最高非符号位),然后处理电路可以稍后通过从实际上包括第一非符号位的线路获取Fsize位来组合部分有效数字,并且如果需要的话则从下面的下一线路获取Fsize-k位。
从右向左转换也是可能的,其中首先处理最低有效元素。假设Vd=<D4,D3,D2,D1,D0>(这足以容纳任意SP数),并且设Va=<256,192,128,64,0>。回想到,Va向量可以指定Vd源的另一范围。可以使用两种方法来进行从右到左转换。
1.支持D0的线路使用与从左到右转换中相同的算法、但是不进行任何舍入或基于符号的操纵来就像只有那64位是可用地那样计算SP数。返回的值是35位向量<符号,指数[7:0],有效数字[23:0],防护,粘滞>。支持D1的线路做相同的事情,但还要注意由D0线路生成的数据。如果D1线路全是符号位,则D0结果被向上传递。否则,基于第一非符号位的新位置来计算新SP数。该新数的一些小数位可能来自D0,但是我们具有关于来自由该线路返回的35位向量的那些位的信息。我们还计算新指数、符号、防护和粘滞位。针对D2,然后针对D3重复该处理,最后通过舍入由D4线路返回的向量来结束该处理。DP转换以相同的方式起作用,但是具有更大的指数和有效数字。
2.在第二中方法中,每个Dx框与其他框独立地计算35位向量。在以硬件实现的具有4个Dx框的系统中,每35位向量被输出到第二框,第二框计算针对4个Dx框的集合的单一35位向量。该值被保存,并被以类似的方式与来自下一组数据位的输出的35位向量组合。在上面的示例中,使用256位Shoii引擎,64位块D3到D0将在第一次迭代中被处理,每个Dx框产生35位向量,并且针对D3到D0的集合生成最终向量。第二程将针对D4框中的位生成另一35位向量,并且第二框将组合该向量与来自较低的D3-D0框的向量以生成最终向量。将根据指定或默认的舍入模式来舍入该最终向量以生成最终的单精度结果。正如方法1中,DP转换将类似地起作用,但是由于大的指数和有效数字而要求不同的实现方式。
如果边界向量包括限制我们可能的范围的值,则我们并不需要全部278个可能的位就可以生成SP数,类似地,如果边界向量限制了该范围,则我们并不需要全部2099个可能的位来生成DP数。还应注意,一些数字可能超出SP或DP数的范围。这种情况尤其可能在转换乘积的和的时候发生,但也可能在使许多大数相加时发生。比DP或SP最大量大的数字应当遵循常规的舍入惯例(通常返回无穷大),并且比DP或SP最小次正规数小的数字应当在舍入之前调整粘滞位。为支持这一点,将需要捕获上溢的方式,在一个实施例中,标识上溢情况的单一位将是足够的。
没有东西妨碍将高精度定点被转换为与其输入不同的格式。例如,可以使用与上述相同的方法来实现半精度和四分之一精度(128位格式),对任意可能的整数或定点格式或十进制浮点格式也是如此。
一种装置可以具有用于执行算术运算的处理电路。该处理电路可以响应于指示结果值的目标有效性的可编程有效性数据而生成具有目标有效性的结果值。这利用了如下认知:在实践中,程序员知道预期什么范围的有效性适合给定应用的典型数据值,例如,取决于传感器的位置或传感器的精度,由温度传感器在地球上测得的数据可能被限制为相对较窄的值的范围。因此,程序员能够设置可编程有效性数据以指定结果的预期有效性。处理电路然后不必计算那些边界外部的结果的部分,以节能并提供更快的处理。
例如,可编程有效性数据可以使得处理电路与用于生成结果值的至少一个操作数的有效性无关地生成具有目标有效性的结果值。因此,即使操作数具有使得给定算术运算的结果应当落在可编程有效性数据所指示的有效性外的值,仍可以以所指示的有效性来生成结果,即使这可能是错误的。在一些情形下,结果值可以是正数或定点数据值,或者以上面所讨论的HPA格式表示的值。在一些实施例中,可编程有效性数据可以包括指示结果值的至少一个有效性边界的边界信息。处理电路可以响应于该边界信息来确定据结果值的位值具有在至少一个有效性边界内的有效性。处理电路例如可以将处理限制于确定结果值的在所指示的边界内的部分。
在一些示例中,边界信息可以指示分贝指示结果值的最低有效性和最高有效性的低有效性边界和高有效性边界中的至少一者。在一些情形下,可以由边界信息来明确地指示低边界和高边界。替代地,可以指示其中一者,另一者可以由正在处理的值的大小(长度)来暗示。大小可以是固定的,或者可以是在边界信息中指定的可变大小。在一些示例中,由可编程数据指示的目标大小可以与硬件中所支持的值的大小无关。例如,硬件可以仅能够并行地生成结果值的N位的最大值。如果可编程大小信息指示多余N位的大小,则可以通过多次经过硬件来执行算术运算。如果该大小小于N位,则可以不使用全部硬件。
例如,可以在处理线路中提供用于执行并行处理线路的处理单元,并且可编程有效性数据可以指定应当数据多少个线路。可编程有效性数据可以指示其中一个线路的有效性,其他线路的有效性根据该指示来确定。替代地,可以针对每个线路单独地表示有效性,这可以用于允许每个线路处理概线路的数据元素,而不需要关于该线路在整个向量内的位置的任意“全局知识”。
在另一示例中,一种装置可以具有至少一个数据存储元件和用于存储该至少一个数据存储元件的元数据的元数据存储元件。元数据(例如,上面所讨论的锚点值)可以指示将被存储在相应的数据存储元件中的数据值的目标有效性和目标长度。因此,元数据可以与该存储元件而不是该数据存储元件中所存储的特定数据值相关联。当生成将被放置在数据存储元件中的数据值时,处理电路可以参考元数据存储元件中的相应的元数据来确定将要生成的数据值的有效性和大小。这允许处理电路限制其处理以生成在由元数据所指定的目标有效性和大小定义的窗口内的位值。
同样,元数据可以是可编程的。在一些情形下,元数据存储元件可以是与数据存储元件分离的存储元件。在其他示例中,元数据存储元件可以包括相应的数据存储元件的一部分。
在一些情形下,一个元数据存储元件可以是在多个数据存储元件之间共享,以使得它们各自共享相同的元数据。数据存储元件可以包括指示应当与之相关联的的元数据存储元件的可编程值。
元数据所指示的目标大小可以与数据存储元件本身的物理大小无关。因此,元数据可以指定大于数据存储元件的存储元件大小的目标大小。如果目标大小大于数据存储元件大小,则可以跨多个数据存储元件来存储数据值。元数据可以包括指定表示同一数据值的各部分的数据存储元件的数目的信息。
元数据还可以表达其他信息,比如,指示在相应的数据存储元件中的数据值的生成过程中是否已经发生例外情况的例外信息、指示数据值是正值还是负值的符号信息、或指示数据值的特性(比如,它是零、无穷大或不是数字)的特性信息。例如,如果用于生成将被存储在数据存储元件中的数据值的算术运算的结果大于使用具有元数据中所指示的目标有效性和长度所能表示的值,例外信息可以指示上溢情况。
在其他示例中,一种装置可以被提供处理电路以执行将浮点值转换为包括多个数据元素的向量的转换运算,多个数据元素表示与浮点值相对应的二进制值的各个位有效性部分。这可用于支持使用向量格式的算法,与使用浮点值本身的浮点算法相比这种算法更易于并行化。以向量形式来表示二进制值是有用的,因为这提供了允许处理硬件根据向量的数据元素的数据来扩展它执行的处理的量的框架。例如,向量可以具有上面所讨论的HPA格式。向量可以具有比浮点值的有效数字数量多的位,以提供更大的精度。
转换运算可以是响应于可编程控制信息的,从而处理电路基于浮点值和控制信息来选择向量的每个数据元素的值。控制信息可以被指定为被运行以执行转换运算的指令中的参数,例如,标识存储信息的寄存器的寄存器说明符或中间值,或者可以在诸如控制寄存器之类的专门位置中提供该控制信息。
在一个示例中,控制信息可以指示将由在转换运算中生成的向量的数据元素表示的至少一个位有效性部分的有效性。因此,向量可以表示可编程地选择的有效性的二进制值。在一些情形下,控制信息可以指示向量的预定数据元素的有效性,从该预定数据元素的有效性来导出其他元素的有效性(例如,以已知数据元素大小的间隔往上数)。然而,其他示例可以提供每个元素的有效性的单独指示。这可用于简化向量处理,以使得每个向量线路不必考虑其数据元素相对于其他元素的位置。
控制信息还可义指示向量的可变数目的数据元素。这可以利用指定数据元素的数据的明确大小指示,或者通过使用针对每个线路的有效性指示来实现。例如,针对特定数据元素的有效性指示的预定位组合格式可以通过信号指示该数据元素不被用于当前计算。
控制信息可以与正被转换的浮点值无关。因此,无论浮点值的有效性或值如何,都可以以控制自信息中所指示的有效性和/或大小来生成向量,即使浮点值将具有无法由该有效性和大小来精确表示的值。
一些实现方式可以使用一次生成向量的单一元素的处理电路。然而,为提升性能,该处理电路可以具有至少并行地生成向量的两个数据元素的处理单元。
可以以不同的方式来执行转换。在一个示例中,针对每个数据元素,处理电路可以基于浮点值的指数和将由该数据元素表示的二进制的一部分的有效性来确定是否用基于该浮点值选择的位值来填充该数据元素。例如,一些数据元素可以具有并不与浮点有效数字的任意位的有效性相对应的有效性,在这种情形下,这些元素将被填充从浮点有效数字选择的任意位值。在一个示例中,针对每个数据元素,处理电路可以根据浮点值的有效数字来形成初始值,然后使该初始值移位一位移量,该位移量取决于浮点值的指数和控制信息针对该数据元素所指示的有效性。这提供了相对简单的技术,其中每个处理线路可以独立于任意其他线路地生成其数据元素,这可用于支持向量处理的顺序或并行实现方式。该结果向量然后可从移位器针对每个线路生成的值组合而来。当与浮点值相对应的二进制值不能由具有元数据中所指示的有效性或大小的向量来表示时,移位运算还可用来生成指示上溢、下溢或不精确情况的例外信息。这样的例外信息可以允许系统确定何时程序员所设置的有效性不适用于处理正被转换的浮点值的当前值。
一般说来,每个数据元素可以包括二进制补码值(与该浮点值的读好数值形式的有效数字不同)。因此,如果浮点值是负的,则可以在转换运算期间执行否定运算,从而以已经相对于浮点值的有效数字进行否定的值来生成该向量的至少一个数据元素。这确保了向量表示与浮点值具有相同符号的值。
一般说来,处理电路可以响应于第一指令而执行转换运算,第一指令可以是仅用于执行转换的单独的转换指令或者将转换与算术运算进行结合的算术指令。例如,响应于算术指令,处理电路可以执行算术运算(例如,乘法)以生成结果浮点值,该结果浮点值然后可在转换运算过程中被转换为向量。在其他示例中,可以首先执行转换,然后算术运算(例如,加法或减法)可被应用于经转换的向量和其他向量。
并且,可以执行转换运算以将上面讨论的形式的向量转换为表示由该向量的各个位有效性部分表示的二进制值的替代表示的标量值。例如,该标量值可以是二进制或十进制浮点值、整数值或定点值。这允许上面讨论的向量形式根据需要被映射回可外在地表示的格式。例如,出于与其他设备的兼容性,将用于内部处理的向量格式映射到定点、整数或浮点格式可能是有用的。
同样,向量到标量转换运算可以响应于可编程控制信息来根据向量生成标量值。控制信息可以通过中间值或寄存器说明符在指令中被指定,或者被置于固定寄存器中。控制信息可以将向量的数据元素所表示的位有效性部分的有效性指示为单一值或分别针对每个元素指定的多个值。控制信息还可以指定如何呈现向量的数据元素。这允许程序员定义控制信息意识的向量可以表示具有可变大小和有效性的二进制值。向量可以被逐元素地顺序处理,或者利用至少并行地处理两个数据元素的处理单元来并行地处理。
如果标量是正数或定点值,则针对向量的至少一些数据元素,处理电路可以基于控制信息所指示的有效性来选择具有与标量值的位位置相对应的有效性的数据元素的一个或多个位,然后基于所选择的位来形成标量值。
为将向量转换为浮点值,处理电路可以基于向量的最高有效非符号位的位置和控制信息针对该向量的具有最高有效非符号位的数据元素所指示的有效性来确定指数。可以通过执行有效数字生成运算以生成针对向量的至少一个元素的部分有效数字值来生成浮点值的有效数字,其中该浮点值的有效数字是基于针对每个元素生成的部分有效数字值来形成的。例如,针对给定数据元素的有效数字生成运算可以包括检测元素是否具有至少一个非符号位,并且如果有,则输出该数据元素的最高有效非符号位以及根据该最高有效非符号位选择的该数据元素的多个较低有效位作为部分有效数字值。
在一些实现方式中,可以针对至少一些数据元素并行地执行有效数字生成运算以加速处理。然后针对每个元素的结果稍后可被组合以确定总有效数字。例如,每个处理线路可以在其向量的元素包括整个向量的最高有效非符号位的假设下执行效数字生成运算。一旦知道每个线路的结果,该处理电路就可以基于哪个线路实际上包括最高有效非符号位来形成浮点值的有效数字。
替代地,可以针对至少一些元件顺序地执行有效数字生成运算。这可以简化处理,因为针对至少一些线路,如果已经知道将完全由针对其他线路生成的部分有效数字来形成有效数字,则它们可能不必生成部分有效数字。针对后面的元素的有效数字生成运算可以取决于在针对较早的元素的有效数字生成运算中生成的信息以减少所需的处理的量。在一个示例中,可以从向量的最高有效元素开始并以最低有效元素结束来从左到右顺序地执行有效数字生成运算。在此情形下,具有非符号位的最高有效元素被定为,然后如果针对该元素生成的部分有效值具有比该浮点值的有效数字所需要的位的总数少的位,则指示将要生成的剩余位的数目的控制值可被输出,并且这可在针对下一元素的有效数字生成运算中被用来选择所需的剩余数目的位。
这避免了针对每个元素执行整个有效数字生成运算的需求。用于该向量的较低有效元素的处理线路可以仅更新诸如用于舍入的防护/粘滞位之类状态信息,而不需要生成部分有效数字。
在其他示例中,可以从向量的最低有效部分开始并以向量的较高有效部分结束来从右到左顺序地应用有效数字生成运算。
当标量值包括浮点值且向量表示负的二进制值时,可以在转换运算过程中执行否定运算,以使得浮点值的有效数字具有已经相对于该向量的至少一部分进行否定的二进制值。这保留了以向量格式表示的该数字的符号。
正如浮点到向量转换那样,向量到标量转换可以响应于专门的转换指令或者将转换与算术运算进行结合的算术指令而被执行。
一般说来,可以在具有本说明书所讨论的高精度锚点(HPA)格式的值和提供HPA数据值所表示的二进制值的替代表示的另一数据值之间按任意方向执行转换。
其他示例可以提供:
(1)一种装置,包括:
处理电路,该处理电路执行一个或多个算术运算;
其中该处理电路响应于指定浮点操作数的指令而将该浮点操作数转换为定点操作数,该定点操作数具有比以通用定点格式表示所述浮点操作数的最大可能值和最小可能值所需的位的数目少的位;以及对经转换的定点操作数执行定点算术运算以生成结果值。
(2)一种设备,包括:
用于执行一个或多个算术运算的处理装置;
其中该处理装置响应于指定浮点操作数的指令而将该浮点操作数转换为定点操作数,该定点操作数具有比以通用定点格式表示所述浮点操作数的最大可能值和最小可能值所需的位的数目少的位;以及对经转换的定点操作数执行定点算术运算以生成结果值。
(3)一种数据处理方法,包括:
响应于指定浮点操作数的指令而将该浮点操作数转换为定点操作数,该定点操作数具有比以通用定点格式表示所述浮点操作数的最大可能值和最小可能值所需的位的数目少的位;以及对经转换的定点操作数执行定点算术运算以生成结果值。
(4)一种装置,包括:
处理电路,该处理电路执行一个或多个数据处理操作;
其中响应于指定至少一个定点操作数和至少一个浮点操作数的指令,该处理电路执行数据处理操作以基于该至少一个定点操作数和至少一个浮点操作数生成结果值。
(5)一种设备,包括:
用于执行一个或多个数据处理操作的处理装置;
其中响应于指定至少一个定点操作数和至少一个浮点操作数的指令,该处理装置执行数据处理操作以基于该至少一个定点操作数和至少一个浮点操作数生成结果值。
(6)一种数据处理方法,包括:
响应于指定至少一个定点操作数和至少一个浮点操作数的指令,执行数据处理操作以基于该至少一个定点操作数和至少一个浮点操作数生成结果值。
(7)一种装置,包括:
处理电路,该处理电路支持对具有第一数据格式的数据值的处理,在第一数据格式中数据由表示数字值的第一值和表示第一值所表示的数字值的有效性的第二值来表示;
其中该处理电路包括定点处理电路以执行至少一个算术运算,在该算术运算中具有所述第一数据格式的至少一个输入数据值的第一值被处理以生成具有所述第一数据格式的结果数据值的第一值,其中该定点处理电路被约束以生成与所述输入数据值具有相同的第二值的结果数据值。
(8)一种设备,包括:
用于处理具有第一数据格式的数据值的处理装置,在第一数据格式中数据由表示数字值的第一值和表示第一值所表示的数字值的有效性的第二值来表示;
其中该处理装置包括定点处理电路以执行至少一个算术运算,在该算术运算中具有所述第一数据格式的至少一个输入数据值的第一值被处理以生成具有所述第一数据格式的结果数据值的第一值,其中该定点处理电路被约束以生成与所述输入数据值具有相同的第二值的结果数据值。
(9)一种数据处理方法,包括:
处理具有第一数据格式的数据值,在第一数据格式中数据由表示数字值的第一值和表示第一值所表示的数字值的有效性的第二值来表示;
其中该处理包括至少一个算术运算的定点处理,在该算术运算中具有所述第一数据格式的至少一个输入数据值的第一值被处理以生成具有所述第一数据格式的结果数据值的第一值,其中用于执行该处理的处理电路被约束以生成与所述输入数据值具有相同的第二值的结果数据值。
(10)一种设备,包括:
用于执行一个或多个算术运算以及与至少一个操作数来生成结果值的处理装置;
其中针对至少一个算术运算,该处理装置响应于指示结果值的目标有效性的可编程有效性数据而生成具有目标有效性的结果值。
(11)一种设备,包括:
用于存储数据值的至少一个数据存储装置;以及
用于存储针对至少一个相应的数据存储装置的元数据的元数据存储元件装置,该元数据指示将被存储在所述至少一个相应的数据存储装置中的定点数据值的目标有效性和目标大小。
虽然这里已经参考附图描述了本发明的说明性实施例,但是应理解本发明不限于那些精确的实施例,并且可以由本领域技术人员在不背离由所附权利要求限定的本发明的范围和精神的情况下引起各种变化和修改。
Claims (18)
1.一种装置,包括:
处理电路,所述处理电路执行一个或多个算术运算以基于至少一个操作数生成结果值;
其中针对至少一个算术运算,所述处理电路响应于指示所述结果值的目标有效性的可编程有效性数据而生成具有所述目标有效性的结果值。
2.如权利要求1所述的装置,其中,所述处理电路响应于所述可编程有效性数据而生成具有所述目标有效性而与所述至少一个操作数的有效性无关的结果值。
3.如权利要求1和2中任一项所述的装置,其中,所述结果值包括定点数据值。
4.如任意前述权利要求所述的装置,其中,所述可编程有效性数据包括指示所述结果值的至少一个有效性边界的边界信息。
5.如权利要求4所述的装置,其中,所述处理电路响应于所述边界信息而确定具有在所述至少一个有效性边界内的有效性的所述结果值的位值。
6.如权利要求4和5中任一项所述的装置,其中,所述边界信息包括以下至少一项:
指示所述结果值的最低有效位的低有效性边界信息,以及
指示所述结果值的最高有效位的高有效性边界信息。
7.如任意前述权利要求所述的装置,其中,所述处理电路响应于指示所述结果值的目标大小的可编程大小信息而生成具有所述目标大小的结果值。
8.如权利要求7所述的装置,其中,所述处理电路包括硬件以并行地生成多个所述结果值的N位;以及
当所述可编程大小信息指示多个N位的目标大小时,所述处理电路被配置为通过多次经过所述硬件来执行所述至少一个算术运算。
9.如任意前述权利要求所述的装置,其中,所述处理电路包括多个处理单元以执行多个并行处理线路;
其中所述可编程有效性数据针对所述处理线路中的至少一个处理线路指定将由该处理线路生成的所述结果值的一部分的目标有效性。
10.如权利要求9中所述的装置,其中,每个处理线路被配置为基于所述至少一个操作数和由所述可编程有效性数据针对该处理线路所指定的目标有效性来形成至少一个输入值,并且处理所述至少一个输入值以生成针对该处理线路的结果值的一部分。
11.一种数据处理方法,包括:
使用处理电路执行算术运算以基于至少一个操作数生成结果值;
其中所述处理电路响应于指示所述结果值的目标有效性的可编程有效性数据而生成具有所述目标有效性的结果值。
12.一种装置,包括:
至少一个数据存储元件;以及
元数据存储元件,所述元数据存储元件存储针对至少一个相应的数据存储元件的元数据,其中所述元数据指示将被存储在所述至少一个相应的数据存储元件中的数据值的目标有效性和目标大小。
13.如权利要求12所述的装置,其中,所述元数据是可编程的。
14.如权利要求12和13中任一项所述的装置,其中,所述元数据存储元件包括所述至少一个相应的数据存储元件的一部分。
15.如权利要求12到14中任一项所述的装置,包括执行一个或多个算术运算的处理电路;
其中针对用于生成将被存储在所述至少一个相应的数据存储元件中的数据值的至少一个算术运算,所述处理电路响应于所述元数据存储元件中所存储的所述元数据而生成具有所述目标有效性和目标大小的定点数据值。
16.如权利要求12到15中任一项所述的装置,其中,如果所述元数据指示的所述目标大小大于所述至少一个数据存储元件的数据存储元件大小,则所述数据值被存储在多个所述相应的数据存储元件中。
17.如权利要求12到16中任一项所述的装置,其中,所述元数据还包括以下至少一项:
指示针对所述至少一个相应的数据存储元件中所存储的数据值是否已经发生例外情况的例外信息;
指示所述至少一个相应的数据存储元件中所存储的数据值是正值还是负值的符号信息;以及
指示所述至少一个相应的数据存储元件中所存储的数据值的特性的特性信息。
18.如权利要求15所述的装置,其中,所述元数据包括例外信息,并且所述处理电路被配置为如果所述至少一个算术运算的结果落在具有所述目标有效性和目标大小的数据值可表示的值的范围外则对所述例外信息进行设置以指示例外情况。
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,836 | 2014-12-24 | ||
US14/582,836 US9766857B2 (en) | 2014-11-03 | 2014-12-24 | Data processing apparatus and method using programmable significance data |
PCT/GB2015/052701 WO2016071664A1 (en) | 2014-11-03 | 2015-09-18 | Data processing apparatus and method using programmable significance data |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107077323A true CN107077323A (zh) | 2017-08-18 |
CN107077323B CN107077323B (zh) | 2021-06-01 |
Family
ID=55852722
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580058330.9A Active CN107077416B (zh) | 2014-11-03 | 2015-09-08 | 用于以选择性舍入模式进行向量处理的装置和方法 |
CN201580058275.3A Active CN107077415B (zh) | 2014-11-03 | 2015-09-18 | 用于执行转换运算的装置和方法 |
CN201580058293.1A Active CN107077323B (zh) | 2014-11-03 | 2015-09-18 | 使用可编程有效性数据的数据处理的装置和方法 |
CN201580058291.2A Active CN107077322B (zh) | 2014-11-03 | 2015-09-18 | 用于执行转换运算的装置和方法 |
CN201580058383.0A Active CN107077417B (zh) | 2014-11-03 | 2015-09-22 | 有效性配准 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580058330.9A Active CN107077416B (zh) | 2014-11-03 | 2015-09-08 | 用于以选择性舍入模式进行向量处理的装置和方法 |
CN201580058275.3A Active CN107077415B (zh) | 2014-11-03 | 2015-09-18 | 用于执行转换运算的装置和方法 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580058291.2A Active CN107077322B (zh) | 2014-11-03 | 2015-09-18 | 用于执行转换运算的装置和方法 |
CN201580058383.0A Active CN107077417B (zh) | 2014-11-03 | 2015-09-22 | 有效性配准 |
Country Status (5)
Country | Link |
---|---|
US (8) | US9916130B2 (zh) |
JP (2) | JP6853777B2 (zh) |
CN (5) | CN107077416B (zh) |
GB (3) | GB2545607B (zh) |
WO (8) | WO2016071661A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109934255A (zh) * | 2019-01-22 | 2019-06-25 | 小黄狗环保科技有限公司 | 一种适用于饮料瓶回收机投递物分类识别的模型融合方法 |
CN112148371A (zh) * | 2019-06-27 | 2020-12-29 | 北京地平线机器人技术研发有限公司 | 基于单指令多数据流的数据运算方法、装置、介质和设备 |
Families Citing this family (54)
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 |
WO2018204898A1 (en) * | 2017-05-04 | 2018-11-08 | 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 |
US11507370B2 (en) | 2018-02-13 | 2022-11-22 | Cambricon (Xi'an) Semiconductor Co., Ltd. | Method and device for dynamically adjusting decimal point positions in neural network computations |
US11630666B2 (en) | 2018-02-13 | 2023-04-18 | Shanghai Cambricon Information Technology Co., Ltd | Computing device and method |
KR102148110B1 (ko) | 2018-02-13 | 2020-08-25 | 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 | 계산 장치 및 방법 |
CN110162162B (zh) | 2018-02-14 | 2023-08-18 | 上海寒武纪信息科技有限公司 | 处理器的控制装置、方法及设备 |
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 | 复旦大学 | 一种低位宽卷积神经网络可重构计算单元 |
EP3624020A4 (en) | 2018-05-18 | 2021-05-05 | Shanghai Cambricon Information Technology Co., Ltd | CALCULATION PROCEDURES AND RELATED PRODUCTS |
CN108762720B (zh) * | 2018-06-14 | 2021-06-29 | 北京比特大陆科技有限公司 | 数据处理方法、数据处理装置以及电子设备 |
KR102470893B1 (ko) | 2018-06-27 | 2022-11-25 | 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 | 온 칩 코드의 브레이크 포인트에 의한 디버그 방법, 온 칩 프로세서 및 브레이크 포인트에 의한 칩 디버그 시스템 |
US11703939B2 (en) | 2018-09-28 | 2023-07-18 | Shanghai Cambricon Information Technology Co., Ltd | Signal processing device and related products |
US10824692B2 (en) * | 2018-10-12 | 2020-11-03 | Google Llc | Low-power adder circuit |
JP2020098469A (ja) * | 2018-12-18 | 2020-06-25 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
CN111383637A (zh) | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | 信号处理装置、信号处理方法及相关产品 |
US10963245B2 (en) | 2019-02-06 | 2021-03-30 | Arm Limited | Anchored data element conversion |
US10936285B2 (en) | 2019-02-06 | 2021-03-02 | Arm Limited | Overflow or underflow handling for anchored-data value |
US10459688B1 (en) * | 2019-02-06 | 2019-10-29 | Arm Limited | Encoding special value in anchored-data element |
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 |
US11934940B2 (en) | 2019-04-18 | 2024-03-19 | Cambricon Technologies Corporation Limited | AI processor simulation |
CN111832737B (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 |
WO2020248424A1 (zh) | 2019-06-12 | 2020-12-17 | 上海寒武纪信息科技有限公司 | 一种神经网络的量化参数确定方法及相关产品 |
US11676029B2 (en) | 2019-06-12 | 2023-06-13 | Shanghai Cambricon Information Technology Co., Ltd | Neural network quantization parameter determination method and related products |
US11640649B2 (en) | 2019-06-19 | 2023-05-02 | Samsung Electronics Co., Ltd. | Methods and apparatus for efficient range calculation |
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 |
WO2021106253A1 (ja) * | 2019-11-27 | 2021-06-03 | 株式会社コアコンセプト・テクノロジー | 情報処理装置、プログラム、及び情報処理方法 |
EP4068080A4 (en) * | 2019-11-27 | 2023-08-09 | Core Concept Technologies Inc. | INFORMATION PROCESSING DEVICE, INFORMATION PROCESSING PROGRAM AND METHOD |
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 |
US11429349B1 (en) | 2021-03-23 | 2022-08-30 | SambaNova Systems, Inc. | Floating point multiply-add, accumulate unit with carry-save accumulator |
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 |
JP7235171B2 (ja) * | 2021-04-06 | 2023-03-08 | 三菱電機株式会社 | 固定小数点演算ビット幅の検証システム及び決定システム |
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 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1515997A (zh) * | 2003-01-06 | 2004-07-28 | 上海奇码数字信息有限公司 | 可控制锁存累加器的系统与方法 |
CN1826580A (zh) * | 2003-07-23 | 2006-08-30 | 桑德布里奇技术公司 | 具有初步饱和检测的加法或者减法运算单元 |
CN101390045A (zh) * | 2006-02-27 | 2009-03-18 | 高通股份有限公司 | 对可选次精度的功率要求减少的浮点处理器 |
WO2010112970A1 (en) * | 2009-03-31 | 2010-10-07 | Freescale Semiconductor, Inc. | Data processing with variable operand size |
US20120089655A1 (en) * | 2010-10-12 | 2012-04-12 | Dolby Laboratories Licensing Corporation | System and Method of Dynamic Precision Operations |
CN103092571A (zh) * | 2013-01-10 | 2013-05-08 | 浙江大学 | 支持多种数据类型的单指令多数据算术单元 |
Family Cites Families (64)
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 |
EP1061436B1 (en) * | 1997-10-23 | 2007-12-19 | Advanced Micro Devices, Inc. | Multifunction floating point addition/subtraction pipeline |
WO1999023548A2 (en) * | 1997-10-23 | 1999-05-14 | Advanced Micro Devices, Inc. | Multifunction floating point addition/subtraction pipeline and bipartite look-up table |
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 |
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 |
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 |
KR101005718B1 (ko) * | 2003-05-09 | 2011-01-10 | 샌드브리지 테크놀로지스, 인코포레이티드 | 포화와 함께 또는 포화 없이 다중 오퍼랜드들의 누산을 위한 프로세서 감소 유닛 |
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 |
CN101615173B (zh) * | 2006-02-06 | 2011-11-30 | 威盛电子股份有限公司 | 处理任何数个不同格式数据的串流处理器及其方法及模块 |
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 |
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 |
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 | 中国科学院自动化研究所 | 一种向量浮点运算装置及方法 |
WO2013095535A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Floating point rounding processors, methods, systems, and instructions |
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 |
US9916130B2 (en) * | 2014-11-03 | 2018-03-13 | Arm Limited | Apparatus and method for vector processing |
-
2014
- 2014-12-09 US US14/564,708 patent/US9916130B2/en active Active
- 2014-12-24 US US14/582,968 patent/US9766858B2/en active Active
- 2014-12-24 US US14/582,836 patent/US9766857B2/en active Active
- 2014-12-24 US US14/582,978 patent/US9703529B2/en active Active
- 2014-12-24 US US14/582,974 patent/US9690543B2/en active Active
- 2014-12-24 US US14/582,812 patent/US9665347B2/en active Active
- 2014-12-24 US US14/582,875 patent/US9778906B2/en active Active
-
2015
- 2015-01-27 US US14/606,510 patent/US9886239B2/en active Active
- 2015-09-08 CN CN201580058330.9A patent/CN107077416B/zh active Active
- 2015-09-08 WO PCT/GB2015/052591 patent/WO2016071661A1/en active Application Filing
- 2015-09-08 GB GB1705562.5A patent/GB2545607B/en active Active
- 2015-09-18 JP JP2017522513A patent/JP6853777B2/ja active Active
- 2015-09-18 WO PCT/GB2015/052701 patent/WO2016071664A1/en active Application Filing
- 2015-09-18 CN CN201580058275.3A patent/CN107077415B/zh active Active
- 2015-09-18 CN CN201580058293.1A patent/CN107077323B/zh active Active
- 2015-09-18 WO PCT/GB2015/052700 patent/WO2016071663A1/en active Application Filing
- 2015-09-18 CN CN201580058291.2A patent/CN107077322B/zh active Active
- 2015-09-18 WO PCT/GB2015/052699 patent/WO2016071662A1/en active Application Filing
- 2015-09-18 GB GB1705563.3A patent/GB2546906B/en active Active
- 2015-09-22 WO PCT/GB2015/052733 patent/WO2016071668A1/en active Application Filing
- 2015-09-22 WO PCT/GB2015/052731 patent/WO2016071666A1/en active Application Filing
- 2015-09-22 JP JP2017522512A patent/JP6694880B2/ja active Active
- 2015-09-22 WO PCT/GB2015/052730 patent/WO2016071665A1/en active Application Filing
- 2015-09-22 WO PCT/GB2015/052732 patent/WO2016071667A1/en active Application Filing
- 2015-09-22 GB GB1705565.8A patent/GB2546907B/en active Active
- 2015-09-22 CN CN201580058383.0A patent/CN107077417B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1515997A (zh) * | 2003-01-06 | 2004-07-28 | 上海奇码数字信息有限公司 | 可控制锁存累加器的系统与方法 |
CN1826580A (zh) * | 2003-07-23 | 2006-08-30 | 桑德布里奇技术公司 | 具有初步饱和检测的加法或者减法运算单元 |
CN101390045A (zh) * | 2006-02-27 | 2009-03-18 | 高通股份有限公司 | 对可选次精度的功率要求减少的浮点处理器 |
WO2010112970A1 (en) * | 2009-03-31 | 2010-10-07 | Freescale Semiconductor, Inc. | Data processing with variable operand size |
US20120089655A1 (en) * | 2010-10-12 | 2012-04-12 | Dolby Laboratories Licensing Corporation | System and Method of Dynamic Precision Operations |
CN103092571A (zh) * | 2013-01-10 | 2013-05-08 | 浙江大学 | 支持多种数据类型的单指令多数据算术单元 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109934255A (zh) * | 2019-01-22 | 2019-06-25 | 小黄狗环保科技有限公司 | 一种适用于饮料瓶回收机投递物分类识别的模型融合方法 |
CN109934255B (zh) * | 2019-01-22 | 2023-05-30 | 小黄狗环保科技有限公司 | 一种适用于饮料瓶回收机投递物分类识别的模型融合方法 |
CN112148371A (zh) * | 2019-06-27 | 2020-12-29 | 北京地平线机器人技术研发有限公司 | 基于单指令多数据流的数据运算方法、装置、介质和设备 |
CN112148371B (zh) * | 2019-06-27 | 2023-10-24 | 北京地平线机器人技术研发有限公司 | 基于单指令多数据流的数据运算方法、装置、介质和设备 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107077323A (zh) | 使用可编程有效性数据的数据处理的装置和方法 | |
Müller et al. | Computer architecture: complexity and correctness | |
CN109791488A (zh) | 用于执行用于复数的融合乘-加指令的系统和方法 | |
TW201821979A (zh) | 用於執行算術運算以累加浮點數的裝置及方法 | |
CN104094221B (zh) | 基于零的高效解压缩 | |
CN108351776A (zh) | 用于向量的处理的通道位置信息 | |
US6295597B1 (en) | Apparatus and method for improved vector processing to support extended-length integer arithmetic | |
CN110457067A (zh) | 利用弹性浮点数的系统、方法和设备 | |
CN109716290A (zh) | 用于经融合的乘加的系统、装置和方法 | |
EP3341833A1 (en) | Floating point number rounding | |
GB2454201A (en) | Combined Magnitude Detection and Arithmetic Operation | |
CN108351762A (zh) | 使用重叠位的数值的冗余表示 | |
CN108268244A (zh) | 用于算术递归的系统、装置和方法 | |
CN104133748B (zh) | 用以在微处理器内组合来自多个寄存器单元的对应半字单元的方法及系统 | |
CN109144471A (zh) | 用于二进制向量分解的二进制乘法器 | |
US7747667B2 (en) | Data processing apparatus and method for determining an initial estimate of a result value of a reciprocal operation | |
CN108292228A (zh) | 用于基于通道的步进收集的系统、设备和方法 | |
CN106796502A (zh) | 从3d坐标计算3d z曲线索引的机器级指令 | |
KR102649933B1 (ko) | 벡터 자리올림이 있는 가산 명령 | |
CN108351763A (zh) | 重叠传播操作 | |
US10503691B2 (en) | Associative computer providing semi-parallel architecture | |
CN112632464B (zh) | 用于处理数据的处理装置 | |
Akkas | Instruction set enhancements for reliable computations | |
US20230280975A1 (en) | Variable Format Floating Point Logic | |
Pedone | Design and characterization of Variable Latency adders for floating-point arithmetic units |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |