FMA4 instruction set hidden, but is working on AMD Zen processors





In an interesting find, it has been discovered that AMD processors based on ZEN architecture actually support the latest iteration of FMA, the FMA4-instruction set. The theory is that the FMA3 supplement instruction set would have been disabled for unknown reasons, however as it seems, it at the very least is partially working and active.
FMA is short for fused multiply-add and was added to the 2012 AMD FX series processors and have seen iteration changes leading up-tp FMA 3 and FMA4. FMA is a floating-point multiply-add operation performed in a single step, with a single rounding. It is the equivalent of the Intel AVX AVX instruction set, but more efficient and FMA4 should be really fast. Officially FMA4 is 33% faster than FMA3, however, it is not supported in the operating system, likely it was left disabled due to bugs or perhaps stability issues as hey, there is a primary reason for it to remain disabled.
As it now seems, Level1Techs tested this with Zen processors by running an adapted script that sends FMA4 instructions to the processor. The FMA4 task fired off at the processor surprisingly did not get refused and got executed successfully. It's an interesting find. Meanwhile, CPUID still states it is not supported/detected.
Senior Member
Posts: 2352
Joined: 2012-04-16
There's the full in depth video on the subject. I just love the guys over at Level1Techs.
They're very open and knowledgeable. Also their weekly news episodes makes me giggle like a girl.
Don Vito Corleone
Posts: 36460
Joined: 2000-02-22
In real-world code there really is no huge performance difference between FMA3 and FMA4, certainly not anything on the scale of 33%. Not sure where that number even comes from. 4 = 3 + 33%? :p
The comparisons in Wendells video are of AVX vs FMA4, not accounting for FMA3.
No, FMA4 has 33% higher throughput, because it processes four operands per instruction instead of three.
Senior Member
Posts: 5898
Joined: 2010-10-17
So Zen could potentially be even faster than it already is???
Senior Member
Posts: 428
Joined: 2010-05-12
in very narrow and particular scenarios where you need tons of multiply add and someone writing software enabled this feature, yes
Senior Member
Posts: 108
Joined: 2016-10-04
AMD knows only why FMA4 isn't activated. Also is not instruction set but a single instruction doing calculations.
Maybe because Intel doesn't support FMA3, AMD decided not to "officially" do anything about this either. Or there are issues with the results returned on Ryzen 1xxxx series.
Senior Member
Posts: 5898
Joined: 2010-10-17
AMD knows only why FMA4 isn't activated. Also is not instruction set but a single instruction doing calculations.
Maybe because Intel doesn't support FMA3, AMD decided not to "officially" do anything about this either. Or there are issues with the results returned on Ryzen 1xxxx series.
Could be any number of things.
Senior Member
Posts: 618
Joined: 2015-05-19
No, thats not how it works. Both FMA3 and FMA4 calculate the same thing, its always "a * b + c". 3 input operands. The only difference between FMA3 and FMA4 is where the result is being stored.
In FMA3, you have to store the result in one of the input operands, its called a "destructive" instruction, because it overwrites one of the inputs.
In FMA4, you have a separate output register, a 4th operand, so its "non-destructive".
If you wanted to simplify it, you could look at it like this:
FMA3: a = a * b + c (3 operands)
FMA4: d = a * b + c (4 operands)
The math is exactly the same, it saves you the same number of operations, only the location of the result differs.
This difference can have advantages in some algorithms, but in modern CPUs and the majority of algorithms, the impact from this difference is marginal at best, thanks to features like register renaming. An additional "move" instruction to copy the data into an additional register is often extremely cheap - if its even needed in the algorithm in question.
Senior Member
Posts: 1407
Joined: 2015-06-11
This is an old news. Moreover seems that using FMA4 under Zen gives wrong results: https://translate.google.it/translate?hl=it&sl=de&tl=en&u=http://www.planet3dnow.de/vbulletin/threads/421433-AMD-Zen-14nm-8-Kerne-95W-TDP-DDR4?p=5147746&viewfull=1
AMD knows only why FMA4 isn't activated. Also is not instruction set but a single instruction doing calculations.
Maybe because Intel doesn't support FMA3, AMD decided not to "officially" do anything about this either. Or there are issues with the results returned on Ryzen 1xxxx series.
Intel supports FMA3 since Haswell.
Senior Member
Posts: 3878
Joined: 2018-03-21
This is an old news. Moreover seems that using FMA4 under Zen gives wrong results: https://translate.google.it/translate?hl=it&sl=de&tl=en&u=http://www.planet3dnow.de/vbulletin/threads/421433-AMD-Zen-14nm-8-Kerne-95W-TDP-DDR4?p=5147746&viewfull=1
Intel supports FMA3 since Haswell.
Very very old news.
https://www.agner.org/optimize/blog/read.php?i=838
news should be reworded to "in a video that could only be considered clickbaiting, level1techs has reported on something we already knew a year ago"
Senior Member
Posts: 618
Joined: 2015-05-19
In real-world code there really is no huge performance difference between FMA3 and FMA4, certainly not anything on the scale of 33%. Not sure where that number even comes from. 4 = 3 + 33%? :p
The comparisons in Wendells video are of AVX vs FMA4, not accounting for FMA3.