Back in the days when I started OpenCL I chose it because I said to myself: hey, this rocks. Royalty free, it only grasps the core of parallel programming, CPU/GPU with one rock… it’s cool.
A few years pass, and basically I’m back where I started, my codebase is not portable (or I have to make workarounds if at all possible), because NV is sabotaging their own implementation. Only one thing changed, now my codebase is stuck with AMD (and Intel). To be honest, it’s a fair exchange. The compute power I get for my (company’s) money is far superior then if I went with NV.
Yes, there are the CUDA features that rock, but we all know it is because of ignorant and incompetent market strategy that they are not implemented in OpenCL. That is what vendor-specific extensions are for. RDMA, dynamic parallelism… all the goodness could be imported via extensions, but nooooo. You should buy Tesla and use CUDA. Uhm… why?
No wonder PS4 and XBox One went with AMD instead, who took the chance and helped develop all the tools needed for a proper heterogenous platform. And look at all the ingame trailers: they are jawdropping. On the other hand NV has their own complete platform in the form of Tegra 4. Fixed function shader HW in 2013??? Are you joking??? Yet another kick into developers who have to find workarounds if they want cool compute features in their apps on GPUs (facial recognition and the likes). Because of NV, their code is yet again not portable.
And the biggest joke is, that while it is completely clear that the tool/driver/SDK developing capacity of NV is far superior than any other company’s on the market, they don’t even have 1.2 conforming OpenCL implementation, while AMD for one has the conforming SDK, driver and tools THE NEXT DAY the spec is released. (Intel came 1-2 months later) Plus, AMD and Intel have already started building higher-level tools on top of it, like Shevlin Park or Bolt, which use OpenCL as a compute backend.
NV is doing practically nothing and that’s exactly why it’s getting nowhere.