Split hardware transaction techniques may support execution of serial and
parallel nesting of code within an atomic block to an arbitrary nesting
depth. An atomic block including child code sequences nested within a
parent code sequence may be executed using separate hardware transactions
for each child, but the execution of the parent code sequence, the child
code sequences, and other code within the atomic block may appear to have
been executed as a single transaction. If a child transaction fails, it
may be retried without retrying the parent code sequence or other child
code sequences. Before a child transaction is executed, a determination
of memory consistency may be made. If a memory inconsistency is detected,
the child transaction may be retried or control may be returned to its
parent. Memory inconsistencies between parallel child transactions may be
resolved by serializing their execution before retrying at least one of
them.