I never understood the dominance of CUDA. I did GPGPU more than half a decade ago, and I feel like stuff has hardly changed. There are thread groups, group shared variables, global, and group shared atomics etc. Underneath, all GPUs run the same-ish wide SIMD architecture, so I'm pretty sure most stuff is semi-performance portable.
DirectCompute, OpenCL and CUDA and probably all the others expose this same programming model. Why is CUDA so dominant?
nvidia decided they wanted to be the market leader, and spent $$$$ developing tools, training materials, and libraries (like cuDNN) which they gave away for free.
They also hire software engineers to integrate CUDA into open source projects. On the one hand, those projects can now take advantage of advances in hardware. On the other, users will have to buy NVIDIA to use it, so how open is it? Also NVIDIA will not provide any help with CI, so those costs are borne by the project – or the code isn't tested.