4 ms·
C Compiler to SPIR-V
- sylware 2y agoHave a look at QBE as it may provide basic optimizations and some significant performant boost: cproc + QBE and I get 70% of gcc 13.2 -O2 speed in my benchmarks, tinycc is 2 times slower than gcc 13.2 -O2 in the same benchmarks (my benchmarks are very basic, but it shows...). We are talking gcc complexity is grotesque/absurd for those 30%, not to mention this is now brain damaged c++ (one of the biggest mistakes in open source software ever). I know QBE is for CPUs, but maybe there is something there for GPUs.
- Conscat 2y agoQBE has no support for SIMD last I looked into it, so I don't think it would be appropriate for an SPMD language. https://todo.sr.ht/~mpu/qbe/5 https://todo.sr.ht/~mpu/qbe/5 It's common for shader compilers to invent their own IR, like Shadey and Slang IR.
- rurban 2y agoThat link just says that the maintainer of the fork mpu for hare has no will nor abilities to add full SIMD support. But qbe is still written and maintained by Brian Callahan here: https://c9x.me/compile/ https://c9x.me/compile/
- jesse__ 2y agoHaven't actually used this project yet, but I occasionally stop by his stream on twitch. Legend.
- c1b 2y agodoes this also already exist on llvm toolchain?
- Conscat 2y agoNot really. LLVM does support compute mode SPIR-V, and _very_ recently graphics-mode SPIR-V which is being dogfooded by the highly WIP HLSL front-end in Clang (I couldn't get a trivial fragment shader to build with it a few weeks ago). Clang does not support compiling graphics-mode SPIR-V from C or C++. This seems similar to the Vulkan Clang Compiler (which is not in-tree of LLVM), although it has some interesting differences such as implementing shader functions with new specifiers like `__hcc_vertex` rather than repurposing attributes for it like `[[clang::annotate("shady::entry_point::vertex")]]`.
- kimixa 2y agoThe Microsoft HLSL compiler for dx12+ is based on LLVM and supports spir-v output https://github.com/microsoft/DirectXShaderCompiler https://github.com/microsoft/DirectXShaderCompiler Though my understanding is that it's a complete hackjob stuck on an old version of LLVM, and not in a remotely upstream-able state and breaks other parts of the LLVM toolchain completely. I think there was talk about trying to clean that up at the same time as bringing the baseline version forward, but I have no idea about it's progress.
- pjmlp 2y agoThe progress is that DirectX will also support SPIR-V, going forward. https://devblogs.microsoft.com/directx/directx-adopting-spir-v/ https://devblogs.microsoft.com/directx/directx-adopting-spir...
- pabs3 2y agoThere seems to be documentation about it: https://llvm.org/docs/SPIRVUsage.html https://llvm.org/docs/SPIRVUsage.html
- LegNeato 2y agoSimilar project but for Rust: https://github.com/Rust-GPU/rust-gpu https://github.com/Rust-GPU/rust-gpu
- binary132 2y agoThis looks very promising on the surface. I wonder how it compares to clspv?