#gpgpu #cuda #proc-macro

accel-derive

用于编写GPGPU内核的过程宏

5个不稳定版本

0.3.0 2020年5月3日
0.3.0-alpha.22020年4月5日
0.3.0-alpha.12020年1月11日
0.2.0 2018年6月14日
0.1.0 2017年11月20日

#59 in #gpgpu

每月下载量 29
2 个crate中使用(通过 accel

MIT/Apache

15KB
334

accel-derive

docs.rs

用于 #[kernel] 的过程宏 crate。 #[kernel] 函数将被转换为两部分

  • 设备代码将被编译成PTX汇编器
  • 主机代码使用 accel::module API调用生成的设备代码(PTX汇编)

lib.rs:

获取编译后的PTX作为 String

过程宏 #[kernel] 除了创建一个函数 add 外,还会创建一个子模块 add::。内核Rust代码使用rustc的 nvptx64-nvidia-cuda 工具链编译成PTX字符串。生成的PTX字符串被嵌入到过程宏输出中,作为 {kernel_name}::PTX_STR

use accel_derive::kernel;

#[kernel]
unsafe fn add(a: *const f64, b: *const f64, c: *mut f64, n: usize) {
    let i = accel_core::index();
    if (i as usize) < n {
        *c.offset(i) = *a.offset(i) + *b.offset(i);
    }
}

// PTX assembler code is embedded as `add::PTX_STR`
println!("{}", add::PTX_STR);

依赖项

~1.7–2.5MB
~52K SLoC