The very first batch is always slower as many things are lazily initialized in cuda. So the first one will actually potentially do extra initialization work. Hopefully you should be able to ignore these timings for any real workload.
I’m not sure about the cudnn internals. You should be able to use nvvp to see that. But I think yes it does everything in a single kernel (but that may vary depending on the algorithm that was selected).