IP Library Granted Patent US 12,229,554
Granted Patent B2
US 12,229,554 · App. 17/463,405 · Granted Feb 18, 2025

BFLOAT16 fused multiply instructions

Inventors: Alexander Heinecke (San Jose, CA); Menachem Adelman (Haifa, IL); Robert Valentine (Kiryat Tivon, IL); Zeev Sperber (Zikhron Yaakov, IL); Amit Gradstein (Binyamina, IL); Mark Charney (Lexington, MA); Evangelos Georganas (San Mateo, CA); Dhiraj Kalamkar (Bangalore, IN); Christopher Hughes (Santa Clara, CA); Cristina Anderson (Hillsboro, OR)
Assignee: Intel Corporation
G06F9/30014G06F7/5443G06F9/30036G06F9/30038G06F9/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 12,229,554
App. No.
17/463,405
Granted
Feb 18, 2025
Kind
B2
Abstract

Techniques for performing BF16 FMA in response to an instruction are described. In some examples, an instruction has fields for an opcode, an identification of location of a packed data source/destination operand (a first source), an identification of a location of a second packed data source operand, an identification of a location of a third packed data source operand, and an identification of location of a packed data source/destination operand, wherein the opcode is to indicate operand ordering and that execution circuitry is to, per data element position, perform a BF16 value fused multiply-accumulate operation using the first, second, and third source operands and store a result in a corresponding data element position of the source/destination operand.

Claims (36)

1. An apparatus comprising:

decoder circuitry to decode a single instruction, the single instruction to include fields for an opcode, an identification of location of a packed data source/destination operand (a first source), an identification of a location of a second packed data source operand, an identification of a location of a third packed data source operand, and an identification of location of a packed data source/destination operand, wherein the opcode is to indicate operand ordering and that execution circuitry is to, per data element position, perform a BF16 value fused multiply-accumulate operation using the first, second, and third source operands and store a result in a corresponding data element position of the source/destination operand; and

execution circuitry to execute the decoded single instruction according to the opcode.

2. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element position multiplication of the BF16 value from the first source operand with the BF16 value in the third source operand to generate an infinite precision intermediate result, an addition of the infinite precision intermediate result negated to the BF16 values in the second source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

3. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source operand with the BF16 value in the first source operand to generate an infinite precision intermediate result, an addition of the infinite precision intermediate result negated to the BF16 value in the third source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

4. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source to the BF16 value in the third source operand to generate an infinite precision intermediate result, an addition of the infinite precision intermediate result negated to the BF16 value in the first source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

5. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source operand to the BF16 value in the first source operand to generate an infinite precision intermediate result, an addition of a the BF16 value in the third source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

6. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the first source operand to the BF16 value in the third source operand to generate an infinite precision intermediate result, an addition of a the BF16 value in the second source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

7. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source to the BF16 value in the third source operand to generate an infinite precision intermediate result, an addition the BF16 value in the first source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

8. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the first source operand to the BF16 value in the third source operand to generate an infinite precision intermediate result, a subtraction of the infinite precision intermediate result negated to the BF16 value in the second source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

9. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source operand to the BF16 value in the first source operand to generate an infinite precision intermediate result, a subtraction of the infinite precision intermediate result negated to the BF16 value in the third source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

10. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source to the BF16 value in the third source operand to generate an infinite precision intermediate result, a subtraction of the infinite precision intermediate result negated to the BF16 value in the first source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

11. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the first source operand to the BF16 value in the third source operand to generate an infinite precision intermediate result, a subtraction of the BF16 value in the second source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

12. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source operand to the BF16 value in the first source operand to generate an infinite precision intermediate result, a subtraction of the BF16 value in the third source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

13. The apparatus of claim 1 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source to the BF16 value in the third source operand to generate an infinite precision intermediate result, a subtraction of the BF16 value in the first source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

14. The apparatus of claim 1 , wherein the identified first and second source operands are registers.

15. The apparatus of claim 1 , further comprising:

memory to store the single instruction.

16. A method comprising:

decoding a single instruction, the single instruction to include fields for an opcode, an identification of location of a packed data source/destination operand (a first source), an identification of a location of a second packed data source operand, an identification of a location of a third packed data source operand, and an identification of location of a packed data source/destination operand, wherein the opcode is to indicate operand ordering and that execution circuitry is to, per data element position, perform a BF16 value fused multiply-accumulate operation using the first, second, and third source operands and store a result in a corresponding data element position of the source/destination operand; and

executing the decoded single instruction according to the opcode.

17. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element position multiplication of the BF16 value from the first source operand with the BF16 value in the third source operand to generate an infinite precision intermediate result, an addition of the infinite precision intermediate result negated to the BF16 values in the second source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

18. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source operand with the BF16 value in the first source operand to generate an infinite precision intermediate result, an addition of the infinite precision intermediate result negated to the BF16 value in the third source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

19. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source to the BF16 value in the third source operand to generate an infinite precision intermediate result, an addition of the infinite precision intermediate result negated to the BF16 value in the first source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

20. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the first source operand to the BF16 value in the third source operand to generate an infinite precision intermediate result, an addition of a the BF16 value in the second source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

21. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the first source operand to the BF16 value in the second source operand to generate an infinite precision intermediate result, an addition of a the BF16 value in the third source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

22. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source to the BF16 value in the third source operand to generate an infinite precision intermediate result, an addition the BF16 value in the first source operand to generate an infinite precision addition result, and a round of the infinite precision addition result.

23. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the first source operand to the BF16 value in the third source operand to generate an infinite precision intermediate result, a subtraction of the infinite precision intermediate result negated to the BF16 value in the second source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

24. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source operand to the BF16 value in the first source operand to generate an infinite precision intermediate result, a subtraction of the infinite precision intermediate result negated to the BF16 value in the third source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

25. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source to the BF16 value in the third source operand to generate an infinite precision intermediate result, a subtraction of the infinite precision intermediate result negated to the BF16 value in the first source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

26. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the first source operand to the BF16 value in the third source operand to generate an infinite precision intermediate result, a subtraction of the BF16 value in the second source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

27. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source operand to the BF16 value in the first source operand to generate an infinite precision intermediate result, a subtraction of the BF16 value in the third source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

28. The method of claim 16 , wherein the opcode is to indicate the fused multiply accumulation operation is per data element multiplication of the BF16 value from the second source to the BF16 value in the third source operand to generate an infinite precision intermediate result, a subtraction of the BF16 value in the first source operand to generate an infinite precision subtraction result, and a round of the infinite precision addition result.

29. The method of claim 16 , wherein the identified first and second source operands are registers.

30. The method of claim 16 , further comprising:

translating the single instruction to at least one instruction of a different instruction set architecture, wherein executing the decoded single instruction according to the opcode comprises executing the at least one instruction of the different instruction set architecture.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 6, 2022
From: HEINECKE, ALEXANDER; ADELMAN, MENACHEM; VALENTINE, ROBERT; SPERBER, ZEEV; GRADSTEIN, AMIT; CHARNEY, MARK; GEORGANAS, EVANGELOS; KALAMKAR, DHIRAJ; HUGHES, CHRISTOPHER; ANDERSON, CRISTINA
To: INTEL CORPORATION
Reel/Frame 058583/0749 →
Continuity (1)
Related Publication 20230067810A1 · Mar 2, 2023
References Cited (42)
US 4815021A · Steiner et al. · 1989 [cited by applicant]
US 11182337B1 · Maiyuran · 2021 [cited by examiner]
US 11204977B2 · Maiyuran · 2021 [cited by examiner]
US 11714998B2 · Abuhatzera · 2023 [cited by examiner]
US 20030018676A1 · Shaw · 2003 [cited by applicant]
US 20110047358A1 · Eichenberger et al. · 2011 [cited by applicant]
US 20140067894A1 · Plondke et al. · 2014 [cited by applicant]
US 20150088946A1 · Anderson et al. · 2015 [cited by applicant]
US 20160224512A1 · Moudgill et al. · 2016 [cited by applicant]
US 20190079768A1 · Heinecke · 2019 [cited by examiner]
US 20190303743A1 · Venkataramani · 2019 [cited by examiner]
US 20190384575A1 · Hickmann et al. · 2019 [cited by applicant]
US 20200184309A1 · Patel · 2020 [cited by applicant]
US 20200371794A1 · Zbiciak et al. · 2020 [cited by applicant]
US 20200371805A1 · Lutz · 2020 [cited by applicant]
US 20210049463A1 · Ruff · 2021 [cited by examiner]
US 20210117194A1 · Heinecke · 2021 [cited by examiner]
US 20210157589A1 · Heinecke et al. · 2021 [cited by applicant]
US 20220107805A1 · Gore · 2022 [cited by examiner]
US 20220121727A1 · Hong et al. · 2022 [cited by applicant]
US 20220365751A1 · Varma · 2022 [cited by examiner]
CN 112199119A · 2021 [cited by applicant]
EP 3796154A1 · 2021 [cited by examiner]
GB 2186105A · 1987 [cited by applicant]
WO 2008036946A1 · 2008 [cited by applicant]
WO 2020190814A1 · 2020 [cited by applicant]
Office Action , EP App. No. 22185939.0, Aug. 22, 2023, 05 pages. [cited by applicant]
Office Action , EP App. No. 22185990.3, Aug. 22, 2023, 05 pages. [cited by applicant]
Wikipedia, “bfloat16 floating-point format”, available online at <https://en.wikipedia_org/w/index.php?title=Bfloat16_floating-point_format&oldid=1033549871>, Jul. 14, 2021, 4 pages. [cited by applicant]
Decision to grant, EP App. No. 22183762.8, Feb. 15, 2024, 2 pages. [cited by applicant]
Intention to grant, EP App. No. 22183762.8, Oct. 11, 2023, 7 pages. [cited by applicant]
Intel, “Intel® Architecture Instruction Set Extensions and Future Features Programming Reference”, Reference No. 319433-032, Jan. 2018, 137 pages. [cited by applicant]
Notification of Oral Proceeding, EP App. No. 22185990.3, Mar. 22, 2024, 9 pages. [cited by applicant]
European Search Report and Search Opinion, EP App. No. 22188067.7, Jan. 25, 2023, 12 pages. [cited by applicant]
European Search Report and Search Opinion, EP App. No. 22188069.3, Jan. 25, 2023, 10 pages. [cited by applicant]
European Search Report and Search Opinion, EP App. No. 22188079.2, Jan. 25, 2023, 10 pages. [cited by applicant]
Notification of Publication of Patent Application for Invention, CN App. No. 202210866252.7, Mar. 8, 2023, 3 pages (1 page of English Translation and 2 pages of Original Document). [cited by applicant]
European Search Report and Search Opinion, EP App. No. 22185939.0, Jan. 20, 2023, 9 pages. [cited by applicant]
European Search Report and Search Opinion, EP App. No. 22185990.3, Jan. 20, 2023, 10 pages. [cited by applicant]
Extended European Search Report and Search Opinion for Application No. 22183762.8, Dec. 21, 2022, 9 pages. [cited by applicant]
Intel, “Intel (registered) 64 and IA-32 Architectures Software Developer's Manual”, vol. 2 (2A, 2B & 2C): Instruction Set Reference, A-Z, Order No. 325383-055US, Jun. 2015, 1011 pages. [cited by applicant]
Intel, “Intel® Architecture Instruction Set Extensions Programming Reference”, Order No. 319433-023, Aug. 1, 2015, 1178 pages. [cited by applicant]