import argparse import torch import int4_blackwell def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--iterations", type=int, default=8192) parser.add_argument("--repeats", type=int, default=10) parser.add_argument("--launches", type=int, default=20) args = parser.parse_args() props = torch.cuda.get_device_properties(0) blocks = props.multi_processor_count * 4 warps = blocks * 8 flops = warps * 4 * args.iterations * 2 * 16 * 8 * 64 out = torch.empty((blocks, 256), device="cuda", dtype=torch.float32) for mode in ("e2m1", "a", "b", "ab"): int4_blackwell.mma_probe( mode, iterations=args.iterations, blocks=blocks, out=out ) torch.cuda.synchronize() start = torch.cuda.Event(enable_timing=True) end = torch.cuda.Event(enable_timing=True) best_ms = float("inf") for _ in range(args.repeats): start.record() int4_blackwell.mma_probe( mode, iterations=args.iterations, blocks=blocks, launches=args.launches, out=out, ) end.record() end.synchronize() best_ms = min(best_ms, start.elapsed_time(end)) per_launch_ms = best_ms / args.launches tflops = flops / (per_launch_ms * 1e-3) / 1e12 print(f"{mode:5s} {per_launch_ms * 1e3:9.3f} us {tflops:8.1f} TFLOPS") if __name__ == "__main__": main()