numba_vulkan.vkimpl#
Lowering of Vulkan-specific functions and of array element access.
Attributes#
Functions#
|
Lower a Vulkan dispatcher used as a global or closure variable. |
|
Lower |
|
LLVM type of one element of a buffer holding |
|
Convert between |
|
LLVM type of one element of an array's buffer. |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Element of an array by its position in row-major order. |
|
Lower |
|
Lower |
|
Lower |
|
The value of an array whose shape is known at compile time. |
|
Lower |
|
Lower |
|
Lower |
|
The broadcast shape of an expression. |
|
Compute one element of an expression. |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Write an expression, element by element, into a view. |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
|
Lower |
Module Contents#
- numba_vulkan.vkimpl.registry#
- numba_vulkan.vkimpl.lower#
- numba_vulkan.vkimpl.lower_dispatcher_constant(context, builder, ty, pyval)#
Lower a Vulkan dispatcher used as a global or closure variable.
- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
ty (VulkanDispatcherType) – Type of the constant.
pyval (VulkanDispatcher) – The dispatcher.
- Returns:
A dummy value; calls are resolved at compile time.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_global_id(context, builder, sig, args)#
Lower
global_id(axis)to the GlobalInvocationId built-in.- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
sig (numba.core.typing.Signature) – Signature the call was typed with.
args (sequence of llvmlite.ir.Value) – Argument values, in the types of
sig.args.
- Returns:
The
int32invocation index along the literal axis.- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.buffer_element_type(context, dtype)#
LLVM type of one element of a buffer holding
dtypevalues.- Parameters:
context (VulkanTargetContext) – The target context.
dtype (numba.types.Type) – Numba element type.
- Returns:
i32for booleans (SPIR-V has no storable bool), otherwise the data type of the integer or float.- Return type:
llvmlite.ir.Type
- Raises:
VulkanUnsupportedError – If
dtypeis not a boolean, integer or float.
- numba_vulkan.vkimpl.half_conversion(builder, value, target)#
Convert between
halfandfloatbehind LLVM’s back.LLVM would fold
fptrunc(fpext(x) * 2)into ahalfmultiply, which needs theshaderFloat16device feature. The conversions are therefore placeholder calls until after optimisation (see numba_vulkan.buffers.expand_buffer_access).- Parameters:
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
value (llvmlite.ir.Value) – A
halforfloatvalue.target (llvmlite.ir.Type) – The other of the two types.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.storage_type(context, aryty)#
LLVM type of one element of an array’s buffer.
- Parameters:
context (VulkanTargetContext) – The target context.
aryty (VulkanArray) – The array type.
- Returns:
halffor arrays offloat16values, otherwise see buffer_element_type.- Return type:
llvmlite.ir.Type
- numba_vulkan.vkimpl.lower_getitem(context, builder, sig, args)#
Lower
array[index].- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
sig (numba.core.typing.Signature) – Signature the call was typed with.
args (sequence of llvmlite.ir.Value) – Argument values, in the types of
sig.args.
- Returns:
The element, or a view of the same buffer if the index contains slices or covers only the leading axes.
- Return type:
llvmlite.ir.Value
- Raises:
VulkanUnsupportedError – If the index contains anything but integers and slices.
- numba_vulkan.vkimpl.lower_getitem_ellipsis(context, builder, sig, args)#
Lower
array[...]; see lower_getitem.
- numba_vulkan.vkimpl.lower_transpose(context, builder, ty, value)#
Lower
array.T: a view with the axes reversed.- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
ty (VulkanArray) – Type of the array.
value (llvmlite.ir.Value) – The array.
- Returns:
The transposed view; the array itself for fewer than two axes.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_setitem_ellipsis(context, builder, sig, args)#
Lower
array[...] = value; see lower_setitem.
- numba_vulkan.vkimpl.lower_setitem(context, builder, sig, args)#
Lower
array[index] = value.If the index selects one element, the value is cast to the element type and stored. If it selects a view, the view is filled with a scalar, or with the elements of an array of the same shape.
- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
sig (numba.core.typing.Signature) – Signature the call was typed with.
args (sequence of llvmlite.ir.Value) – Argument values, in the types of
sig.args.
- Returns:
A dummy value.
- Return type:
llvmlite.ir.Value
- Raises:
VulkanUnsupportedError – If the index contains anything but integers and slices, if the value is an array of another dimensionality, or if it is an array in the same buffer as the target (the copy could overlap).
- numba_vulkan.vkimpl.lower_getiter(context, builder, sig, args)#
Lower
iter(array): an iterator over the first axis.- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
sig (numba.core.typing.Signature) – Signature the call was typed with.
args (sequence of llvmlite.ir.Value) – The array.
- Returns:
The iterator.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_iternext(context, builder, sig, args, result)#
Lower
next(iterator)for an array iterator.Yields elements of a 1-d array and views along the first axis otherwise.
- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
sig (numba.core.typing.Signature) – Signature the call was typed with.
args (sequence of llvmlite.ir.Value) – The iterator.
result (numba.core.imputils._IternextResult) – Receives the validity flag and the yielded value.
- numba_vulkan.vkimpl.flat_item(typingctx, array, position)#
Element of an array by its position in row-major order.
- Parameters:
array (VulkanArray or VulkanExpr) – The array or array expression, of any dimensionality.
position (int) – Position between 0 and
array.size - 1; it is not checked.
- Returns:
The element.
- Return type:
scalar
- numba_vulkan.vkimpl.lower_local_size(context, builder, sig, args)#
Lower
local_size(axis).The workgroup size is only fixed when the kernel is compiled, after its functions; a placeholder call stands for it until then (see numba_vulkan.codegen.VulkanCodeLibrary).
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_num_groups(context, builder, sig, args)#
Lower
num_groups(axis).Grids larger than the device allows are dispatched in parts, for which the
NumWorkgroupsbuilt-in gives the size of the part. The size of the whole grid is passed as push constants instead; a placeholder call stands for it until the push-constant block is laid out (see numba_vulkan.codegen.num_groups_members).- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_barrier(context, builder, sig, args)#
Lower
barrier(); see numba_vulkan.buffers.barrier.- Returns:
A dummy value.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.static_array(context, builder, aryty, shape)#
The value of an array whose shape is known at compile time.
- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
aryty (VulkanArray) – Type of the array.
- Returns:
The metadata structure, with C-contiguous strides and offset 0.
- Return type:
llvmlite.ir.Value
Lower
shared.array(shape, dtype).The memory is a workgroup variable named after the array’s binding, declared when buffer accesses are expanded; here only the metadata of the array is built.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_local_array(context, builder, sig, args)#
Lower
local.array(shape, dtype); see lower_shared_array.- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_cas(context, builder, sig, args)#
Lower
atomic.cas(array, index, expected, value).- Returns:
The element’s previous value.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.expression_shape(context, builder, ty, value)#
The broadcast shape of an expression.
Raises
ValueErrorin the kernel if the operands cannot be broadcast together.- Returns:
One
intpextent per dimension.- Return type:
list of llvmlite.ir.Value
- numba_vulkan.vkimpl.expression_element(context, builder, ty, value, indices)#
Compute one element of an expression.
- Parameters:
context (VulkanTargetContext) – The target context.
builder (llvmlite.ir.IRBuilder) – Builder positioned where the code is emitted.
ty (VulkanExpr) – Type of the expression.
value (llvmlite.ir.Value) – The expression.
indices (list of llvmlite.ir.Value) – One non-negative, in-range
intpindex per dimension of ty.
- Returns:
The element, of type
ty.dtype.- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_expression_getitem(context, builder, sig, args)#
Lower
expression[index]: compute one element.- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_expression_shape(context, builder, ty, value)#
Lower
expression.shape.
- numba_vulkan.vkimpl.lower_expression_size(context, builder, ty, value)#
Lower
expression.size.
- numba_vulkan.vkimpl.lower_expression_ndim(context, builder, ty, value)#
Lower
expression.ndim.
- numba_vulkan.vkimpl.lower_expression_len(context, builder, sig, args)#
Lower
len(expression).
- numba_vulkan.vkimpl.assign_expression(context, builder, aryty, selection, exprty, expr)#
Write an expression, element by element, into a view.
- Parameters:
aryty (VulkanArray) – Type of the array written to.
selection (_Selection) – The view of it that is written.
exprty (VulkanExpr) – Type of the expression.
expr (llvmlite.ir.Value) – The expression.
Notes
NumPy computes the right-hand side before writing. Element by element, that is the same only if the expression reads the written array at the very positions it writes, or only outside the span of positions it writes; anything else raises
ValueError.
- numba_vulkan.vkimpl.lower_setitem_expression(context, builder, sig, args)#
Lower
array[index] = expression; see assign_expression.- Returns:
A dummy value.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_print(context, builder, sig, args)#
Lower
print(...)to a record in the kernel’s print buffer.The buffer starts with a cursor and its capacity, in 32-bit words. A call reserves room for its record with an atomic addition to the cursor and, if it fits, writes the number of its format followed by the values. The host prints the records after the kernel (see numba_vulkan.runtime.print_records). String constants are part of the format and are not written.
- Returns:
A dummy value.
- Return type:
llvmlite.ir.Value
- numba_vulkan.vkimpl.lower_broadcast_first(context, builder, sig, args)#
Lower
subgroup.broadcast_first(value).
- numba_vulkan.vkimpl.lower_subgroup_any(context, builder, sig, args)#
Lower
subgroup.any(predicate).
- numba_vulkan.vkimpl.lower_subgroup_all(context, builder, sig, args)#
Lower
subgroup.all(predicate).
- numba_vulkan.vkimpl.lower_subgroup_elect(context, builder, sig, args)#
Lower
subgroup.elect().
- numba_vulkan.vkimpl.lower_subgroup_ballot(context, builder, sig, args)#
Lower
subgroup.ballot(predicate)to a tuple of four words.
- numba_vulkan.vkimpl.lower_subgroup_ballot_count(context, builder, sig, args)#
Lower
subgroup.ballot_count(predicate).
- numba_vulkan.vkimpl.lower_record_getattr(context, builder, ty, value, attr)#
Lower
record.field.
- numba_vulkan.vkimpl.lower_record_setattr(context, builder, sig, args, attr)#
Lower
record.field = value.
- numba_vulkan.vkimpl.lower_record_getitem(context, builder, sig, args)#
Lower
record["field"].
- numba_vulkan.vkimpl.lower_record_setitem(context, builder, sig, args)#
Lower
record["field"] = value.