How would you calculate throughput for a GEMM kernel given its properties?
Implement the roofline model for C = A × B, counting two floating-point operations per multiply-add and one read of each input matrix plus one write of the output matrix. Return arithmetic intensity, compute and memory throughput limits, predicted throughput after efficiency, and the bottleneck.
The function accepts a dictionary and returns a dictionary with numeric values rounded to six decimal places.
def gemm_throughput(properties):