IP Library Granted Patent US 11,169,802
Granted Patent B2
US 11,169,802 · App. 16/338,324 · Granted Nov 9, 2021

Systems, apparatuses, and methods for fused multiply add

Inventors: Robert Valentine (Kiryat Tivon, IL); Galina Ryvchin (Haifa, IL); Piotr Majcher (Straszyn, PL); Mark J. Charney (Lexington, MA); Elmoustapha Ould-Ahmed-Vall (Chandler, AZ); Jesus Corbal (King City, OR); Milind B. Girkar (Sunnyvale, CA); Zeev Sperber (Zichron Yackov, IL); Simon Rubanovich (Haifa, IL); Amit Gradstein (Binyamina, IL)
Assignee: Intel Corporation
G06F9/30014G06F7/5443G06F9/30018G06F9/30036G06F9/30105G06F9/3818
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,169,802
App. No.
16/338,324
Granted
Nov 9, 2021
Kind
B2
Abstract

In some embodiments, packed data elements of first and second packed data source operands are of a first, different size than a second size of packed data elements of a third packed data operand. Execution circuitry executes decoded single instruction to perform, for each packed data element position of a destination operand, a multiplication of a M N-sized packed data elements from the first and second packed data sources that correspond to a packed data element position of the third packed data source, add of results from these multiplications to a full-sized packed data element of a packed data element position of the third packed data source, and storage of the addition result in a packed data element position destination corresponding to the packed data element position of the third packed data source, wherein M is equal to the full-sized packed data element divided by N.

Claims (22)

1. An apparatus comprising:

a decoder to decode a single instruction having an opcode, a destination field representing a destination operand, and fields for a first, second, and third packed data source operand, wherein packed data elements of the first and second packed data source operand are of a first, different size than a second size of packed data elements of the third packed data operand;

a register file having a plurality of packed data registers including registers for the source and destination operands; and

execution circuitry to execute the decoded single instruction to perform, for each packed data element position of the destination operand, a multiplication of a M N-sized packed data elements from the first and second packed data sources that correspond to a packed data element position of the third packed data source, add of results from these multiplications to a full-sized packed data element of a packed data element position of the third packed data source, and storage of the addition result in a packed data element position destination corresponding to the packed data element position of the third packed data source, wherein M is equal to the full-sized packed data element divided by N, wherein when the first size is half of the second size, a first addition is performed on each of the multiplications and a second addition is performed on a result of the first addition and a result from a previous iteration.

2. The apparatus of claim 1 , wherein the instruction to define sizes of the packed data elements.

3. The apparatus of claim 1 , wherein the execution circuitry to zero extend packed data elements of the second source and sign extend packed data elements of the first source prior to the multiplications.

4. A method comprising:

hardware decoding a single instruction having an opcode, a destination field representing a destination operand, and fields for a first, second, and third packed data source operand, wherein packed data elements of the first and second packed data source operand are of a first, different size than a second size of packed data elements of the third packed data operand; and

executing the decoded single instruction to perform a multiplication of a M N-sized packed data elements from the first and second packed data sources that correspond to a packed data element position of the third packed data source, add of results from these multiplications to a full-sized packed data element of a packed data element position of the third packed data source, and storage of the addition result in a packed data element position destination corresponding to the packed data element position of the third packed data source, wherein M is equal to the full-sized packed data element divided by N, wherein when the first size is a quarter of the second size, a single addition and saturation check is performed on each of the multiplications a result from a previous iteration.

5. The method of claim 4 , wherein the single instruction to define the first size and the second size.

6. The method of claim 5 , wherein the second size is a multiple of two of the first size.

7. A non-transitory machine-readable medium storing an instruction which when executed by a processor causes the processor to perform a method, the method comprising:

hardware decoding a single instruction having an opcode, a destination field representing a destination operand, and fields for a first, second, and third packed data source operand, wherein packed data elements of the first and second packed data source operand are of a first, different size than a second size of packed data elements of the third packed data operand; and

executing the decoded single instruction to perform a multiplication of a M N-sized packed data elements from the first and second packed data sources that correspond to a packed data element position of the third packed data source, add of results from these multiplications to a full-sized packed data element of a packed data element position of the third packed data source, and storage of the addition result in a packed data element position destination corresponding to the packed data element position of the third packed data source, wherein M is equal to the full-sized packed data element divided by N, wherein when the first size is a quarter of the second size, a first addition is performed on each of the multiplications and a second addition is performed on a result of the first addition and a result from a previous iteration.

8. The non-transitory machine-readable medium of claim 7 , wherein the single instruction to define the first size and the second size.

9. The non-transitory machine-readable medium of claim 8 , wherein the second size is a multiple of two of the first size.

10. A system comprising:

memory to store data; and

a processor comprising:

a decoder to decode a single instruction having an opcode, a destination field representing a destination operand, and fields for a first, second, and third packed data source operand, wherein packed data elements of the first and second packed data source operand are of a first, different size than a second size of packed data elements of the third packed data operand;

a register file having a plurality of packed data registers including registers for the source and destination operands; and

execution circuitry to execute the decoded single instruction to perform, for each packed data element position of the destination operand, a multiplication of a M N-sized packed data elements from the first and second packed data sources that correspond to a packed data element position of the third packed data source, add of results from these multiplications to a full-sized packed data element of a packed data element position of the third packed data source, and storage of the addition result in a packed data element position destination corresponding to the packed data element position of the third packed data source, wherein M is equal to the full-sized packed data element divided by N, wherein when the first size is half of the second size, a first addition is performed on each of the multiplications and a second addition is performed on a result of the first addition and a result from a previous iteration.

Continuity (1)
Related Publication 20200026515A1 · Jan 23, 2020
Cited By (2)
US 12,585,727 US 12,608,201