When a program uses Software Transactional Memory (STM) to synchronize accesses to shared memory, the performance often depends on which STM implementation is used. Implementations vary greatly in their underlying mechanisms, in the features they provide, and in the assumptions they make about the common case. Consequently, the best choice of algorithm is workload-dependent. Worse yet, for workloads composed of multiple phases of execution, the “best” choice of implementation may change during execution. We present a low-overhead system for adapting between STM implementations. Like previous work, our system enables adaptivity between different parameterizations of a given algorithm, and it allows adapting between the use of transactions and coarse-grained locks. In addition, we support dynamic switching between fundamentally different STM implementations. We also explicitly support irrevocability, retry-based condition synchronization, and privatization. Through a series of exp...
Michael F. Spear