Skip to main content

Block

Struct Block 

Source
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: usize

Device ordinal that owns this memory.

§size: usize

Size of this block in bytes.

§ptr: usize

Virtual 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: StreamId

The 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: bool

Whether 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: bool

Whether this block is in the small pool.

Implementations§

Source§

impl Block

Source

pub fn new( device: usize, size: usize, ptr: usize, stream: StreamId, in_small_pool: bool, ) -> Self

Create a new block with the given parameters.

Source

pub fn is_split(&self) -> bool

Whether this block was created by splitting (has neighbors).

Trait Implementations§

Source§

impl Debug for Block

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<T> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,