upvote
A couple of years ago I evaluated both Vulkan and Cuda as a choice for future projects. I couldnt get anything done after a week in Vulkan, but had the test prototype project working after just a day in Cuda.

Needless to say, I'd never ever pick Vulkan for any project after that experience. It's just way to needlessly overengineered and bloated.

reply
I used to be big into Khronos API camp, even did my project thesis in OpenGL, up to the famous Long Peaks fail.

Vulkan ended up being the same extension spaghetti as its predecessor, and Khronos was only able to come up with something thanks to AMD offering Mantle, C++ bindings and a GLSL successor only came to be thanks to NVidia (Vulkan-hpp and Slang started at NVidia).

The "we build the specification", and then "the community builds the tools", leads to very poor experiences, and if it wasn't for LunarG own interests, there wouldn't even exist any kind of Vulkan SDK.

What they have going is naturally the vendor independence, however we can achieve the same with middleware with the benefit of much better developer experience.

reply
I love how people say things like "extension spaghetti", as if all other non-standard APIs have the same problem: hardware gets new features that people want to use from that API, API gains extension to use that hardware feature.

CUDA is no different, in fact, often worse. Nvidia is bad at documenting which hardware does what things, and CUDA users often have to use third party tables to figure out what hardware can't do what and disappoint customers who unwisely invested into it.

reply
The other platforms have better ways to deal with progress instead of "here find entries on dynamic libraries by yourself", and good luck.

Profiles and API versions are much better approaches.

It is no accident than the ongoing efforts to make Vulkan more friendly are moving away from extension spaghetti into profiles.

reply
If you think that Vulkan is extension spaghetti you're clearly using it wrong. Set the API to 1.4 and many existing extensions get merged in.
reply
If you think changing to Vulkan 1.4 solves all the problems, you clearly aren't writing cross platform code.

First of all, that isn't even a thing if you need to target Android, or embedded hardware, secondly there are other extensions on the horizon.

reply
The vast majority of vulkan usecases aren't android or embedded. I indeed wouldn't recommend it there.
reply
Without Android and embedded, its market is mostly SteamaDeck and some universities for the most part.

Nintendo, PlayStation, Apple and Microsoft have their own APIs.

Visualisation industry is still largely on OpenGL, when not using middleware that uses each platform proprietary API, or moving into compute like CUDA as OTOY has done.

Khronos had to come up with ANARI, to convince them to even think about Vulkan in first place.

reply
Moving the goalposts much? Linux and Microsoft is still a huge market. Ii don't know about the switch 2 but the switch 1 had vulkan support. Apple as well if you count moltenvk
reply
Not at all, I mentioned where Vulkan actually has a market, and why using Vulkan 1.4 is not the solution you think it is.

There is hardly any commercial Vulkan market on Windows, with exception of tools like Autodesk VRED or Disney Hyperion, hardly every man tools and the reason one might use desktop Linux for 3D rendering instead, with proprietary drivers anyway. As a user, not developer.

List of commercial games on Windows using Vulkan, without having a DirectX 12 backend as option is pretty thin.

reply
Weird, most people have the exact opposite experience.

Having to deal with closed source opaque poorly documented stacks sucks.

reply
They really don't, no. Vulkan: 50 lines to allocate device memory. Cuda: One single line. What kind of extensive documentation stack do you want for functionality that is trivial in Cuda? And that exact issue continues through every little step of the way to your first usable application. I know there is VMA, it is a very poor solution to a problem that shouldn't even exist, and it only poorly addresses one of 100 parts of the API where Cuda is vastly simpler than Vulkan. Cuda also doesnt force you to use queue families but you can optionally use streams. No ridiculous descriptor management and binding in cuda, just passing pointers and handles via launch arguments. No overengineered explicit syncing mechanis in cuda, everything is nicely implicitly synced until you explicitly opt in to parallel streams. etc.
reply
It's quite easy to set up a light abstraction layer with Vulkan where you simply use VMA, buffer device addresses and push constants for everything. No descriptor sets or bindings anything.

Alternatively you can use one of many abstraction layers that do this for you.

reply
It absolutely isn't. After having spent 5 days not getting anything done in Vulkan, and being able to implement that same thing in a single day in Cuda (no prior experience in either API), I decided to never ever use Vulkan. It's a hopelessly overengineered API that is in dire need of a successor.

I may give it another try once it does not require a wrapper before it is remotely usable. I.e., once it has a single-line malloc without the need for third-party libs; default queues so I don't need to query and select queues; implicit sync by default and explicit sync by choice; NV-style bindless (i.e. no descriptors, just a handle); and so much more.

reply
Skill issue. Vulkan is intended to be unopinionated around those things. If you want defaults then use a wrapper.

P.s. devices and queues are generally ordered for simple programs you can just pick the 1st one.

reply
Of course it is a skill issue, I'm not afraid of admitting I'm not smart enough for Vulkan. That so many people have skill issues is the reason why Cuda trumps and will continue to trump Vulkan despite being vendor-locked. If you want people to actually use Vulkan, you need to remove barriers to skill-issued people like me. Poor third party wrappers like VMA that barely address one out of hundreds of issues aren't going to accomplish that, you need to resolve barriers in the core API. With a design like Cuda where there is always a default easy path, and a complex but optional path.
reply
Unfortunately, Vulkan Compute doesn’t to all the things that OpenCL, SYCL, HIP or CUDA do.
reply
Yep, there are inference stacks where it just does not work without cuda in any meaningful performance
reply
Weird, since the most used open source inference engine is faster on Vulkan on platforms that offer multiple options, with the sole exception being Nvidia, due to poor Nvidia driver quality (which I am forced to assume is intentional, Nvidia wishes to maintain their moat after all).
reply
There's nothing stopping any of us from writing a better Nvidia driver btw. LLMs are very helpful with reverse engineering.
reply
Being fast and being as easy to program as CUDA are two different things.
reply
Vulkan tooling is light years behind what CUDA offers in 2026, across programming languages, IDE tooling, graphical debuggers and libraries.
reply
Ports are very often incredibly difficult and very time consuming.

One of the biggest complaints we hear from the industry is "we tried to port to X and we could never complete it".

An established codebase can have years of refinement. It will take time to achieve the same with the port.

And with our compiler, just using cuda is no longer putting urself inside the moat :)

reply
Ironically, this is what people claim AI can do with a snap of the fingers.

Should be real simple if the HN AI echochamber is right, right?

reply
[dead]
reply