Thank you for your reply, it really works!!
I did several experiments with Resnet50 for input tensors of different spatial resolutions like below:
with torch.no_grad():
  model.eval()

  start = torch.cuda.Event(enable_timing=True)
  end = torch.cuda.Event(enable_timing=True)

  model(tensor) #warmup

  start.record()
  with torch.cuda.amp.autocast(enabled=True):
    for i in range(10):    
        model(tensor)
  end.record()
  torch.cuda.synchronize()
  print('execution time in MILLISECONDS: {}'.format(start.elapsed_time(end)/10))

with autocast in each case, I got at least 2x speedup during inference, which is really appreciable. But could you please tell why this speedup? What magic is PyTorch doing under the hood to get this speedup?