https://www.google.com/search?q=why%20is%20nvidia%20better%2...
(To be fair, Nvidia were at the forefront of this GPGPU thing since before there were dedicated APIs for it, so they certainly deserve some credit, but at this point they seem in desperate need for someone to finally knock them down.)
The second big problem is that AMD has a history of abandoning APIs. While Nvidia has been focusing on CUDA from the start, AMD is on its third or fourth API. A lot of developers got burned early on by putting in a lot of effort into supporting AMD cards, only to have their work become useless as AMD dropped old API.
So if you wanted to support AMD today you have to choose between using their latest API which is currently only supported on a handful of their latest top end cards, or using their previous API, which is much worse and may or may not be supported in 2 years time.
While there's very few cards that are officially supported, I've enabled most RDNA 1 and RDNA 2 GPUs in the OS-provided packages on Debian Unstable and Ubuntu 23.10. I haven't tested all of them, but my experience has been that they generally work quite well. The version of HIP packaged for Debian is still a few versions behind, so we haven't been able to enable RDNA 3 yet, but it shouldn't be too long before that is resolved.
As you have described, it has been a very long road to get to this point (with a lot of mistakes along the way), but I think things are getting better. That said, I work on ROCm, so my evaluation may be unintentionally biased.
Hopefully. Although I haven't programmed with it yet, the latest ROCm looks nice (at least from reading the docs). Now all you have to do is actually get to a point where it's actually supported on hardware people actually own and convince people that it's worth investing their time in, and then AMD can start making progress.
AMD has been a lot less consistent with their support changing their mind almost every 3 years. ROCm was initially released in 2016 (that's 9 years of headstart for NVIDIA). If you look at https://docs.amd.com/en/latest/release/gpu_os_support.html on Linux only the enterprise server cards are supported. Situation slightly different on windows https://docs.amd.com/en/latest/release/windows_support.html where they support last 2 generations of consumer cards (partially). I remember there were also a few years with even more bizarre situation where they supported GPUs that are couple of generations old but not their latest cards.
Not hard to see how developers are hesitant to spend time adding support for AMD if large portion of AMD users won't be able to use it and there is a high chance that after few years AMD will change their mind again coming out with new API or dropping support for cards that are only couple of years old.
This disparity is due to that fumble.
But since Rocm for windows finally released. The situation may finally change. We can probably just wait and see what will go on.
- people had lots of time to get used to it
- hobbyists and smaller research outfits/labs could make use of it on the cheap and less powerful hardware (where even a cheap GPGPU beats computing in software), driving:
- mind share (compare: Photoshop/Microsoft's tolerance to piracy)
- sales of hardware when the users decided to upgrade, buying more and/or and/or more modern and/or better cards
- the longer it has been available, the more stable of a programming target it appears to be, driving a virtuous cycleIn contrast, the range of AMD hardware supporting ROCm was narrow and unstable (AFAIK one card was only supported for a couple of years). This would of course make ROCm unattractive for building with, especially for the hobbyists and smaller outfits that would otherwise drive mindshare but couldn't afford datacenter grade hardware that was supported.
No idea if AMD will drop whole list like it previously done this time though.