pub struct SharedBytesAllocationController { /* private fields */ }Expand description
Allocation controller backed by bytes::Bytes for zero-copy access.
This enables zero-copy tensor loading by referencing data directly from the source buffer without copying into heap-allocated memory.
§Safety
This implementation uses an UnsafeCell to lazily copy the content into an in-memory
buffer using [NativeAllocationController] when mutable access is requested. It is safe
because the controller can’t be cloned or synced between multiple threads. You can
duplicate the shared bytes allocator, but every version of it will have its own buffer.
§Notes
- Read access via
memory()is zero-copy as long as no mutable access has been requested. - Mutable access via
memory_mut()triggers a copy of the data into heap memory (copy-on-write semantics). - The underlying
bytes::Bytesremains valid for the lifetime of this controller. This is ensured bybytes::Bytesusing reference counting internally.
Implementations§
Sourcepub fn new(
bytes: Bytes,
property: AllocationProperty,
) -> SharedBytesAllocationController
pub fn new( bytes: Bytes, property: AllocationProperty, ) -> SharedBytesAllocationController
Create a new controller from a bytes::Bytes buffer with a specific
allocation property.
The allocation property is used by GPU backends to optimize data transfers:
AllocationProperty::File: Uses pinned memory staging buffers for faster DMA transfers (useful for memory-mapped files)AllocationProperty::Native: Data is in heap memoryAllocationProperty::Other: Unknown backing storage
§Example
use cubecl_common::bytes::{SharedBytesAllocationController, AllocationProperty};
// From static data (zero-copy, no heap allocation)
let static_bytes = bytes::Bytes::from_static(&[1, 2, 3, 4]);
let controller = SharedBytesAllocationController::new(static_bytes, AllocationProperty::Other);
// Memory-mapped file data - use File property for optimized GPU transfers
let mmap_bytes = bytes::Bytes::from_static(&[1, 2, 3, 4]); // pretend this is mmap
let controller = SharedBytesAllocationController::new(mmap_bytes, AllocationProperty::File);Trait Implementations§
Source§fn alloc_align(&self) -> usize
fn alloc_align(&self) -> usize
The alignment this allocation was created with.
Source§fn property(&self) -> AllocationProperty
fn property(&self) -> AllocationProperty
Returns memory property for the current allocation.
Source§fn memory(&self) -> &[MaybeUninit<u8>]
fn memory(&self) -> &[MaybeUninit<u8>]
Returns a view of the memory of the whole allocation
Source§unsafe fn memory_mut(&mut self) -> &mut [MaybeUninit<u8>]
unsafe fn memory_mut(&mut self) -> &mut [MaybeUninit<u8>]
Returns a mutable view of the memory of the whole allocation Read more
Source§fn split(
&mut self,
offset: usize,
) -> Result<(Box<dyn AllocationController>, Box<dyn AllocationController>), SplitError>
fn split( &mut self, offset: usize, ) -> Result<(Box<dyn AllocationController>, Box<dyn AllocationController>), SplitError>
Splits the current allocation in multiple separate allocations.
Source§fn duplicate(&self) -> Option<Box<dyn AllocationController>>
fn duplicate(&self) -> Option<Box<dyn AllocationController>>
Duplicates the current allocation with a clone on write strategy if the allocation
controller supports it.
Source§unsafe fn copy_into(&self, buf: &mut [u8])
unsafe fn copy_into(&self, buf: &mut [u8])
Reads the data from the current allocation controller and copy its content into the provided
buffer. Read more
Auto Trait Implementations§
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more