docs / stdlib / xpu

Stdlib index
  1. Overview
  1. Captured-borrow migration worklist (3.3.3)
  2. Owned-bind migration worklist (8.2.7)
  3. Return-side title audit — the ride-through enumeration
  4. stdlib ownership audit
  5. stdlib ownership dispositions (plan 1.3.1 / 4.3.1)

codec

  1. Base64

codec / csv

  1. Csv

codec / json

  1. Json

collection

  1. ArrayList
  2. BPlusTree
  3. Cache
  4. Collectors
  5. HashMap
  6. HashSet
  7. Heap
  8. ImmutableList
  9. ImmutableMap
  10. ImmutableSet
  11. LinkedList
  12. RedBlackTree
  13. Sort

collection / ltm

  1. LtmBPlusTree

concurrent

  1. AtomicInt32
  2. AtomicInt64
  3. Channel
  4. FiberLocal
  5. Lock
  6. Mutex
  7. RwLock
  8. Semaphore
  9. Tasks

error

  1. Exception
  2. NoOptionalValueException
  3. RecoverableException
  4. Throwable
  5. UnrecoverableException

gfx

  1. Sampler
  2. Texture2D

hash

  1. Blake3
  2. DefaultHasher
  3. Hash
  4. MD5
  5. Sha1
  6. Sha256
  7. SipHash
  8. XXHash3

ifx

  1. BackendRegistry
  2. Window

io

  1. Buffer

io / file

  1. File
  2. FileInfo
  3. FileReader
  4. FileWriter
  5. Path
  6. Watcher

io / net

  1. IpAddress
  2. Server
  3. ServerBuilder
  4. SocketAddress
  5. TcpListener
  6. TcpStream
  7. UdpSocket

io / net / dns

  1. Dns

io / net / tls

  1. TlsConnection
  2. TlsListener

io / net / uri

  1. Uri
  2. UriBuilder

lang

  1. Guid
  2. Math
  3. Optional
  4. Pair
  5. Slice
  6. String
  7. StringBuilder

lang / stream

  1. ArrayStream
  2. Stream

math

  1. Camera
  2. Color
  3. DType
  4. Ray
  5. Rotation
  6. Tensor
  7. Transform

math / fft

  1. Fft

math / linalg

  1. LinAlg

math / npio

  1. Npy

math / poly

  1. Poly

math / random

  1. Generator

math / stats

  1. Stats

nucleo

  1. Columns — the Arrow-laid-out substrate
  2. Fused tensor expressions — Fuse
  3. Table — the lazy, typed dataframe
  4. Tape — define-by-run autograd
  5. Transform intrinsics — Grad, Vmap, Jit

process

  1. Command
  2. Process

reflect

  1. Class

search / distance

  1. Distance

search / fuzzy

  1. Matcher

search / ngram

  1. Index

session

  1. PackageInstallException
  2. Packages

time

  1. Clock
  2. DateTimeFormatter
  3. Duration
  4. Instant
  5. LocalDate
  6. LocalDateTime
  7. LocalTime
  8. Period
  9. ZonedDateTime
  10. ZoneId
  11. ZoneOffset

wire

  1. Compressor
  2. Decompressor
  3. Encoder
  4. Schema
  5. SchemaEncoder

xpu

  1. Device
  2. KernelBuffer
  3. KernelStream

xpu / mesh

  1. MeshSimplifier

KernelBuffer<T>

cajeta.xpu.KernelBuffer — unified handle to device memory, the cross-cutting type higher-level libraries write against. Backends tag the underlying storage handle (CUdeviceptr / hipDeviceptr_t / VkBuffer); from the user’s perspective it is one opaque type with a length and the standard upload/download/free operations. The device memory is an owned resource tied to the handle’s lifetime via RAII: the constructor acquires it and ~KernelBuffer() releases it at scope exit, so forgetting to free() cannot leak VRAM. A launch borrows each KernelBuffer argument until the next KernelStream.sync(); letting a buffer reach its drop (or an explicit free()) while a launch still references it is a compile error (XPU-K02). Indexing buf[i] is only legal inside @Kernel or @Device functions; on the host, use the explicit upload/download paths.

uint32 n = 1024;
float32[] hx = heap float32[n];
KernelBuffer<float32> x = heap KernelBuffer<float32>(n);   // allocates device memory
x.upload(hx);
// ... launch kernels that read/write x, then stream.sync() ...
x.download(hx);
// device memory freed automatically when x drops at scope exit

Methods

Signature
KernelBuffer(uint64 elementCount)RAII constructor: allocate device storage for elementCount elements — the idiomatic form
static #KernelBuffer<T> alloc(uint64 n)Allocate a device buffer of n elements and return a heap handle (factory-style escape)
uint64 length()Element count
void allocate()Allocate device storage for this buffer’s length() elements (pairs with direct construction)
void allocate(int32 kind)Allocate with a chosen memory residency (a MemoryKind ordinal: Device, Pinned, Unified)
void upload(T[] host)Host → device transfer; the host array’s element count must equal length()
void download(T[] host)Device → host transfer
void uploadAsync(T[] host, KernelStream stream)Asynchronous host → device upload, enqueued on stream; completes by the next stream.sync()
void downloadAsync(T[] host, KernelStream stream)Asynchronous device → host download, the twin of uploadAsync
void hostStore(T[] host)Zero-copy host → buffer write for a host-accessible buffer (MemoryKind.Unified / .Pinned); no device transfer
void hostLoad(T[] host)Zero-copy buffer → host read, the twin of hostStore
void free()Explicit early release — idempotent escape hatch; the destructor then no-ops
#KernelBuffer<T> slice(uint64 offset, uint64 count)Non-owning sub-buffer view over count elements starting at offset; shares this buffer’s storage, which must outlive the view

⚑ = @EntryPoint

See also

Source: docs/stdlib/xpu/KernelBuffer.md · 2 min read · 385 words