[][src]Trait accel::memory::Memcpy

pub trait Memcpy<Target: Memory<Elem = Self::Elem> + ?Sized>: Memory {
    fn copy_from(&mut self, source: &Target);
fn copy_from_async<'a>(&'a mut self, src: &'a Target) -> BoxFuture<'a, ()>; }

Copy data from one to another

Required methods

fn copy_from(&mut self, source: &Target)

Examples

  • memcpy from page-locked host memory to device memory
let mut dest = DeviceMemory::<i32>::zeros(&ctx, 12);
let src = PageLockedMemory::<i32>::zeros(&ctx, 12);
dest.copy_from(&src);
  • memcpy from device memory to page-locked host memory
let mut dest = PageLockedMemory::<i32>::zeros(&ctx, 12);
let src = DeviceMemory::<i32>::zeros(&ctx, 12);
dest.copy_from(&src);
  • memcpy from device to device
let mut dest = DeviceMemory::<i32>::zeros(&ctx, 12);
let src = DeviceMemory::<i32>::zeros(&ctx, 12);
dest.copy_from(&src);
  • memcpy from Rust slice to device memory
let mut dest = DeviceMemory::<i32>::zeros(&ctx, 12);
let src = vec![0_i32; 12];
dest.copy_from(src.as_slice()); // requires explicit cast to slice
  • memcpy from device memory to Rust slice
let mut dest = vec![0_i32; 12];
let src = DeviceMemory::<i32>::zeros(&ctx, 12);
dest.copy_from(&src);
  • Cannot copy between different types
This example deliberately fails to compile
let mut dest = DeviceMemory::<i64>::zeros(&ctx, 12);
let src = PageLockedMemory::<i32>::zeros(&ctx, 12);
dest.copy_from(&src); // compile fail
  • Panics if sizes are different
let mut dest = DeviceMemory::<i32>::zeros(&ctx, 24);
let src = PageLockedMemory::<i32>::zeros(&ctx, 12);
dest.copy_from(&src); // will panic

Panics

  • if self and src are identical
  • if sizes of memory mismatch

fn copy_from_async<'a>(&'a mut self, src: &'a Target) -> BoxFuture<'a, ()>

Copy data in async manner

use accel::*;

#[tokio::main]
async fn main() {
  let device = Device::nth(0).unwrap();
  let ctx = device.create_context();
  let mut dest = DeviceMemory::<f32>::zeros(&ctx, 12);
  let src = PageLockedMemory::<f32>::zeros(&ctx, 12);
  dest.copy_from_async(&src).await;
}
  • Arrays are captured until await:
let future = dest.copy_from_async(&src);
println!("src[0] = {}", src[0]);  // Source is always accessible as usual &-reference
future.await;
This example deliberately fails to compile
let future = dest.copy_from_async(&src);
println!("dest[0] = {}", dest[0]);  // Destination is not accessible until .await
future.await;
Loading content...

Implementations on Foreign Types

impl<T: Scalar, Dim: Dimension> Memcpy<Array<T, Dim>> for [T][src]

impl<T: Scalar> Memcpy<[T]> for [T][src]

impl<T: Scalar> Memcpy<DeviceMemory<T>> for [T][src]

impl<T: Scalar> Memcpy<PageLockedMemory<T>> for [T][src]

impl<'_, T: Scalar> Memcpy<RegisteredMemory<'_, T>> for [T][src]

Loading content...

Implementors

impl<'_, '_, T: Scalar> Memcpy<RegisteredMemory<'_, T>> for RegisteredMemory<'_, T>[src]

impl<'_, T: Scalar> Memcpy<[T]> for RegisteredMemory<'_, T>[src]

impl<'_, T: Scalar> Memcpy<DeviceMemory<T>> for RegisteredMemory<'_, T>[src]

impl<'_, T: Scalar> Memcpy<PageLockedMemory<T>> for RegisteredMemory<'_, T>[src]

impl<'_, T: Scalar> Memcpy<RegisteredMemory<'_, T>> for DeviceMemory<T>[src]

impl<'_, T: Scalar> Memcpy<RegisteredMemory<'_, T>> for PageLockedMemory<T>[src]

impl<'_, T: Scalar, Dim: Dimension> Memcpy<Array<T, Dim>> for RegisteredMemory<'_, T>[src]

impl<'_, T: Scalar, Dim: Dimension> Memcpy<RegisteredMemory<'_, T>> for Array<T, Dim>[src]

impl<T: Scalar> Memcpy<[T]> for DeviceMemory<T>[src]

impl<T: Scalar> Memcpy<[T]> for PageLockedMemory<T>[src]

impl<T: Scalar> Memcpy<DeviceMemory<T>> for DeviceMemory<T>[src]

impl<T: Scalar> Memcpy<DeviceMemory<T>> for PageLockedMemory<T>[src]

impl<T: Scalar> Memcpy<PageLockedMemory<T>> for DeviceMemory<T>[src]

impl<T: Scalar> Memcpy<PageLockedMemory<T>> for PageLockedMemory<T>[src]

impl<T: Scalar, Dim: Dimension> Memcpy<[T]> for Array<T, Dim>[src]

impl<T: Scalar, Dim: Dimension> Memcpy<Array<T, Dim>> for DeviceMemory<T>[src]

impl<T: Scalar, Dim: Dimension> Memcpy<Array<T, Dim>> for PageLockedMemory<T>[src]

impl<T: Scalar, Dim: Dimension> Memcpy<DeviceMemory<T>> for Array<T, Dim>[src]

impl<T: Scalar, Dim: Dimension> Memcpy<PageLockedMemory<T>> for Array<T, Dim>[src]

Loading content...