use cudarc::driver::{CudaDevice, CudaSlice, DriverError};
fn main() -> Result<(), DriverError> {
let dev = CudaDevice::new(0)?;
let a: CudaSlice<f64> = dev.alloc_zeros::<f64>(10)?;
let mut b = dev.alloc_zeros::<f64>(10)?;
dev.dtod_copy(&a, &mut b)?;
dev.htod_copy_into(vec![2.0; 10], &mut b)?;
dev.htod_sync_copy_into(&[3.0; 10], &mut b)?;
let mut a_host: Vec<f64> = dev.sync_reclaim(a)?;
assert_eq!(a_host, [0.0; 10]);
let b_host = dev.dtoh_sync_copy(&b)?;
assert_eq!(b_host, [3.0; 10]);
dev.dtoh_sync_copy_into(&b, &mut a_host)?;
assert_eq!(a_host, b_host);
Ok(())
}