I start with the question, in case somebody can say something without going through the whole post:
What is the easiest way to start programming with a Radeon Pro VII in C++ in Windows?
And for anyone interested in the background:
I'm a mechanical engineer with some interest in programming and simulation. A few years ago I decided to give GPGPU a try using a consumer graphics card from nVidia (probably a GTX 970 at that point) and CUDA. I decided to try CUDA against OpenCL, the main other alternative at that point, because CUDA was theoretically easier to learn or at least there were many more learning resources available than for OpenCL.
After a few weeks I achieved what I wanted (running mechanical simulations on the card) using C++ in Visual Studio. It didn't offer a great advantage over the CPU partly because of consumer cards being heavily capped in double precision math, but I was happy with the fact that I had managed to run those simulations in the GPU.
The idea of trying other cards with more FP64 power has resounded in the back of my mind since then, but such cards are just so expensive they are hard to justify for a hobbyist. The Radeon VII seemed to be a great option but they mostly sold out before I decided to purchase one. Until in the last weeks the "PRO" version of the card, which I hadn't heard of, dropped its price heavily and I was able to grab a new one for less than 350€, with its 1:2 FP64 ratio and slightly above 6 TFLOPS (against 0.1 for the 970.)
As CUDA is out of the question with an AMD card, I've spent quite a few hours during the last couple of days just trying to understand what programming environment I should use with the card. Actually in the beginning I was just trying to find the best way to use OpenCL with Visual Studio and a few exmaples. But the picture I've discovered seems to be much more complex than what I have expected.
OpenCL appears to be regarded by many as dead and they just advice not to invest any time learning it from scratch at this poing. In addition to that I have discovered some terms which were completely unknown to me: HIP, SYCL, DPC++ and oneAPI, which sometimes seem to be combined in ways I just didn't grasp yet (i.e. hipSYCL and others). At one point of my research oneAPI seem like it could be the way to as there was some support for AMD cards (albeit in beta stage) until at some point during the installation of the required packages I discovered support for AMD was only offered for Linux.
So, I'm quite a bit lost and struggling to make a picture of what all those options mean and which would the best way to start running some math on the Radeon. I would be very thankful to anyone who would want to cast some light in the topic.
OpenCL is anything but dead. It is still the best cross-vendor GPGPU framework out there, with support on Windows, Linux, macOS and Android, and for literally every GPU from every vendor, while providing the same performance as proprietary CUDA on Nvidia and proprietary HIP on AMD. AMD's OpenCL support is very mature at this point and the Radeon VII Pro is excellent for FP64 with OpenCL. I have extensively used OpenCL on the Radeon VII during my PhD.
Start here, this will get OpenCL running in Visual Studio immediately and without any code overhead. Find the OpenCL reference card here, an overview on all the fantastic math and vector functionality of OpenCL C and more.