IP Library › Granted Patent US 11,256,504
Granted Patent B2
US 11,256,504 · App. 15/721,448 · Granted Feb 22, 2022

Apparatus and method for complex by complex conjugate multiplication

Inventors: Venkateswara Madduri (Austin, TX); Elmoustapha Ould-Ahmed-Vall (Chandler, AZ); Jesus Corbal (King City, OR); Mark Charney (Lexington, MA); Robert Valentine (Kiryat Tivon, IL); Binwei Yang (Austin, TX)
Assignee: Intel Corporation
G06F9/30036G06F9/3001G06F9/30105
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,256,504
App. No.
15/721,448
Granted
Feb 22, 2022
Kind
B2
Abstract

An apparatus and method for multiplying packed real and imaginary components of complex numbers are described. A processor embodiment includes: a decoder to decode a first instruction to generate a decoded instruction; a first source register to store a first plurality of packed real and imaginary data elements; a second source register to store a second plurality of packed real and imaginary data elements; and execution circuitry to execute the decoded instruction. The execution circuitry includes: multiplier circuitry to select real and imaginary data elements in the first source register and second source, multiply each selected imaginary data element in the first source register with a selected real data element in the second source register, and multiply each selected real data element in the first source register with a selected imaginary data element in the second source register to generate a plurality of imaginary products; adder circuitry to add a first subset of the plurality of imaginary products and subtract a second subset of the plurality of imaginary products to generate a first temporary result, and to add a third subset of the plurality of imaginary products and subtract a fourth subset of the plurality of imaginary products to generate a second temporary result; and accumulation circuitry to combine the first temporary result with first data from a destination register to generate a first final result, combine the second temporary result with second data from the destination register to generate a second final result, and store the first final result and second final result back in the destination register.

Claims (63)

1. A processor comprising:

a hardware decoder to decode a first instruction to generate a decoded instruction;

a first source register to store a first plurality of packed real and imaginary data elements comprising a first plurality of complex numbers;

a second source register to store a second plurality of packed real and imaginary data elements comprising a second plurality of complex numbers, wherein each of the second plurality of complex numbers comprises a complex conjugate of a corresponding complex number of the first plurality of complex numbers;

a plurality of temporary registers, including first, second, third, and fourth temporary registers;

and

execution circuitry to execute the decoded instruction, the execution circuitry comprising:

at least one hardware multiplier to select real and imaginary data elements in the first source register and second source register to multiply, the at least one hardware multiplier to multiply each selected imaginary data element in the first source register with a selected real data element in the second source register, and to multiply each selected real data element in the first source register with a selected imaginary data element in the second source register to generate a plurality of imaginary products;

at least one hardware adder network to add a first subset of the plurality of imaginary products and subtract a second subset of the plurality of imaginary products to generate a first temporary result and to add a third subset of the plurality of imaginary products and subtract a fourth subset of the plurality of imaginary products to generate a second temporary result, the at least one hardware adder network further to store the first temporary result in the first temporary register and store the second temporary result in the second temporary register;

negation circuitry to negate the first temporary result to generate a first negated temporary result, and to negate the second temporary result to generate a second negated temporary result, the negation circuitry further to store the first negated temporary result in the third temporary register and store the second negated temporary result in the fourth temporary register; and

accumulation circuitry to combine the first negated temporary result with first data from a destination register to generate a first final result and to combine the second negated temporary result with second data from the destination register to generate a second final result and to store the first final result and second final result back in the destination register.

2. The processor of claim 1 wherein the first and second plurality of packed real and imaginary data elements are stored as 16-bit data elements in the first and second source registers, each imaginary data element being stored in a data element location adjacent to a data element location of its corresponding real data element, each combination of a real and imaginary data element representing a complex number.

3. The processor of claim 2 wherein the first and second source registers comprise 128-bit packed data registers configurable with data element positions A, B, C, D, E, F, G, and H storing data elements A, B, C, D, E, F, G, and H, respectively, and wherein data elements A, C, E, and G are real data elements and data elements B, D, F, and H are corresponding imaginary data elements.

4. The processor of claim 3 wherein to execute the decoded instruction, the at least one hardware multiplier is to perform the multiplications S 1 C*S 2 D, S 1 D*S 2 C, S 1 A*S 2 B, S 1 B*S 2 A, S 1 G*S 2 H, S 1 H*S 2 G, S 1 E*S 2 F, S 1 F*S 2 E to generate the plurality of imaginary products, where S 1 identifies the first source register, S 2 identifies the second source register and A-H identify the packed data elements in data element positions A-H in the first and second source registers, respectively.

5. The processor of claim 4 wherein adding and subtracting the first and second subsets of the plurality of imaginary products, respectively, comprises S 1 C*S 2 D−S 1 D*S 2 C+S 1 A*S 2 B−S 1 B*S 2 A and adding and subtracting of the third and fourth subsets of the plurality of imaginary products, respectively, comprises S 1 G*S 2 H−S 1 H*S 2 G+S 1 E*S 2 F−S 1 F*S 2 E to generate the first temporary result and second temporary result, respectively.

6. The processor of claim 5 further comprising:

extension circuitry to zero-extend or sign-extend a third temporary result and fourth temporary result to 64-bit values prior to accumulation with the first and second data from the destination register, respectively.

7. The processor of claim 6 wherein the negation circuitry is to perform two's complement negation on the first temporary result and second temporary result.

8. The processor of claim 6 wherein the extension circuitry is to add zeroes to the first temporary result and second temporary result.

9. The processor of claim 6 wherein a value in a most significant bit position of the first temporary result and second temporary result is repeated a number of times to convert the first temporary result and second temporary result to 64-bit values.

10. A method comprising:

decoding a first instruction to generate a decoded instruction;

storing a first plurality of packed real and imaginary data elements in a first source register, the first plurality of packed real and imaginary data elements comprising a first plurality of complex numbers;

storing a second plurality of packed real and imaginary data elements in a second source register, the second plurality of packed real and imaginary data elements comprising a second plurality of complex numbers, wherein each of the second plurality of complex numbers comprises a complex conjugate of a corresponding complex number of the first plurality of complex numbers;

selecting real and imaginary data elements in the first source register and second source register to multiply;

multiplying each selected imaginary data element in the first source register with a selected real data element in the second source register, and multiplying each selected real data element in the first source register with a selected imaginary data element in the second source register to generate a plurality of imaginary products;

adding a first subset of the plurality of imaginary products and subtracting a second subset of the plurality of imaginary products to generate a first temporary result and adding a third subset of the plurality of imaginary products and subtracting a fourth subset of the plurality of imaginary products to generate a second temporary result;

storing the first temporary result in a first temporary register and storing the second temporary result in a second temporary register;

negating the first temporary result to generate a first negated temporary result, and negating the second temporary result to generate a second negated temporary result;

storing the first negated temporary result in a third temporary register and storing the second negated temporary result in a fourth temporary register;

accumulating the first negated temporary result with first data from a destination register to generate a first final result and accumulating the second negated temporary result with second data from the destination register to generate a second final result; and

storing the first final result and second final result back in the destination register.

11. The method of claim 10 wherein the first and second plurality of packed real and imaginary data elements are stored as 16-bit data elements in the first and second source registers, each imaginary data element being stored in a data element location adjacent to a data element location of its corresponding real data element, each combination of a real and imaginary data element representing a complex number.

12. The method of claim 11 wherein the first and second source registers comprise 128-bit packed data registers configurable with data element positions A, B, C, D, E, F, G, and H storing data elements A, B, C, D, E, F, G, and H, respectively, and wherein data elements A, C, E, and G are real data elements and data elements B, D, F, and H are corresponding imaginary data elements.

13. The method of claim 12 wherein multiplying each selected imaginary data element in the first source register with a selected real data element in the second source register, and multiplying each selected real data element in the first source register with a selected imaginary data element in the second source register to generate a plurality of imaginary products further comprises:

multiplying S 1 C*S 2 D, S 1 D*S 2 C, S 1 A*S 2 B, S 1 B*S 2 A, S 1 G*S 2 H, S 1 H*S 2 G, S 1 E*S 2 F, S 1 F*S 2 E to generate the plurality of imaginary products, where S 1 identifies the first source register, S 2 identifies the second source register and A-H identify the packed data elements in data element positions A-H in the first and second source registers, respectively.

14. The method of claim 13 wherein adding of the first subset of the plurality of imaginary products and subtracting of the second subset of the plurality of imaginary products comprise S 1 C*S 2 D−S 1 D*S 2 C+S 1 A*S 2 B−S 1 B*S 2 A and adding of the third subset of the plurality of imaginary products and subtracting of the fourth subset of the plurality of imaginary products comprise S 1 G*S 2 H−S 1 H*S 2 G+S 1 E*S 2 F−S 1 F*S 2 E to generate the first temporary result and second temporary result, respectively.

15. The method of claim 14 further comprising:

zero-extending or sign-extending a third temporary result and fourth temporary result to 64-bit values prior to accumulation with the first and second data from the destination register, respectively.

16. The method of claim 15 wherein two's complement negation is performed on the first temporary result and second temporary result.

17. The method of claim 15 wherein zeroes are added to the first temporary result and second temporary result.

18. The method of claim 15 wherein a value in a most significant bit position of the first temporary result and second temporary result is repeated a number of times to convert the first temporary result and second temporary result to 64-bit values.

19. A non-transitory machine-readable medium, not being a signal per se, having program code stored thereon which, when executed by a machine, causes the machine to perform the operations of:

decoding a first instruction to generate a decoded instruction;

storing a first plurality of packed real and imaginary data elements in a first source register, the first plurality of packed real and imaginary data elements comprising a first plurality of complex numbers;

storing a second plurality of packed real and imaginary data elements in a second source register, the second plurality of packed real and imaginary data elements comprising a second plurality of complex numbers, wherein each of the second plurality of complex numbers comprises a complex conjugate of a corresponding complex number of the first plurality of complex numbers;

selecting real and imaginary data elements in the first source register and second source register to multiply,

multiplying each selected imaginary data element in the first source register with a selected real data element in the second source register, and multiplying each selected real data element in the first source register with a selected imaginary data element in the second source register to generate a plurality of imaginary products,

adding a first subset of the plurality of imaginary products and subtracting a second subset of the plurality of imaginary products to generate a first temporary result and adding a third subset of the plurality of imaginary products and subtracting a fourth subset of the plurality of imaginary products to generate a second temporary result;

storing the first temporary result in a first temporary register and storing the second temporary result in a second temporary register;

negating the first temporary result to generate a first negated temporary result, and negating the second temporary result to generate a second negated temporary result;

storing the first negated temporary result in a third temporary register and storing the second negated temporary result in a fourth temporary register;

accumulating the first negated temporary result with first data from a destination register to generate a first final result and accumulating the second negated temporary result with second data from the destination register to generate a second final result; and

storing the first final result and second final result back in the destination register.

20. The non-transitory machine-readable medium of claim 19 wherein the first and second plurality of packed real and imaginary data elements are stored as 16-bit data elements in the first and second source registers, each imaginary data element being stored in a data element location adjacent to a data element location of its corresponding real data element, each combination of a real and imaginary data element representing a complex number.

21. The non-transitory machine-readable medium of claim 20 wherein the first and second source registers comprise 128-bit packed data registers configurable with data element positions A, B, C, D, E, F, G, and H storing data elements A, B, C, D, E, F, G, and H, respectively, and wherein data elements A, C, E, and G are real data elements and data elements B, D, F, and H are corresponding imaginary data elements.

22. The non-transitory machine-readable medium of claim 21 wherein multiplying each selected imaginary data element in the first source register with a selected real data element in the second source register, and multiplying each selected real data element in the first source register with a selected imaginary data element in the second source register to generate a plurality of imaginary products further comprises:

multiplying S 1 C*S 2 D, S 1 D*S 2 C, S 1 A*S 2 B, S 1 B*S 2 A, S 1 G*S 2 H, S 1 H*S 2 G, S 1 E*S 2 F, S 1 F*S 2 E to generate the plurality of imaginary products, where S 1 identifies the first source register, S 2 identifies the second source register and A-H identify the packed data elements in data element positions A-H in the first and second source registers, respectively.

23. The non-transitory machine-readable medium of claim 22 wherein adding of the first subset of the plurality of imaginary products and subtracting of the second subset of the plurality of imaginary products comprise S 1 C*S 2 D−S 1 D*S 2 C+S 1 A*S 2 B−S 1 B*S 2 A and adding of the third subset of the plurality of imaginary products and subtracting of the fourth subset of the plurality of imaginary products comprise S 1 G*S 2 H−S 1 H*S 2 G+S 1 E*S 2 F−S 1 F*S 2 E to generate the first temporary result and second temporary result, respectively.

24. The non-transitory machine-readable medium of claim 23 further comprising program code to cause the machine to perform the operations of:

zero-extending or sign-extending a third temporary result and fourth temporary result to 64-bit values prior to accumulation with the first and second data from the destination register, respectively.

25. The non-transitory machine-readable medium of claim 24 wherein two's complement negation is performed on the first temporary result and second temporary result.

26. The non-transitory machine-readable medium of claim 24 wherein zeroes are added to the first temporary result and second temporary result.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 10, 2019
From: MADDURI, VENKATESWARA; OULD-AHMED-VALL, ELMOUSTAPHA; CORBAL, JESUS; CHARNEY, MARK; VALENTINE, ROBERT; YANG, BINWEI
To: INTEL CORPORATION
Reel/Frame 047958/0610 →
Continuity (1)
Related Publication 20190102193A1 · Apr 4, 2019
Cited By (3)
US 12,307,370 US 12,585,727 US 12,699,873