Skip to main content
Log in

Mojo struct

DeviceMemory

DeviceMemory is an owning buffer allocated on a (possibly non-CPU) Device.

Fields​

  • ​name (Optional[String]):
  • ​num_bytes (Int):

Implemented traits​

AnyType, CollectionElement, Copyable, DeviceBuffer, Movable, StringableRaising

Methods​

__init__​

__init__(inout self: Self)

Constructs a DeviceMemory object in a state that is only valid for deletion. Can be used to represent a moved from state.

__init__(inout self: Self, num_bytes: Int, device: Device, name: Optional[String] = #kgen.none)

Allocates DeviceMemory from the Device's address space.

Args:

  • ​num_bytes (Int): Size of the DeviceMemory buffer to allocate in bytes.
  • ​device (Device): Device on which to perform the allocation.
  • ​name (Optional[String]): Optional name for the DeviceMemory.

__init__[type: DType, rank: Int](inout self: Self, owned tensor: Tensor[type, rank])

Creates a DeviceMemory from the existing tensor storage.

Args:

  • ​tensor (Tensor[type, rank]): Tensor whose storage to use.

__init__(inout self: Self, owned anytensor: AnyTensor)

Creates a device tensor the existing anytensor storage.

Args:

  • ​anytensor (AnyTensor): AnyTensor whose storage to use.

__copyinit__​

__copyinit__(inout self: Self, existing: Self)

__moveinit__​

__moveinit__(inout self: Self, owned existing: Self)

__del__​

__del__(owned self: Self)

De-allocate and destroy the DeviceMemory.

Note: this will also decrement the refcount on the Device used to allocate the DeviceMemory.

bytecount​

bytecount(self: Self) -> Int

Returns the number of bytes in the DeviceMemory.

get_device​

get_device(self: Self) -> Device

Returns the device on which the DeviceMemory was allocated.

device​

device(self: Self) -> Device

Returns the device on which the DeviceMemory was allocated.

__str__​

__str__(self: Self) -> String

Returns a description of the DeviceMemory.

copy_into​

copy_into(self: Self, inout dst_memory: Self)

Copies the contents of self into preallocated DeviceMemory.

Args:

  • ​dst_memory (Self): The destination DeviceMemory of the copy.

copy_to​

copy_to(self: Self, dev: Device, name: Optional[String] = #kgen.none) -> Self

Copies the contents of self into DeviceMemory allocated on dev. Note: this function allocates memory on dev.

Args:

  • ​dev (Device): The Device on which to allocate the new DeviceMemory.
  • ​name (Optional[String]): Optional name of the new DeviceMemory.

Returns:

Newly allocated DeviceMemory containing a copy of self's contents.

Raises:

If the DeviceMemory is backed by the same Device object as dev.

move_to​

move_to(owned self: Self, dev: Device) -> Self

Returns self if already allocated on dev, otherwise copy the contents of self to dev.

Args:

  • ​dev (Device): The Device on which the returned buffer is allocated.

Returns:

DeviceMemory located in dev's address space.

unsafe_ptr​

unsafe_ptr(self: Self) -> UnsafePointer[SIMD[uint8, 1], 0, 0, alignof[::AnyType,__mlir_type.!kgen.target]() if triple_is_nvidia_cuda() else 1]

Returns a pointer to the underlying device memory.

Note: The caller is responsible for ensuring that the returned pointer is not used after its owner is last used.

take​

take(inout self: Self) -> Self

Takes and returns the contents of self, leaving self in an empty but destructible state.

Was this page helpful?