A split hardware transaction may split an atomic block of code to be
executed using multiple hardware transactions, while logically taking
effect as a single atomic transaction. A split hardware transaction may
use software to combine the multiple hardware transactions into one
logically atomic operation. In some embodiments, a split hardware
transaction may allow execution of atomic blocks including
non-hardware-transactionable (NHT) operations without resorting to
exclusively software transactions. A split hardware transaction may
maintain a thread-local buffer logs all memory accesses performed by the
split hardware transaction. A split hardware transaction may use a
hardware transaction to copy values read from shared memory locations
into a local memory buffer. To execute a non-hardware-transactionable
operation, the split hardware transaction may commit the active hardware
transaction, execute the non-hardware-transactionable operation, and then
initiate a new hardware transaction to execute the rest of the atomic
block.