LLVM NVPTX bitcode linker for Rust 🔥 without external system dependencies 🔥!
The release is important for the linker and existing users.
The former approach was using an external nvptx64-nvidia-cuda
json target specification and xargo
to automatically compile libcore
.
As of 2019-02-06 Rust received built-in support for building the CUDA kernels, and which evolved from the experience gained with ptx-linker
prior v0.9
.
Currently, it's possible to jump into a CUDA development with Nightly Rust:
``` bash
$ cargo install ptx-linker -f --version ">= 0.9"
libcore
for the CUDA target.$ rustup target add nvptx64-nvidia-cuda ```
More details about further usage can be found below (Advanced usage section).
The linker solves several of issues mentioned in the NVPTX metabug:
Heads up! More details are coming soon!
At the moment ptx-builder is still using a legacy approach with xargo
, but the situation will change very soon!
Alternatively, the linker can be used alone.
Make sure you are using a cdylib
crate type (the step is needed to perform the actual "linking").
Add to your Cargo.toml
:
toml
[lib]
crate_type = ["cdylib"]
And finally, build the PTX assembly file:
bash
$ cd /path/to/kernels/crate
$ cargo build --target nvptx64-nvidia-cuda --release
Rust will involve ptx-linker
under-the-hood and the latter will write the assembly at:
target/nvptx64-nvidia-cuda/release/KERNELS_CRATE_NAME.ptx
The linker does the magic without external system dependencies (mainly, LLVM libs) installed. Thanks to the rustc-llvm-proxy the correct LLVM symbols are being loaded at runtime. The approach also ensures that the linker uses same libraries versions as Rust.
Unfortunately, due to rustc-llvm-proxy#1 MSVS targets are not supported yet.
You might face similar errors:
Unable to find symbol 'LLVMContextCreate' in the LLVM shared lib
For now, the only solution on Windows is to use GNU toolchain.