abi_ptx

The tracking issue for this feature is: #38788


When emitting PTX code, all vanilla Rust functions (fn) get translated to "device" functions. These functions are not callable from the host via the CUDA API so a crate with only device functions is not too useful!

OTOH, "global" functions can be called by the host; you can think of them as the real public API of your crate. To produce a global function use the "ptx-kernel" ABI.

#![feature(abi_ptx)] #![no_std] pub unsafe extern "ptx-kernel" fn global_function() { device_function(); } pub fn device_function() { // .. }
$ xargo rustc --target nvptx64-nvidia-cuda --release -- --emit=asm $ cat $(find -name '*.s') // // Generated by LLVM NVPTX Back-End // .version 3.2 .target sm_20 .address_size 64 // .globl _ZN6kernel15global_function17h46111ebe6516b382E .visible .entry _ZN6kernel15global_function17h46111ebe6516b382E() { ret; } // .globl _ZN6kernel15device_function17hd6a0e4993bbf3f78E .visible .func _ZN6kernel15device_function17hd6a0e4993bbf3f78E() { ret; }