The reasons could be different code paths taken by the tensor constructors.
However, since CUDA operations are asynchronous, you would need to synchronize the code before starting and stopping the timer.
The torch.utils.benchmark utilities can be helpful, as they are synchronizing and add warmup iterations.