For example, the instructions for node 110 can be preceded by a checkpoint wait instruction which can identify a checkpoint register and a value to be set in the checkpoint register. In this example, the instructions for node 140 can be followed by a “checkpoint set” instruction, that identifies the same checkpoint register and a value. In this example, when the second execution engine reaches the operations described in node 110, the second execution engine can first execute the “checkpoint wait” instruction, and check whether a particular value (e.g., a value of “1”) has been set in the specified checkpoint register identified by this instruction. When the value has not been set, then the operations of node 140 have not yet completed, and the second execution engine can stall. When the value is then set (or was already set when the instruction was executed), then the second execution engine can proceed with the operations of node 110.
In some examples, various instructions for an execution engine can include the ability to wait on a condition associated with a value in a checkpoint register. For example, a “matrix multiply” instruction can include an optional parameter that enables a programmer to include waiting on a checkpoint to the instruction. In this and other examples, an explicit “checkpoint wait” instruction may not be needed, and instead, generation of the instructions can include setting the parameters in the “matrix multiply” instruction that will cause the execution engine to wait for a specified value to be set in a specified checkpoint register.