#linker #cuda #llvm #nvptx #kernel

构建 ptx-linker

NVPTX 模块链接器

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 构建工具

MIT 许可证

46KB
1K SLoC

Rust PTX 链接器

Build Status Current Version

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