IP Library › Granted Patent US 11,163,563
Granted Patent B2
US 11,163,563 · App. 16/614,118 · Granted Nov 2, 2021

Systems, apparatuses, and methods for dual complex multiply add of signed words

Inventors: Elmoustapha Ould-Ahmed-Vall (Chandler, AZ); Venkateswara R. Madduri (Austin, TX); Mark J. Charney (Lexington, MA); Robert Valentine (Kiryat Tivon, IL)
Assignee: Intel Corporation
G06F9/3001G06F7/5443G06F9/30145
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,163,563
App. No.
16/614,118
Granted
Nov 2, 2021
Kind
B2
Abstract

Embodiments of systems, apparatuses, and methods for dual complex number multiplication and addition in a processor are described. For example, execution circuitry executes a decoded instruction to multiplex data values from positions in source operands to a multiplier, the source operands including pairs complex numbers, calculate a real part of a product of each pair of complex numbers, add the real part of the product of a first pair of complex numbers to the real part of the product of a second pair of complex numbers to calculate a first real result, and add the real part of the product of a third pair of complex numbers to the real part of the product of a fourth pair of complex numbers to calculate a second real result, and store the results to corresponding positions in the destination operand.

Claims (63)

1. An apparatus comprising:

a decoder to decode an instruction having fields for a first and a second packed data source operand, and a packed data destination operand, and

execution circuitry to execute the decoded instruction to:

multiplex data values from a plurality of packed data element positions in the first and second packed data source operands to at least one multiplier circuit, the first and second packed data source operands including a plurality of pairs complex numbers, each pair of complex numbers including data values at shared packed data element positions in the first and second packed data source operands,

calculate a real part of a product of each pair of complex numbers and output the real part of the product of each pair of complex numbers to an adder network,

add the real part of the product of a first pair of complex numbers to the real part of the product of a second pair of complex numbers to calculate a first real result, and add the real part of the product of a third pair of complex numbers to the real part of the product of a fourth pair of complex numbers to calculate a second real result, and

store the first real result to a first packed data element position in the destination operand and store the second real result to a second packed data element position in the destination operand.

2. The apparatus of claim 1 , wherein the first packed data source operand is a packed data register and the second packed data source operand is a memory location.

3. The apparatus of claim 1 , wherein the first packed data source operand is a packed data register and the second packed data source operand is a packed data register.

4. The apparatus of claim 1 , wherein to calculate a real part of a product of each pair of complex numbers the execution circuitry is further to:

multiply a real part of each complex number of the first packed data source operand by a real part of each corresponding complex number of the second packed data source operand to generate a first plurality of products;

multiply an imaginary part of each complex number of the first packed data source operand by an imaginary part of each complex number of the second packed data source operand to generate a second plurality of products; and

subtract each of the second plurality of products from a corresponding product of the first plurality of products to generate the real part of the product of each pair of complex numbers.

5. The apparatus of claim 1 , wherein the packed data destination operand is a packed data register and the first packed data element position is a lower 64 bits of the packed data register and the second packed data element position is an upper 64 bits of the packed data register.

6. The apparatus of claim 1 , wherein the decoder is further to decode a second instruction having fields for the first and the second packed data source operand, and a second packed data destination operand, and wherein the execution circuitry is further to execute the decoded second instruction to:

multiplex the data values from the plurality of packed data element positions in the first and second packed data source operands to the at least one multiplier circuit, the first and second packed data source operands including the plurality of pairs complex numbers,

calculate an imaginary part of a product of each pair of complex numbers and output the imaginary part of the product of each pair of complex numbers to the adder network,

add the imaginary part of the product of a first pair of complex numbers to the imaginary part of the product of a second pair of complex numbers to calculate a first imaginary result, and add the imaginary part of the product of a third pair of complex numbers to the imaginary part of the product of a fourth pair of complex numbers to calculate a second imaginary result, and

store the first imaginary result to the first packed data element position in the destination operand and store the second imaginary result to the second packed data element position in the destination operand.

7. A method comprising:

decoding an instruction having fields for a first and a second packed data source operand, and a packed data destination operand, and

executing the decoded instruction, by execution circuitry, to:

multiplex data values from a plurality of packed data element positions in the first and second packed data source operands to at least one multiplier circuit, the first and second packed data source operands including a plurality of pairs complex numbers, each pair of complex numbers including data values at shared packed data element positions in the first and second packed data source operands,

calculate a real part of a product of each pair of complex numbers and output the real part of the product of each pair of complex numbers to an adder network,

add the real part of the product of a first pair of complex numbers to the real part of the product of a second pair of complex numbers to calculate a first real result, and add the real part of the product of a third pair of complex numbers to the real part of the product of a fourth pair of complex numbers to calculate a second real result, and

store the first real result to a first packed data element position in the destination operand and store the second real result to a second packed data element position in the destination operand.

8. The method of claim 7 , wherein the first packed data source operand is a packed data register and the second packed data source operand is a memory location.

9. The method of claim 7 , wherein the first packed data source operand is a packed data register and the second packed data source operand is a packed data register.

10. The method of claim 7 , wherein to calculate a real part of a product of each pair of complex numbers the execution circuitry is further to:

multiply a real part of each complex number of the first packed data source operand by a real part of each corresponding complex number of the second packed data source operand to generate a first plurality of products;

multiply an imaginary part of each complex number of the first packed data source operand by an imaginary part of each complex number of the second packed data source operand to generate a second plurality of products; and

subtract each of the second plurality of products from a corresponding product of the first plurality of products to generate the real part of the product of each pair of complex numbers.

11. The method of claim 7 , wherein the packed data destination operand is a packed data register and the first packed data element position is a lower 64 bits of the packed data register and the second packed data element position is an upper 64 bits of the packed data register.

12. The method of claim 7 , further comprising:

decoding a second instruction having fields for the first and the second packed data source operand, and a second packed data destination operand; and

executing the decoded second instruction to:

multiplex the data values from the plurality of packed data element positions in the first and second packed data source operands to the at least one multiplier circuit, the first and second packed data source operands including the plurality of pairs complex numbers,

calculate an imaginary part of a product of each pair of complex numbers and output the imaginary part of the product of each pair of complex numbers to the adder network,

add the imaginary part of the product of a first pair of complex numbers to the imaginary part of the product of a second pair of complex numbers to calculate a first imaginary result, and add the imaginary part of the product of a third pair of complex numbers to the imaginary part of the product of a fourth pair of complex numbers to calculate a second imaginary result, and

store the first imaginary result to the first packed data element position in the destination operand and store the second imaginary result to the second packed data element position in the destination operand.

13. The method of claim 7 , wherein the decoded instruction and the decoded second instruction are executed in a loop and the packed data destination operand and second packed data destination operand are different packed data registers.

14. 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:

decoding an instruction having fields for a first and a second packed data source operand, and a packed data destination operand, and

executing the decoded instruction, by execution circuitry, to:

multiplex data values from a plurality of packed data element positions in the first and second packed data source operands to at least one multiplier circuit, the first and second packed data source operands including a plurality of pairs complex numbers, each pair of complex numbers including data values at shared packed data element positions in the first and second packed data source operands,

calculate a real part of a product of each pair of complex numbers and output the real part of the product of each pair of complex numbers to an adder network,

add the real part of the product of a first pair of complex numbers to the real part of the product of a second pair of complex numbers to calculate a first real result, and add the real part of the product of a third pair of complex numbers to the real part of the product of a fourth pair of complex numbers to calculate a second real result, and

store the first real result to a first packed data element position in the destination operand and store the second real result to a second packed data element position in the destination operand.

15. The non-transitory machine-readable medium of claim 14 , wherein the first source packed data operand is a packed data register and the second source packed data operand is a memory location.

16. The non-transitory machine-readable medium of claim 14 , wherein the first source packed data operand is a packed data register and the second source packed data operand is a packed data register.

17. The non-transitory machine-readable medium of claim 14 , wherein to calculate a real part of a product of each pair of complex numbers the execution circuitry is further to:

multiply a real part of each complex number of the first packed data source operand by a real part of each corresponding complex number of the second packed data source operand to generate a first plurality of products;

multiply an imaginary part of each complex number of the first packed data source operand by an imaginary part of each complex number of the second packed data source operand to generate a second plurality of products; and

subtract each of the second plurality of products from a corresponding product of the first plurality of products to generate the real part of the product of each pair of complex numbers.

18. The non-transitory machine-readable medium of claim 14 , wherein the packed data destination operand is a packed data register and the first packed data element position is a lower 64 bits of the packed data register and the second packed data element position is an upper 64 bits of the packed data register.

19. The non-transitory machine-readable medium of claim 14 , wherein the method further comprises:

decoding a second instruction having fields for the first and the second packed data source operand, and a second packed data destination operand; and

executing the decoded second instruction to:

multiplex the data values from the plurality of packed data element positions in the first and second packed data source operands to the at least one multiplier circuit, the first and second packed data source operands including the plurality of pairs complex numbers,

calculate an imaginary part of a product of each pair of complex numbers and output the imaginary part of the product of each pair of complex numbers to the adder network,

add the imaginary part of the product of a first pair of complex numbers to the imaginary part of the product of a second pair of complex numbers to calculate a first imaginary result, and add the imaginary part of the product of a third pair of complex numbers to the imaginary part of the product of a fourth pair of complex numbers to calculate a second imaginary result, and

store the first imaginary result to the first packed data element position in the destination operand and store the second imaginary result to the second packed data element position in the destination operand.

20. The non-transitory machine-readable medium of claim 14 , wherein the decoded instruction and the decoded second instruction are executed in a loop and the packed data destination operand and second packed data destination operand are different packed data registers.

Continuity (1)
Related Publication 20210157580A1 · May 27, 2021