follow-on to #516 , by default all WorldObject tasks are now out of order (which should eliminate the need to process tasks in-order that exposed issue #515 fixed in #516 ).
note that processing of active messages that do not spawn tasks, such as those involved in setting futures, still defaults to sequential order. This is done to guarantee for single-threaded programs (or for a thread in a multithreaded program) sequential consistency, i.e. doing
send(rank1, am1)
send(rank1, am2)
cannot execute am1 before am2. Breaking this would make reasoning very difficult. Since setting future creates arbitrary changes to the state makes sense to use same rules for setting futures.
follow-on to #516 , by default all WorldObject tasks are now out of order (which should eliminate the need to process tasks in-order that exposed issue #515 fixed in #516 ).
note that processing of active messages that do not spawn tasks, such as those involved in setting futures, still defaults to sequential order. This is done to guarantee for single-threaded programs (or for a thread in a multithreaded program) sequential consistency, i.e. doing
send(rank1, am1) send(rank1, am2)
cannot execute am1 before am2. Breaking this would make reasoning very difficult. Since setting future creates arbitrary changes to the state makes sense to use same rules for setting futures.
p.s. MPI has same semantics for p2p messages; at least the most recent standard states this explicitly: https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report/node68.htm#Node68