Transactional coherence and consistency (TCC) parallelization requ i res only a few new
programming constructs. It is simpler than parallelization with conventional threaded
models because it needs fewer code transformations for typical parallelization efforts. In
particular, it lets programmers make informed trade-offs between programmer effort and
performance. In simplified form, programming with TCC is a three-step process:
1. Divide the prog ram into transactions. To create a parallel program using TCC, a
p rogrammer coarsely divides the program into transactions that can run concurrently
on different processors. In this respect, parallelizing for TCC is like conventional
parallelization, which also requires finding and marking parallel code regions.
However, with TCC the programmer does not need to guarantee that parallel regions are
independent, as hardware will catch all dependence violations dynamically. Our
interface lets programmers divide their program into parallel transactions using loop
iterations and/or a forking mechanism.
2. Specify transaction order. The default transaction ordering is to have transactions
commit results in the same order as they would in the original sequential program,
because this guarantees that the p rogram will execute correctly. However, if a
programmer can verify that this commit order constraint is unnecessary, he or she can
relax it completely or partially to improve performance. The interface also provides
ways to specify the application’s ordering of constraints in useful ways.
3. Tune performance. After selecting and o rdering transactions, the programmer can run
the program in parallel. The TCC system can automatically provide feedback about where
violations occur in the program, which can direct the programmer to perform further