Rust PTX Linker

Build Status Build status Current Version

LLVM NVPTX bitcode linker for Rust 🔥 without external system dependencies 🔥!

What's going on in v0.9?

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

Install the minimal required version of the linker.

$ cargo install ptx-linker -f --version ">= 0.9"

Install libcore for the CUDA target.

$ rustup target add nvptx64-nvidia-cuda ```

More details about further usage can be found below (Advanced usage section).

Purpose

The linker solves several of issues mentioned in the NVPTX metabug:

Convenient usage

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!

Advanced usage

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

How does it work?

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.

Windows users!

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.