Microarchitecture for floating point fused multiply-add with exponent scaling
First Claim
1. A non-transitory computer-readable storage medium comprising code, which, when executed by a processor, causes the processor to perform operations for executing a floating point operation, the non-transitory computer-readable storage medium comprising:
- code for causing a floating point unit to receive multiplier, multiplicand, addend, and scaling factor operands;
code for causing a multiplier block to perform a partial multiplication operation on mantissas of the multiplier and multiplicand operands to obtain an intermediate product;
code for causing a pre-alignment block to pre-align a mantissa of the addend operand with the intermediate product based on the scaling factor operand and exponents of the addend, multiplier, and multiplicand operands; and
code for causing an accumulator block to add or subtract the mantissa of the pre-aligned addend operand and the intermediate product to obtain the result of the floating point operation.
1 Assignment
0 Petitions
Accused Products
Abstract
Systems and methods for implementing a floating point fused multiply and accumulate with scaling (FMASc) operation. A floating point unit receives input multiplier, multiplicand, addend, and scaling factor operands. A multiplier block is configured to multiply mantissas of the multiplier and multiplicand to generate an intermediate product. Alignment logic is configured to pre-align the addend with the intermediate product based on the scaling factor and exponents of the addend, multiplier, and multiplicand, and accumulation logic is configured to add or subtract a mantissa of the pre-aligned addend with the intermediate product to obtain a result of the floating point unit. Normalization and rounding are performed on the result, avoiding rounding during intermediate stages.
19 Citations
13 Claims
-
1. A non-transitory computer-readable storage medium comprising code, which, when executed by a processor, causes the processor to perform operations for executing a floating point operation, the non-transitory computer-readable storage medium comprising:
-
code for causing a floating point unit to receive multiplier, multiplicand, addend, and scaling factor operands; code for causing a multiplier block to perform a partial multiplication operation on mantissas of the multiplier and multiplicand operands to obtain an intermediate product; code for causing a pre-alignment block to pre-align a mantissa of the addend operand with the intermediate product based on the scaling factor operand and exponents of the addend, multiplier, and multiplicand operands; and code for causing an accumulator block to add or subtract the mantissa of the pre-aligned addend operand and the intermediate product to obtain the result of the floating point operation. - View Dependent Claims (2, 3)
-
-
4. A non-transitory computer-readable storage medium comprising code, which, when executed by a processor, causes the processor to perform operations for performing a floating point scaled fused multiply and accumulate (FMASc) operation, the non-transitory computer-readable storage medium comprising:
-
code for causing a multiplier block to multiply mantissas of a floating point multiplier operand with a floating point multiplicand operand to obtain a mantissa of a product; code for causing a leading zero count (LZC) block to determine a count of the number of leading zeros of the mantissa of a floating point addend operand; code for causing a pre-alignment block to determine a pre-alignment shift value for the floating point addend operand based on the LZC, a scaling factor operand, and exponents of the floating point addend operand, the floating point multiplier operand, and the floating point multiplicand operand; code for causing an alignment block to shift the mantissa of the floating point addend operand with the pre-alignment shift value to obtain a pre-aligned addend; code for causing an accumulator block to accumulate the mantissa of the product and the pre-aligned addend to obtain an intermediate result; code for causing a leading zero anticipator block to determine the number of leading zeros of the intermediate result; code for causing a normalization block to determine a normalizing shift value based on the pre-alignment shift value and the number of leading zeros of the intermediate result; and code for causing the normalization block to normalize the intermediate result based on the normalizing shift value in a normalization block to obtain a normalized output of the FMASc operation. - View Dependent Claims (5, 6, 7, 8, 9)
-
-
10. A non-transitory computer-readable storage medium comprising code, which, when executed by a processor, causes the processor to perform operations for executing a floating point operation, the non-transitory computer-readable storage medium comprising:
-
code for causing a floating point unit to receive multiplier, multiplicand, addend, and scaling factor operands; code for causing a multiplier block to perform a partial multiplication operation on mantissas of the multiplier and multiplicand operand to obtain an intermediate product; code for causing a pre-alignment block to pre-align a mantissa of the addend with the intermediate product based on the scaling factor and exponents of the addend, multiplier, and multiplicand; and code for causing an accumulator block to accumulate the mantissa of the pre-aligned addend and the intermediate product in an accumulator block to obtain the result of the floating point operation. - View Dependent Claims (11, 12, 13)
-
Specification