Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What is the relationship between GMACs and GFLOPs? #16

Open
nizhenliang opened this issue Aug 6, 2019 · 19 comments
Open

What is the relationship between GMACs and GFLOPs? #16

nizhenliang opened this issue Aug 6, 2019 · 19 comments
Labels
question Further information is requested

Comments

@nizhenliang
Copy link

Why use the GMACs?GMACs is different with GFLOPs.

@sovrasov
Copy link
Owner

sovrasov commented Aug 6, 2019

Most of modern hardware architectures uses FMA instructions for operations with tensors.
FMA computes a*x+b as one operation. Roughly GMACs = 0.5 * GFLOPs

@nizhenliang
Copy link
Author

Thank you, sir! Whether the output value is directly FLOPs? Do we need to divide it by 2 to get FLOPs?

@XavierCHEN34
Copy link

what does MAC stands for? Multi-Add Calculation?

@sovrasov
Copy link
Owner

MAC = Multiply–accumulate operation

@snownus
Copy link

snownus commented Dec 19, 2019

I think GFLOPs = 2 * GMACs as general each MAC contains one multiplication and one addition.

@chnadell
Copy link

Roughly GMACs = 2 * GFLOPs

@sovrasov is there a typo here? I did a little reading and it seems that @snownus has it right. In general a multiply-accumulate is one multiplication and one addition, which can each be floating point operations. So 1 GMAC counts as 2 GFLOPs, meaning GMACs = .5 * GFLOPs (I'm not sure if this is what was already meant).

As for fused multiply-add (FMA) it seems that (if it is supported on a given chip/system) the two FLOPs are indeed computed "in a single step" (see here) or "at once" (see here). But this confuses our conversion. Perhaps in the case of FMA it is more accurate to say 1 GMACs = 1 GFLOPs? Hopefully someone with more expertise than me can clarify!

@sovrasov
Copy link
Owner

@chnadell yes, you're right! @snownus also figured it out. I'll edit the first post to avoid any future confusions.

@cassie101
Copy link

@sovrasov, in this case would you consider changing the variable flops to mac to avoid confusion?

flops, params = get_model_complexity_info(net, (3, 224, 224),

@sovrasov
Copy link
Owner

@cassie101 makes sense, I'll change it

@code-by-jin
Copy link

Thank you, sir! Whether the output value is directly FLOPs? Do we need to divide it by 2 to get FLOPs?

I am also confused. Shouldn't we multiply it by 2 to get FLOPs?

@sovrasov
Copy link
Owner

@code-by-jin yes, exactly, we should multiply GMACS by 2 to get FLOPS

@code-by-jin
Copy link

@code-by-jin yes, exactly, we should multiply GMACS by 2 to get FLOPS

Thanks for your response. I checked ResNet-50 using your tool. It has around 4 GMACS, which is close to the number of FLOPS claimed in the resnet paper. Now I am confused, do I really need to multiply your output GMACS by two?

@sovrasov
Copy link
Owner

In the original resnet paper authors mixed up macs and flops. As far as I remember, they provided a definition of flops that considers one flop as multiply & add operation. Please check up the paper, correct me if I'm wrong.

@zyxjtu
Copy link

zyxjtu commented Feb 11, 2022

Most of modern hardware architectures uses FMA instructions for operations with tensors. FMA computes a*x+b as one operation. Roughly GMACs = 0.5 * GFLOPs

hi, I've never seen GMACs like this before, it means 10^9 about macs? As far as I know the capital letter before the word is related to FLOPS, not FLOPs and MACs, which is easy to confuse me. Looking forward to your reply, thx

@cmj18
Copy link

cmj18 commented Feb 27, 2022

GMACs = 2 * GFLOPs, because MACs includes addition and multiplication operation, GFLOPs only has add operation.

@jerryli1981
Copy link

It isn't always true that GMACs = 2 * GFLOPs. For example, two models with the same the GMACS, may have very difference GFLOPS. It depends how you implement model efficiently

@drcege
Copy link

drcege commented Apr 13, 2022

@cmj18 @jerryli1981
No, it should be GFLOPs = 2 * GMACs.
MACs stands for multiply–accumulate operation that performs a <- a + (b x c)(they are counted as one operation)
FLOPs is abbreviation of floating operations which includes mul / add / div ... etc. (each is separately counted as a single floating operation)

@minecraftdixit
Copy link

I want to know is there any relation between GOPS(Giga operations per second ) and GFLOPS ,like if i know GFLOPS then ,can i determine GOPS , or are they independent ??

@sovrasov
Copy link
Owner

GOPS is a characteristic of hardware, it can only be determined by measurements. ptflops just shows an approximation to theoretical amount of operations required for one forward pass. Time is not considered by ptflops.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests