Live data from Hacker News

Show HN: HipScript – Run CUDA in the browser with WebAssembly and WebGPU

hipscript.lights0123.com

1–10 of 35 posts

Show HN: HipScript – Run CUDA in the browser with WebAssembly and WebGPU

#1
CUDA is NVIDIA's language for GPU programming, allowing you to mix write CPU and GPU code in C++ in one file. By chaining a few projects that compile CUDA to OpenCL, then Vulkan, then WebGPU, you can experiment with this GPGPU language on any hardware.

Show HN: HipScript – Run CUDA in the browser with WebAssembly and WebGPU
hipscript.lights0123.com

Re: Show HN: HipScript – Run CUDA in the browser with WebAssembly and WebGPU

#2
From the "Learn More" link (https://lights0123.com/blog/2025/01/07/hip-script/):

"By chaining chipStar¹ (a HIP and NVIDIA® CUDA® to OpenCL compiler), Clspv² (an OpenCL to Vulkan compiler), and Tint³ (among others, a Vulkan shader to WebGPU shader compiler), you can run CUDA code in the browser!"

¹ https://github.com/CHIP-SPV/chipStar/ ² https://github.com/google/clspv/ ³ https://dawn.googlesource.com/dawn/+/refs/heads/main/src/tin...

Re: Show HN: HipScript – Run CUDA in the browser with WebAssembly and WebGPU

#4
Firefox supports WebGPU, but needs a setting in about:config. I enabled the setting but HipScript still denies running on Firefox with the message: "Please try a Chromium-based browser like Google Chrome or Microsoft Edge."

Please do feature detection, not browser detection.

Re: Show HN: HipScript – Run CUDA in the browser with WebAssembly and WebGPU

#6
The GoL example it loaded with seemed to be running way slower than I expected it to. It turns out that there's actually a `usleep(1000 * 100)` call in the code which was inserted to make it easier to see the output; the actual kernels execute quickly and take up very little GPU time.

When I looked at the profiler, I was confused to see that one worker thread was at 100% usage the whole time it was running. At first, I thought that maybe it was actually running the code via Wasm on the CPU rather than on the GPU like it said.

Instead, it turns out that the worker was just running `emscripten_futex_wait` - which as far as I can tell is implemented by busy waiting in a loop. Probably doesn't matter for performance since I imagine that's just for the sleep call anyway.

----

Altogether this is an incredibly cool tool. I'm sure there is some performance gap compared to native, but even so this is a extremely impressive and likely has a ton of potential use cases.

Post reply on HN