flops-counter.pytorch icon indicating copy to clipboard operation
flops-counter.pytorch copied to clipboard

What is the relationship between GMACs and GFLOPs?

Open nizhenliang opened this issue 5 years ago • 19 comments

Why use the GMACs?GMACs is different with GFLOPs.

nizhenliang avatar Aug 06 '19 07:08 nizhenliang

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

sovrasov avatar Aug 06 '19 09:08 sovrasov

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

nizhenliang avatar Aug 06 '19 12:08 nizhenliang

what does MAC stands for? Multi-Add Calculation?

XavierCHEN34 avatar Sep 10 '19 10:09 XavierCHEN34

MAC = Multiply–accumulate operation

sovrasov avatar Sep 10 '19 12:09 sovrasov

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

snownus avatar Dec 19 '19 04:12 snownus

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!

chnadell avatar Feb 20 '20 17:02 chnadell

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

sovrasov avatar Feb 21 '20 07:02 sovrasov

@sovrasov, in this case would you consider changing the variable flops to mac to avoid confusion? https://github.com/sovrasov/flops-counter.pytorch/blob/1ad0ed1999620c0170e5854dde39805d30d9b6aa/sample.py#L36

cassie101 avatar Apr 15 '20 06:04 cassie101

@cassie101 makes sense, I'll change it

sovrasov avatar Apr 15 '20 16:04 sovrasov

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?

code-by-jin avatar Mar 19 '21 05:03 code-by-jin

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

sovrasov avatar Mar 19 '21 07:03 sovrasov

@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?

code-by-jin avatar Mar 19 '21 07:03 code-by-jin

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.

sovrasov avatar Mar 19 '21 07:03 sovrasov

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

zyxjtu avatar Feb 11 '22 07:02 zyxjtu

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

cmj18 avatar Feb 27 '22 09:02 cmj18

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

jerryli1981 avatar Mar 30 '22 15:03 jerryli1981

@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)

drcege avatar Apr 13 '22 07:04 drcege

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 ??

minecraftdixit avatar Jul 10 '23 13:07 minecraftdixit

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.

sovrasov avatar Jul 11 '23 11:07 sovrasov