I have a little experience in GPU programming so I can address your first question. 
;TLDR It is mostly due to momentum.<p>The difference in momentum stems from a difference in design paradigms. OpenCL is just a library that you can link to can compile using GCC. Because the code you&#x27;re writing is C++ syntactically you&#x27;re often jumping through a lot more hoops. Nvidia uses their own compiler, so when you&#x27;re writing cuda programs you have something that looks a lot like C++, however they have the freedom  to extend the syntax to ease development. 
The marketing arm of Nvidia, combined with the ease of use helped get Cuda the defacto research platform. Once that ball was rolling, it becomes easier to find cuda teachers and cuda examples so it&#x27;s naturally become more prolific.