6 个版本
0.1.5 | 2024 年 4 月 1 日 |
---|---|
0.1.4 | 2024 年 2 月 6 日 |
0.1.3 | 2024 年 1 月 30 日 |
在 算法 中排名 198
每月下载量 5,971
在 40 个crate中使用(直接使用6个)
24KB
435 代码行
Bindgen Cuda
与 bindgen 类似的哲学。它将帮助创建自动的 bindgen 到 CUDA 内核源文件,并使它们更容易直接从 Rust 中使用。
PTX 包含
假设你有一个文件
src/cuda.cu
__global__ void cuda_hello(){
printf("Hello World from GPU!\n");
}
你可以将 bindgen_cuda
添加为构建依赖项
cargo add --build bindgen_cuda
然后创建这个 build.rs
fn main() {
let builder = bindgen_cuda::Builder::default();
let bindings = builder.build_ptx().unwrap();
bindings.write("src/lib.rs");
}
这将创建一个包含以下代码的源文件
pub const CUDA: &str = include_str!(concat!(env!("OUT_DIR"), "/cuda.ptx"));
然后你可以使用库如 cudarc 直接在你的 Rust 代码中使用 PTX。
原始 CUDA 调用
或者你可以构建一个静态库,你可以在 build.rs 中链接它,以便直接使用 C 代码调用 CUDA。
src/cuda.cu
__global__ void cuda_hello(){
printf("Hello World from GPU!\n");
}
int run() {
cuda_hello<<<1,1>>>();
return 0;
}
然后编写 build.rs
fn main() {
let builder = bindgen_cuda::Builder::default();
builder.build_lib("libcuda.a");
println!("cargo:rustc-link-lib=cuda");
}
然后在 src/lib.rs
中通过 FFI 接口使用
extern "C" {
fn cuda_hello();
}
fn main(){
unsafe{ cuda_hello();}
}
依赖
~1.5MB
~28K SLoC