CentraleSupélecDépartement informatique
Plateau de Moulon
3 rue Joliot-Curie
F-91192 Gif-sur-Yvette cedex
Concurrent computations and time islands

This example shows how causality relations can exist between unrelated time scales. Two CPUs with independent time scales (they is no tag relation between their clocks) compute a result A and a result B. When both results are available, the first CPU computes A+B:

rational-clock CPU1_time  // time scale on CPU 1
rational-clock compute_A sporadic 1 // start computing A at 1
tag relation compute_A = CPU1_time
unit-clock A_available
compute_A time delayed by 0.5 on CPU1_time implies A_available

rational-clock CPU2_time  // time scale on CPU 2
rational-clock compute_B sporadic 2 // start computing B at 2
tag relation compute_B = CPU2_time
unit-clock B_available
compute_B time delayed by 1.5 on CPU2_time implies B_available

// start computing A+B when both A and B are available
unit-clock compute_A_plus_B
A_available sustained immediately from B_available
                                  to compute_A_plus_B implies compute_A_plus_B
B_available sustained immediately from A_available
                                  to compute_A_plus_B implies compute_A_plus_B

unit-clock A_plus_B_available
compute_A_plus_B time delayed by 1 on CPU1_time implies A_plus_B_available

@tagref CPU1_time // display events according to the time of CPU 1
@output vcd
@output svg standalone

As you can see on the result, without any information on the relative time scales on CPU 1 and CPU 2, TESL makes both tasks start at the same time, and makes time advance as fast as possible. Therefore A and B become available at the same time. Since there is not tag relation between the clocks on CPU 1 and CPU 2, they belong to different time islands, and the semantics of TESL makes time advance on each time island as fast as possible while obeying causality (the clock of CPU 1 is used as time reference in the following picture):