import cProfile import pstats import timeit import torch @torch.compile(backend="eager", fullgraph=True) def symbolic_convert_overhead_stress_test(x, y, n): while n > 0: n -= 1 x, y = y, x return x + y def main(): def fn(): torch._dynamo.reset() symbolic_convert_overhead_stress_test(x, y, 100000) x = torch.randn(16) y = torch.randn(16) t = min(timeit.repeat(fn, number=1, repeat=3)) print(f"symbolic_convert_overhead_stress_test: {t:.1f}s") def profile(): x = torch.randn(16) y = torch.randn(16) torch._dynamo.reset() pr = cProfile.Profile() pr.enable() # 100k > 33k roughly cancels out the overhead of cProfile symbolic_convert_overhead_stress_test(x, y, 33000) pr.disable() ps = pstats.Stats(pr) ps.dump_stats("dynamo_microbenchmarks.prof") print("snakeviz dynamo_microbenchmarks.prof") if __name__ == "__main__": main() profile()