22 个版本
0.9.1 | 2020年3月3日 |
---|---|
0.9.0 | 2019年2月6日 |
0.8.3 | 2019年1月20日 |
0.8.2 | 2018年11月11日 |
0.2.0 | 2017年12月12日 |
#675 in 构建工具
46KB
1K SLoC
Rust PTX 链接器
LLVM NVPTX 位码链接器,无外部系统依赖!🔥 无外部系统依赖 🔥!
v0.9 版本更新内容
该版本对于链接器和现有用户来说非常重要。之前的方法是使用外部的 nvptx64-nvidia-cuda
json 目标规范和 xargo
自动编译 libcore
。
截至 2019-02-06,Rust 获得了对构建 CUDA 内核的内置支持,这源于在 v0.9
之前使用 ptx-linker
获得的经验。
目前,可以使用 Nightly Rust 直接进入 CUDA 开发
# 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
更多关于进一步使用的详细信息请见下文(高级用法 部分)。
目的
链接器解决了在 NVPTX metabug 中提到的几个问题
- 非内联函数不能跨 crate 使用 - rust#38787
- 当应该出现 "undefined reference" 错误时没有抛出 - rust#38786
方便使用
目前,推荐使用 ptx-builder 作为构建包含 CUDA 代码的 Rust crate 的方法。
高级用法
或者,可以单独使用链接器。
请确保您正在使用 cdylib
crate 类型(此步骤是执行实际 "链接" 所必需的)。将其添加到您的 Cargo.toml
[lib]
crate_type = ["cdylib"]
最后,构建 PTX 汇编文件
$ cd /path/to/kernels/crate
$ cargo build --target nvptx64-nvidia-cuda --release
Rust 将在幕后调用 ptx-linker
,后者将在
target/nvptx64-nvidia-cuda/release/KERNELS_CRATE_NAME.ptx
它是如何工作的?
链接器在无外部系统依赖(主要是 LLVM 库)安装的情况下进行魔法操作。多亏了 rustc-llvm-proxy,在运行时正确加载了 LLVM 符号。这种方法还确保了链接器使用与 Rust 相同的库版本。
Windows 用户!
很遗憾,由于 LLVM dylib 的限制,Windows 目标不受支持。如果链接器是用静态 LLVM 构建的,则可以解决这个问题,但这需要与 Rust 构建过程更紧密的集成。目前,在这方面还没有进行任何工作,但情况可能会改变。
依赖项
~4–12MB
~120K SLoC