Solved by JuanFMontesinos in post #7 
              
              
                You can have a large explanation here: 
https://pytorch.org/docs/master/notes/cuda.html 
The main short is ops aren’t processed in the order you call them but in an optimal one as internally ops are enqueued. 
Some ops force synchronization. 
That’s what i mean by “they are async”. 
WRT using output…