A very good and reasonably approachable discussion of the pros and cons of how CUDA programming actually is realized in hardware. The explanation of how the GPU's handle context switching is particularly thoughtful and enlightening. It took me a long time to figure this out a couple months ago, a guide like this would have saved me a few nights.
I was surprised that the author didn't once use the term CUDA though, they even discuss actual syntax from it, but don't mention the language (extension) once.