Builtins for WSE-3
Contents
Builtins for WSE-3¶
This section documents CSL builtins that are only supported for WSE-3.
@set_control_task_table¶
Create a separate control task table.
Syntax¶
@set_control_task_table();
@set_control_task_table(config);
Where:
config
is a comptime-known (anonymous) struct with the following optional fields:instructions
stride
Example¶
task foo() void {}
task bar() void {}
comptime {
@bind_control_task(foo, @get_control_task_id(10));
@bind_local_task(bar, @get_local_task_id(10));
// Even though 'foo' and 'bar' have the same IDs they do not
// clash because this call to @set_control_task_table will
// decouple control tasks from data and local tasks. Control
// tasks now have their own separate task table.
@set_control_task_table(.{.instructions = 8, .stride = 4});
}
Semantics¶
The @set_control_task_table
builtin will decouple control tasks
from data and local tasks by creating a separate task table that is
dedicated to control tasks.
The builtin can only be called at most once during the evaluation of a top-level comptime block.
It can have an optional argument that must be a comptime-known struct
with two optional fields: instructions
and stride
.
If @set_control_task_table
is called without an argument then the
default values for instructions
and stride
will be used (see
below).
The instructions
field can be used to specify the number of instructions
for each entry point in the new control task table. The number of instructions
must be a comptime-known integer value within the valid set of options which are
2
, 4
and 8
. The default value is 4
.
The stride
field requires a comptime-known integer value that represents the
stride - in number of entry points - per input queue’s local control table index
(see @initialize_queue). Its value should be in the
range [1, 7]
and the default value is 1
.
@get_ut_id¶
Create a value of type ut_id
from the provided integer identifier.
Syntax¶
@get_ut_id(id);
Where:
id
is a comptime-known expression of any unsigned integer type, or a runtime expression of typeu16
.
Semantics¶
If id
is comptime-known, the builtin will only accept integers
in the target architecture’s valid range for microthread IDs.
If id
is not comptime-known, its type must be u16
.
In this case no runtime checks are performed to ensure that id
is
within the range of valid microthread IDs.