DeviceSend<Target=Pointer> for slice and memories

From !90 (merged), for !88 (merged)

  • Implement DeviceSend<Target=*mut T> for &mut [T] and &mut DeviceMemory, &mut PageLockedMemory, &mut RegisteredMemory.
  • Then we can pass them into a kernel which takes *mut T arguments
#[kernel]
unsafe fn set1(a: *mut i32, n: usize) {
    let i = accel_core::index();
    if i < n as isize {
        *a.offset(i) = 1;
    }
}
let n = 12;
let mut a = PageLockedMemory::<i32>::zeros(&ctx, n);
set1(&ctx, 1, n, (&mut a, n))?;

If possible, I'd like to pass it into &mut [T] also on device and make kernel code safe, but it still has problem #7

Edited by termoshtt

Merge request reports

Loading