Skip to content

Commit b20d7fa

Browse files
committed
Update rustc-dev-guide
1 parent d5b8ac4 commit b20d7fa

File tree

2 files changed

+13
-1
lines changed
  • library/core/src/intrinsics
  • src/doc/rustc-dev-guide/src/offload

2 files changed

+13
-1
lines changed

library/core/src/intrinsics/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3349,6 +3349,9 @@ pub const fn autodiff<F, G, T: crate::marker::Tuple, R>(f: F, df: G, args: T) ->
33493349
/// unsafe { (*x)[0] = 21.0 };
33503350
/// }
33513351
/// ```
3352+
///
3353+
/// For reference, see the Clang documentation on offloading:
3354+
/// <https://clang.llvm.org/docs/OffloadingDesign.html>.
33523355
#[rustc_nounwind]
33533356
#[rustc_intrinsic]
33543357
pub const fn offload<F, T: crate::marker::Tuple, R>(f: F, args: T) -> R;

src/doc/rustc-dev-guide/src/offload/usage.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ We currently work on launching the following Rust kernel on the GPU. To follow a
55

66
```rust
77
#![feature(abi_gpu_kernel)]
8+
#![feature(rustc_attrs)]
9+
#![feature(core_intrinsics)]
810
#![no_std]
911

1012
#[cfg(target_os = "linux")]
1113
extern crate libc;
1214
#[cfg(target_os = "linux")]
1315
use libc::c_char;
1416

17+
#[cfg(target_os = "linux")]
1518
use core::mem;
1619

1720
#[panic_handler]
@@ -38,7 +41,7 @@ fn main() {
3841
}
3942

4043
unsafe {
41-
kernel_1(array_c);
44+
kernel(array_c);
4245
}
4346
core::hint::black_box(&array_c);
4447
unsafe {
@@ -52,6 +55,11 @@ fn main() {
5255
}
5356
}
5457

58+
#[inline(never)]
59+
unsafe fn kernel(x: *mut [f64; 256]) {
60+
core::intrinsics::offload(kernel_1, (x,))
61+
}
62+
5563
#[cfg(target_os = "linux")]
5664
unsafe extern "C" {
5765
pub fn kernel_1(array_b: *mut [f64; 256]);
@@ -60,6 +68,7 @@ unsafe extern "C" {
6068
#[cfg(not(target_os = "linux"))]
6169
#[unsafe(no_mangle)]
6270
#[inline(never)]
71+
#[rustc_offload_kernel]
6372
pub extern "gpu-kernel" fn kernel_1(x: *mut [f64; 256]) {
6473
unsafe { (*x)[0] = 21.0 };
6574
}

0 commit comments

Comments
 (0)