pub struct Block {
pub device: usize,
pub size: usize,
pub ptr: usize,
pub stream: StreamId,
pub stream_uses: HashSet<StreamId>,
pub allocated: bool,
pub prev: Option<usize>,
pub next: Option<usize>,
pub in_small_pool: bool,
/* private fields */
}Expand description
Metadata for a contiguous region of GPU memory.
Blocks form a doubly-linked list within a segment (a single driver allocation). Splitting a block creates a new block for the remainder and links them. Coalescing merges adjacent free blocks by adjusting the linked list and summing sizes.
§CL-323
Fields§
§device: usizeDevice ordinal that owns this memory.
size: usizeSize of this block in bytes.
ptr: usizeVirtual address of the block’s start (byte offset within its segment).
Used for ordering during coalescing. For blocks that own real GPU memory,
this is derived from the CudaSlice pointer. For sub-blocks created by
splitting, this is computed as parent.ptr + parent.size_before_split.
stream: StreamIdThe CUDA stream on which this block was originally allocated.
stream_uses: HashSet<StreamId>Set of streams that have used this block (via record_stream).
A block cannot be reused until all recorded stream work is complete.
allocated: boolWhether this block is currently handed out to a caller.
prev: Option<usize>Index of the previous block in the segment’s linked list, or None.
next: Option<usize>Index of the next block in the segment’s linked list, or None.
in_small_pool: boolWhether this block is in the small pool.
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Block
impl RefUnwindSafe for Block
impl Send for Block
impl Sync for Block
impl Unpin for Block
impl UnsafeUnpin for Block
impl UnwindSafe for Block
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more