Since CUDA operations are asynchronous, you would have to synchronize the code via torch.cuda.synchronize() before starting and stopping the timer.
Also, do you want to use FP16 and FP32 in your first example or should both be FP16?