Yes, typical benchmarking would use multiple runs to avoid measuring any startup costs. If you need to run this live, I would see if simply instrumenting your training loop with timing measurements (e.g, even just a crude t1 = time.time() ... t2 = time.tim2() and appropriate torch.cuda.synchronize calls provides enough precision.