pub struct ExecuteOperation<'c> { /* private fields */ }
Expand description
An execute
operation. Asynchronous execute operation.
The body
region attached to the async.execute
operation semantically
can be executed concurrently with the successor operation. In the followup
example “compute0” can be executed concurrently with “compute1”.
The actual concurrency semantics depends on the dialect lowering to the executable format. Fully sequential execution (“compute0” completes before “compute1” starts) is a completely legal execution.
Because concurrent execution is not guaranteed, it is illegal to create an
implicit dependency from “compute1” to “compute0” (e.g. via shared global
state). All dependencies must be made explicit with async execute arguments
(async.token
or async.value
).
async.execute
operation takes async.token
dependencies and async.value
operands separately, and starts execution of the attached body region only
when all tokens and values become ready.
Example:
%dependency = ... : !async.token
%value = ... : !async.value<f32>
%token, %results =
async.execute [%dependency](%value as %unwrapped: !async.value<f32>)
-> !async.value<!some.type>
{
%0 = "compute0"(%unwrapped): (f32) -> !some.type
async.yield %0 : !some.type
}
%1 = "compute1"(...) : !some.type
In the example above asynchronous execution starts only after dependency token and value argument become ready. Unwrapped value passed to the attached body region as an %unwrapped value of f32 type.
Implementations§
source§impl<'c> ExecuteOperation<'c>
impl<'c> ExecuteOperation<'c>
sourcepub fn as_operation(&self) -> &Operation<'c>
pub fn as_operation(&self) -> &Operation<'c>
Returns a generic operation.
sourcepub fn builder(
context: &'c Context,
location: Location<'c>
) -> ExecuteOperationBuilder<'c, Unset, Unset, Unset, Unset, Unset>
pub fn builder( context: &'c Context, location: Location<'c> ) -> ExecuteOperationBuilder<'c, Unset, Unset, Unset, Unset, Unset>
Creates a builder.