Skip to main content

Module frontend

Module frontend 

Source
Expand description

Cube Frontend Types.

Modules§

ABSOLUTE_POS
The position of the working unit in the whole cube kernel, without regards to cubes and axis.
ABSOLUTE_POS_X
The index of the working unit in the whole cube kernel along the X axis, without regards to cubes.
ABSOLUTE_POS_Y
The index of the working unit in the whole cube kernel along the Y axis, without regards to cubes.
ABSOLUTE_POS_Z
The index of the working unit in the whole cube kernel along the Z axis, without regards to cubes.
CUBE_CLUSTER_DIM
The total amount of cubes in a cluster.
CUBE_CLUSTER_DIM_X
The dimension of the cluster along the X axis.
CUBE_CLUSTER_DIM_Y
The dimension of the cluster along the Y axis.
CUBE_CLUSTER_DIM_Z
The dimension of the cluster along the Z axis.
CUBE_COUNT
The number of cubes launched.
CUBE_COUNT_X
The number of cubes launched along the X axis.
CUBE_COUNT_Y
The number of cubes launched along the Y axis.
CUBE_COUNT_Z
The number of cubes launched along the Z axis.
CUBE_DIM
The total amount of working units in a cube.
CUBE_DIM_X
The dimension of the cube along the X axis.
CUBE_DIM_Y
The dimension of the cube along the Y axis.
CUBE_DIM_Z
The dimension of the cube along the Z axis.
CUBE_POS
The cube position, without regards to axis.
CUBE_POS_CLUSTER
The cube position within the cluster.
CUBE_POS_CLUSTER_X
The cube position in the cluster along the X axis.
CUBE_POS_CLUSTER_Y
The cube position in the cluster along the Y axis.
CUBE_POS_CLUSTER_Z
The cube position in the cluster along the Z axis.
CUBE_POS_X
The cube position along the X axis.
CUBE_POS_Y
The cube position along the Y axis.
CUBE_POS_Z
The cube position along the Z axis.
PLANE_DIM
The total amount of working units in a plane.
PLANE_POS
The position of the plane within the cube (plane/warp/subgroup index).
UNIT_POS
The position of the working unit inside the cube, without regards to axis.
UNIT_POS_PLANE
The relative position of the working unit inside the plane, without regards to cube dimensions.
UNIT_POS_X
The position of the working unit inside the cube along the X axis.
UNIT_POS_Y
The position of the working unit inside the cube along the Y axis.
UNIT_POS_Z
The position of the working unit inside the cube along the Z axis.
assign
barrier
This module exposes barrier for asynchronous data transfer
branch
clamp
clamp_max
clamp_min
cmma
This module exposes cooperative matrix-multiply and accumulate operations.
comptime
Module containing compile-time information about the current runtime.
comptime_error
copy
copy_bulk
cube_comment
div_ceil
erf
fma
Expand method of fma().
hypot
index
index_mut
max
min
not
plane_all
Module containing the expand function for plane_all().
plane_any
Module containing the expand function for plane_any().
plane_ballot
Module containing the expand function for plane_ballot().
plane_broadcast
Module containing the expand function for plane_broadcast().
plane_elect
Module containing the expand function for plane_elect().
plane_exclusive_prod
Module containing the expand function for plane_exclusive_prod().
plane_exclusive_sum
Module containing the expand function for plane_exclusive_sum().
plane_inclusive_prod
Module containing the expand function for plane_inclusive_prod().
plane_inclusive_sum
Module containing the expand function for plane_inclusive_sum().
plane_max
Module containing the expand function for plane_max().
plane_min
Module containing the expand function for plane_min().
plane_prod
Module containing the expand function for plane_prod().
plane_shuffle
Module containing the expand function for plane_shuffle().
plane_shuffle_down
Module containing the expand function for plane_shuffle_down().
plane_shuffle_up
Module containing the expand function for plane_shuffle_up().
plane_shuffle_xor
Module containing the expand function for plane_shuffle_xor().
plane_sum
Module containing the expand function for plane_sum().
push_validation_error
range
range_stepped
rhypot
select
select_many
set_polyfill
Expand module of set_polyfill().
slice
storage_type_of
sub
synchronization
tma_group_commit
tma_group_wait
tma_group_wait_read
tma_store_1d
tma_store_2d
tma_store_3d
tma_store_4d
tma_store_5d
type_of

Macros§

__expand_debug_print
Print a formatted message using the target’s debug print facilities. The format string is target specific, but Vulkan and CUDA both use the C++ conventions. WGSL isn’t currently supported.
debug_print
Print a formatted message using the target’s debug print facilities. The format string is target specific, but Vulkan and CUDA both use the C++ conventions. WGSL isn’t currently supported.

Structs§

Array
A contiguous array of elements.
Atomic
An atomic numerical type wrapping a normal numeric primitive. Enables the use of atomic operations, while disabling normal operations. In WGSL, this is a separate type - on CUDA/SPIR-V it can theoretically be bitcast to a normal number, but this isn’t recommended.
BufferBinding
Buffer representation with a reference to the server handle.
BufferCompilationArg
ComptimeCell
A cell that can store and mutate a cube type during comptime.
ComptimeCellExpand
Expand type of ComptimeCell.
Const
DynamicScalar
A fake element type that can be configured to map to any other element type.
DynamicSize
A fake constant type that can be configured to map to any comptime value.
Im2col
Im2col indexing. Loads a “column” (not the same column as im2col) of pixels into shared memory, with a certain offset (kernel position). The corners are the bounds to load pixels from at offset 0, so the top left corner of the kernel. The offset is added to the corner offsets, so a (-1, -1) corner will stop the bounding box at (1, 1) for kernel offset (2, 2).
Im2colArgs
Args for im2col tensor maps
Im2colCompilationArg
Im2colExpand
Im2colLaunch
Im2colWide
1D im2col, not properly supported yet
Im2colWideArgs
Args for im2col wide tensor maps
Im2colWideCompilationArg
Im2colWideExpand
Im2colWideLaunch
InputScalar
A way to define an input scalar without a generic attached to it.
InputScalarCompilationArg
InputScalarExpand
NativeExpand
Expand type of a native GPU type, i.e. scalar primitives, arrays, shared memory.
OptionExpand
OrderingExpand
OwnedTensor
OwnedTensorExpand
RangeExpand
RangeFromExpand
RangeFullExpand
RangeInclusiveExpand
RangeToExpand
RangeToInclusiveExpand
ReadOnly
ReadWrite
Registry
It is similar to a map, but where the keys are stored at comptime, but the values can be runtime variables.
RuntimeCell
RuntimeCellExpand
Sequence
A sequence of cube types that is inlined during compilation.
SequenceArg
SequenceCompilationArg
SequenceExpand
Expand type of Sequence.
Shared
SteppedRangeExpand
SwitchExpand
SwitchExpandExpr
Tensor
The tensor type is a wrapper around [T] that comes with more metadata such as stride and shape.
TensorBinding
Tensor representation with a reference to the server handle, the strides and the shape.
TensorCompilationArg
Compilation argument for a tensor.
TensorExpand
TensorLayout
TensorMap
A CUDA CUtensorMap object. Represents a tensor encoded with a lot of metadata, and is an opaque packed object at runtime. Does not support retrieving any shapes or strides, nor does it give access to the pointer. So these need to be passed separately in an aliased Tensor if needed.
TensorMapArg
Grid constant tensor map, currently only maps to CUDA tensormap. May be interleaved or swizzled, but last dimension must be contiguous (since strides don’t include the last dimension).
TensorMeta
TensorMetaCompilationArg
TensorMetaExpand
TensorMetaLaunch
TensorReinterpret
TensorView
TensorViewBuilder
TensorViewBuilderCompilationArg
TensorViewBuilderExpand
TensorViewBuilderLaunch
TensorViewExpand
Tiled
Regular tiled tensor map
TiledArgs
Args for tiled tensor maps
TiledCompilationArg
TiledExpand
TiledLaunch
Vector
A contiguous list of elements that supports auto-vectorized operations.

Enums§

BufferArg
ComptimeOption
ComptimeOptionArgs
ComptimeOptionCompilationArg
ComptimeOptionExpand
IfElseExpand
IfElseExprExpand
MatchExpand
MatchExpandExpr
OobFill
What value to use when filling out of bounds values
OptionArgs
OptionCompilationArg
TensorArg
Argument to be used for tensors passed as arguments to kernels.
TensorClampMode
TensorMapFormat
Format of TensorMap
TensorMapInterleave
Interleave setting for TensorMap
TensorMapPrefetch
Additional prefetching to perform during load Specifies L2 fetch size which indicates the byte granularity at which L2 requests are filled from DRAM
TensorMapSwizzle
Data are organized in a specific order in global memory; however, this may not match the order in which the application accesses data in shared memory. This difference in data organization may cause bank conflicts when shared memory is accessed. In order to avoid this problem, data can be loaded to shared memory with shuffling across shared memory banks. When interleave is TensorMapInterleave::B32, swizzle must be TensorMapSwizzle::B32. Other interleave modes can have any swizzling pattern.

Constants§

ABSOLUTE_POS
The position of the working unit in the whole cube kernel, without regards to cubes and axis.
ABSOLUTE_POS_X
The index of the working unit in the whole cube kernel along the X axis, without regards to cubes.
ABSOLUTE_POS_Y
The index of the working unit in the whole cube kernel along the Y axis, without regards to cubes.
ABSOLUTE_POS_Z
The index of the working unit in the whole cube kernel along the Z axis, without regards to cubes.
CUBE_CLUSTER_DIM
The total amount of cubes in a cluster.
CUBE_CLUSTER_DIM_X
The dimension of the cluster along the X axis.
CUBE_CLUSTER_DIM_Y
The dimension of the cluster along the Y axis.
CUBE_CLUSTER_DIM_Z
The dimension of the cluster along the Z axis.
CUBE_COUNT
The number of cubes launched.
CUBE_COUNT_X
The number of cubes launched along the X axis.
CUBE_COUNT_Y
The number of cubes launched along the Y axis.
CUBE_COUNT_Z
The number of cubes launched along the Z axis.
CUBE_DIM
The total amount of working units in a cube.
CUBE_DIM_X
The dimension of the cube along the X axis.
CUBE_DIM_Y
The dimension of the cube along the Y axis.
CUBE_DIM_Z
The dimension of the cube along the Z axis.
CUBE_POS
The cube position, without regards to axis.
CUBE_POS_CLUSTER
The cube position within the cluster.
CUBE_POS_CLUSTER_X
The cube position in the cluster along the X axis.
CUBE_POS_CLUSTER_Y
The cube position in the cluster along the Y axis.
CUBE_POS_CLUSTER_Z
The cube position in the cluster along the Z axis.
CUBE_POS_X
The cube position along the X axis.
CUBE_POS_Y
The cube position along the Y axis.
CUBE_POS_Z
The cube position along the Z axis.
PLANE_DIM
The total amount of working units in a plane.
PLANE_POS
The position of the plane within the cube (plane/warp/subgroup index).
UNIT_POS
The position of the working unit inside the cube, without regards to axis.
UNIT_POS_PLANE
The relative position of the working unit inside the plane, without regards to cube dimensions.
UNIT_POS_X
The position of the working unit inside the cube along the X axis.
UNIT_POS_Y
The position of the working unit inside the cube along the Y axis.
UNIT_POS_Z
The position of the working unit inside the cube along the Z axis.

Traits§

Abs
AbsExpand
AddAssignExpand
AddExpand
AndExpand
ArcCos
ArcCosExpand
ArcCosh
ArcCoshExpand
ArcSin
ArcSinExpand
ArcSinh
ArcSinhExpand
ArcTan
ArcTan2
ArcTan2Expand
ArcTanExpand
ArcTanh
ArcTanhExpand
AsDerefExpand
AsDerefMutExpand
AsMutExpand
Expand version of AsMut. The Self version must be implemented by all ExpandTypes, since CubeCL also uses it to implement &mut x.
AsRefExpand
Expand version of AsRef. Like AsRef<Self> it’s implemented for all ExpandTypes. This is called when the Rust code uses &x.
Assign
BitAndAssignExpand
BitAndExpand
BitOrAssignExpand
BitOrExpand
BitXorAssignExpand
BitXorExpand
BoolOps
Extension trait for bool.
Cast
Enable elegant casting from any to any CubeElem
Ceil
CeilExpand
CloneExpand
CompilationArg
Argument used during the compilation of kernels.
Cos
CosExpand
Cosh
CoshExpand
CountOnes
CountOnesExpand
CubeAdd
CubeAddAssign
CubeAnd
CubeBitAnd
CubeBitAndAssign
CubeBitOr
CubeBitOrAssign
CubeBitXor
CubeBitXorAssign
CubeComptime
A type that can be used as a kernel comptime argument. Note that a type doesn’t need to implement CubeComptime to be used as a comptime argument. However, this facilitate the declaration of generic cube types.
CubeDebug
CubeDiv
CubeDivAssign
CubeEnum
CubeIndex
Trait bound that can be used to guarantee the expand also implements IndexExpand
CubeIndexMut
CubeMul
CubeMulAssign
CubeNeg
CubeNot
CubeOption
Extensions for Option
CubeOptionDefault
Extensions for Option that require default
CubeOr
CubeOrd
CubeOrdering
CubePartialEq
CubePartialOrd
CubePrimitive
Form of CubeType that encapsulates all primitive types: Numeric, UInt, Bool
CubePrimitiveExpand
CubeRem
CubeRemAssign
CubeShl
CubeShlAssign
CubeShr
CubeShrAssign
CubeSub
CubeSubAssign
CubeType
Types used in a cube function must implement this trait
DefaultExpand
Degrees
DegreesExpand
DerefExpand
CubeCL version of Deref. Unlike those traits, this trait produces owned values directly. Maps to *x.
DivAssignExpand
DivCeil
DivCeilExpand
DivExpand
Dot
DotExpand
Erf
ErfExpand
Exp
ExpExpand
ExpandTypeClone
Expm1
Expm1Expand
FindFirstSet
FindFirstSetExpand
Float
Floating point numbers. Used as input in float kernels
FloatBits
FloatBitsExpand
FloatOps
FloatOpsExpand
Floor
FloorExpand
Hypot
HypotExpand
IndexExpand
IndexMutExpand
Int
Signed or unsigned integer. Used as input in int kernels
IntoComptime
Trait for marking a function return value as comptime when the compiler can’t infer it.
IntoExpand
IntoMut
Convert an expand type to a version with mutable registers when necessary.
IntoRuntime
Trait useful to convert a comptime value into runtime value.
InverseSqrt
InverseSqrtExpand
IsInf
IsInfExpand
IsNan
IsNanExpand
Iterable
Something that can be iterated on by a for loop. Currently only includes Range, StepBy and Sequence.
LaunchArg
Defines how a launch argument can be expanded.
LeadingZeros
LeadingZerosExpand
List
Type from which we can read/to which we can write values in cube functions.
ListExpand
Type from which we can read/to which we can write values in cube functions.
Log
Log1p
Log1pExpand
LogExpand
Magnitude
MagnitudeExpand
ModFloor
ModFloorExpand
MulAssignExpand
MulExpand
MulHi
MulHiExpand
NativeAssign
Trait for native types that can be assigned. For non-native composites, use the normal Assign.
NativeCubeType
NegExpand
Normalize
NormalizeExpand
NotExpand
Numeric
Type that encompasses both (unsigned or signed) integers and floats Used in kernels that should work for both.
OneExpand
OptionExt
OrExpand
OrdExpand
PartialEqExpand
PartialOrdExpand
Powf
PowfExpand
Powi
PowiExpand
Radians
RadiansExpand
Recip
RecipExpand
RegistryQuery
To find an item from the registry, the query must be able to be translated to the actual key type.
Reinterpret
Enables reinterpetring the bits from any value to any other type of the same size.
RemAssignExpand
RemExpand
ReverseBits
ReverseBitsExpand
Rhypot
RhypotExpand
Round
RoundExpand
RuntimeAssign
SaturatingAdd
SaturatingAddExpand
SaturatingSub
SaturatingSubExpand
Scalar
Marker trait for scalar primitives. Should be implemented for all scalar CubePrimitives, but not for Vector or non-standard primitives like Barrier. Alternatively, treat these as types that can be stored in a [Vector]
ScalarArgSettings
Similar to [ArgSettings], however only for scalar types that don’t depend on the Runtime trait.
ShlAssignExpand
ShlExpand
ShrAssignExpand
ShrExpand
Sin
SinExpand
Sinh
SinhExpand
Size
SizedContainer
SizedContainerExpand
SliceExt
SliceOperator
SliceOperatorExpand
SliceVectorExt
SliceVisibility
Sqrt
SqrtExpand
SubAssignExpand
SubExpand
Tan
TanExpand
Tanh
TanhExpand
TensorMapKind
TrailingZeros
TrailingZerosExpand
Trunc
TruncExpand
VectorSum
VectorSumExpand
Vectorized
VectorizedExpand
ZeroExpand

Functions§

__expand_assign
__expand_deref
assign_binary_op_expand
break_expand
copy
Copy one element between two array-likes without intermediates.
copy_bulk
Bulk copy length elements between two array-likes without intermediates.
debug_call_expand
Calls a function and inserts debug symbols if debug is enabled.
debug_source_expand
Adds source instruction if debug is enabled
debug_var_expand
Registers name for an expand if possible
div_ceil
erf
expand_erf
expand_himul_64
expand_himul_sim
expand_hypot
expand_rhypot
fast_math_expand
fma
Fused multiply-add A*B+C.
for_expand
from_raw_parts
hypot
Computes the hypotenuse of a right triangle given the lengths of the other two sides.
if_else_expand
if_else_expr_expand
if_expand
init_expand
into_mut_assign
loop_expand
match_expand
match_expand_expr
max
The maximum of two values, not requiring Ord. Provided for clarity in certain cases, though clamp_min may sometimes be more clear.
min
The minimum of two values, not requiring Ord. Provided for clarity in certain cases, though clamp_max may sometimes be more clear.
plane_all
Perform a reduce all operation across all units in a plane.
plane_any
Perform a reduce any operation across all units in a plane.
plane_ballot
Perform a ballot operation across all units in a plane. Returns a set of 32-bit bitfields as a Vector, with each element containing the value from 32 invocations. Note that vector size will always be set to 4 even for PLANE_DIM <= 64, because we can’t retrieve the actual plane size at expand time. Use the runtimePLANE_DIM to index appropriately.
plane_broadcast
Broadcasts the value from the specified plane unit at the given index to all active units within that plane. Requires a constant index. For non-constant indices, use plane_shuffle().
plane_elect
Returns true if the cube unit has the lowest plane_unit_id among active unit in the plane
plane_exclusive_prod
Perform an exclusive product operation across all units in a plane. This multiplies all values to the “left” of the unit, excluding this unit’s value. The 0th unit will be set to E::one(). Also known as “exclusive prefix product” or “exclusive scan”.
plane_exclusive_sum
Perform an exclusive sum operation across all units in a plane. This sums all values to the “left” of the unit, excluding this unit’s value. The 0th unit will be set to E::zero(). Also known as “exclusive prefix sum” or “exclusive scan”.
plane_inclusive_prod
Perform an inclusive product operation across all units in a plane. This multiplies all values to the “left” of the unit, including this unit’s value. Also known as “prefix product” or “inclusive scan”.
plane_inclusive_sum
Perform an inclusive sum operation across all units in a plane. This sums all values to the “left” of the unit, including this unit’s value. Also known as “prefix sum” or “inclusive scan”.
plane_max
Perform a reduce max operation across all units in a plane.
plane_min
Perform a reduce min operation across all units in a plane.
plane_prod
Perform a reduce prod operation across all units in a plane.
plane_shuffle
Perform an arbitrary lane shuffle operation across the plane. Each unit reads the value from the specified source lane.
plane_shuffle_down
Perform a shuffle down operation across the plane. Each unit reads the value from a unit with a higher lane ID (current_id + delta). Units at the end will read from themselves if (lane_id + delta >= plane_dim).
plane_shuffle_up
Perform a shuffle up operation across the plane. Each unit reads the value from a unit with a lower lane ID (current_id - delta). Units with lane_id < delta will read from themselves (no change).
plane_shuffle_xor
Perform a shuffle XOR operation across the plane. Each unit exchanges its value with another unit at an index determined by XOR with the mask. This is useful for butterfly reduction patterns.
plane_sum
Perform a reduce sum operation across all units in a plane.
printf_expand
Prints a formatted message using the print debug layer in Vulkan, or printf in CUDA.
push_validation_error
Push a validation error that will make the kernel compilation to fail.
range
integer range. Equivalent to:
range_stepped
Stepped range. Equivalent to:
return_expand
rhypot
Computes the reciprocal of the hypotenuse of a right triangle given the lengths of the other two sides.
select
Executes both branches, then selects a value based on the condition. This should be branchless, but might depend on the compiler.
select_many
Same as select() but with vectors instead.
set_polyfill
Change the meaning of the given cube primitive type during compilation.
storage_type_of
switch_expand
switch_expand_expr
sync_async_proxy_shared
sync_async_proxy_shared is a synchronization fence for the experimental SM 9.0+ copy functions, applying bidirectionally between the async proxy (i.e. TMA) and shared memory. Should be used after initializing the barriers, and before the copy operation. PTX: fence.proxy.async.shared::cta Experimental and subject to change.
sync_cube
Coordinates the following among all invocations in the current cube:
sync_plane
Synchronizes units within their plane (e.g., warp or SIMD group).
sync_storage
Sync_storage is the same but change “cube address space(shared memory)” to “storage address space(input args)”. But the set of invocations that are collaborating is still only the invocations in the same cube.There is no guarantee about using barriers alone to make the writes to storage buffer in one cube become visible to invocations in a different cube.
tma_group_commit
Commit an async tensor operation. Not sure how this works, poor docs. But you need to call it after a write, but not after reads.
tma_group_wait
Wait until at most max_pending TMA copy operations are in flight.
tma_group_wait_read
Wait TMA copy operations have finished reading from shared memory, with at most max_pending operations being unfinished.
tma_store_1d
Copy a tile from a shared memory src to a global memory dst, with the provided offsets. Should be combined with memcpy_async_tensor_commit and memcpy_async_tensor_wait_read.
tma_store_2d
Copy a tile from a shared memory src to a global memory dst, with the provided offsets. Should be combined with memcpy_async_tensor_commit and memcpy_async_tensor_wait_read.
tma_store_3d
Copy a tile from a shared memory src to a global memory dst, with the provided offsets. Should be combined with memcpy_async_tensor_commit and memcpy_async_tensor_wait_read.
tma_store_4d
Copy a tile from a shared memory src to a global memory dst, with the provided offsets. Should be combined with memcpy_async_tensor_commit and memcpy_async_tensor_wait_read.
tma_store_5d
Copy a tile from a shared memory src to a global memory dst, with the provided offsets. Should be combined with memcpy_async_tensor_commit and memcpy_async_tensor_wait_read.
type_of
unary_expand
unary_expand_fixed_output
workgroup_uniform_load
Barrier, then load reference with the result marked workgroup-uniform — mirrors WGSL’s workgroupUniformLoad. Lets a workgroup-shared value gate control flow that contains barriers. Non-WGSL backends lower it to [sync_cube] plus a plain load.
workgroup_uniform_load_atomic
Atomic counterpart of [workgroup_uniform_load]: barrier + atomic load, returning the underlying numeric (WGSL’s atomic workgroupUniformLoad overload).

Type Aliases§

SharedExpand
SliceExpand