I took the “64 inst/cycle/SM” value from the Throughput of Native Arithmetic Instructions section in the CUDA Programming Guide.
To verify, I ran a benchmark kernel repeatedly executing IMAD instructions, and the measured performance also matches ~52.4 TOPS.
So my questions are:
How can the advertised 104.8 TOPS be achieved?
Is the number in the white paper possibly reported incorrectly, or is there some additional factor (dual issue, tensor cores, etc.) contributing to this figure?
Thanks for the link—after reading the thread, I now understand that on Blackwell the IADD throughput doubled, while IMAD didn’t, and that current compilers often emit IADD3 (which isn’t doubled). However, even with that in mind, my theoretical peak still doesn’t reconcile with 104.8:
Using the Programming Guide table value 64 inst/cycle/SM (for IMAD) and my IMAD microbenchmark, I get:
So purely “IADD doubled” doesn’t lift the theoretical ops/sec above ~52.4.
I also considered that IMAD uses the FMA-heavy pipe while IADD uses ALUs, so an ideal IMAD+IADD mix might sustain more total work by occupying both pipes. But that style of concurrent utilization existed on prior architectures as well, so I don’t see how that alone explains 104.8 either.
Here are my questions:
How are “ops” counted for INT32 in that number? (IMAD = 2 ops, IADD = 1 op; is IADD3 counted as 2 ops?)
Does 104.8 assume an ideal instruction mix (e.g., perfectly scheduled IMAD + IADD across separate pipes), or is it mirrored from the FP32 FMA peak formula?
A concrete formula (the exact terms multiplied to reach 104.8) would resolve the ambiguity. Thanks!