FASTLANE
Streamlining Transactions for Low Thread Counts
Jons-Tobias Wamhoff Christof Fetzer Technische Universität Dresden, Germany Pascal Felber Etienne Rivière Université de Neuchâtel, Switzerland Gilles Muller INRIA, France
Motivation STM Best performance Faster Expected gains - - PowerPoint PPT Presentation
F AST L ANE Streamlining Transactions for Low Thread Counts Jons-Tobias Wamhoff Christof Fetzer Technische Universitt Dresden, Germany Pascal Felber Etienne Rivire Universit de Neuchtel, Switzerland Gilles Muller INRIA, France
Jons-Tobias Wamhoff Christof Fetzer Technische Universität Dresden, Germany Pascal Felber Etienne Rivière Université de Neuchâtel, Switzerland Gilles Muller INRIA, France
Number of cores
1
x Performance
Slower Faster Sequential STM FastLane Best performance Expected gains from FastLane Many
2
performance of the master
3
4
START SEQUENTIAL uninstru- mented MASTER lightweight instrumented writes HELPER instrumented, synchronize with master STM instrumented, extensive bookkeeping COMMIT pessimistic code paths speculative code paths
(uninstrumented), FastLane (master & helper) and STM
count at BEGIN
5 Christie et al.: Evaluation of AMD's Advanced Synchronization Facility Within a Complete Transactional Memory Stack, EuroSys '10
6
Dirty array Timestamp Timestamp Master thread isMaster Memory ... ... Address read Address written ... Address read Helper thread Start timestamp Write-set ... Read-set Counter
even: otherwise
7
MASTER READ (addr) return *addr BEGIN acquire(cntr) COMMIT release(cntr) WRITE (addr, val) addr = val dirty[hash(addr)] = cntr HELPER BEGIN start = cntr READ (addr) dirty[hash(addr)] ≤ start add(read-set, addr) abort return *addr WRITE (addr, val) dirty[hash(addr)] ≤ start put(write-set, addr, val) abort COMMIT
8
COMMIT 1 acquire(cntr) VALIDATE abort proceed
8
COMMIT 1 acquire(cntr) VALIDATE abort proceed COMMIT 2 c = awaitEven(cntr) VALIDATE cntr ≤ c+1 ∨ VALIDATE acquire(cntr) abort proceed abort
8
COMMIT 1 acquire(cntr) VALIDATE abort proceed COMMIT 2 c = awaitEven(cntr) VALIDATE cntr ≤ c+1 ∨ VALIDATE acquire(cntr) abort proceed abort COMMIT 3 c = awaitEven(cntr) VALIDATE tryAcquire (cntr, c) failed abort proceed
Spear et al.: RingSTM: Scalable Transactions with a Single Atomic Instruction, SPAA '08
9
10