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?