[LLVMdev] interest in support for Transactional Memory?

Garrison Venn gvenn.cfe.dev at gmail.com
Wed Oct 27 05:30:31 PDT 2010


Hi Torvald,

On Oct 27, 2010, at 8:01, Torvald Riegel wrote:

> On Tuesday 26 October 2010 14:33:02 Duncan Sands wrote:
>>> transaction properties (eg, virtually atomic + isolated execution) for
>>> ordinary program code. Thus, to make incrementing a counter thread-safe,
>>> you could say __transaction { counter++; } and the compiler would
>>> transform this code so that it uses a TM library, which in turn does
>>> concurrency control for the memory accesses in a transaction. Recent
>>> studies support the assumption that shared-memory synchronization with
>>> transactions is supposed to be a lot easier than when using locking, for
>>> example.
>> 
>> Why does this require special LLVM support rather than, say, having the
>> front end lower everything to library calls and so forth, like gcc does
>> for OpenMP?
> 
> There are different ways one could go there. First, if there is a frontend with 
> TM support available, you only need to do a few things in LLVM:
> 
> 1) Txn begin is like a setjmp call. You need to ensure that stack slots are 
> restored to the original values when aborting and restarting a txn. (Or you 
> can ensure that slots that are live-in into a txn begin do not get reused 
> until a matching commit). LLVM currently skips stack slot coloring if setjmp 
> is called in the function, so one could extend this to handling an returns-
> twice attribute. However, this coarse approach is costly (testing it with a 
> microbenchmark (accessing a tree with txns), it decreased performance by 30%).

Just curious if LLVM's zero cost exception system (lib unwind like behavior), would have 
any effect on the above?

> 
> 2) Functions that are called from txns get cloned and the clones get 
> instrumented. The ABI requirements regarding how to store the clone functions 
> in native code and how to look them up are not finalized yet, but it may 
> require LLVM support as well.
> 
> If developing TM support from scratch, I would not put it in the frontend 
> because: 
> 
> 1) Performance. Doing TM instrumentation after running other standard 
> optimizations is worthwhile. Inlining, constant propagation, ... and LTO in 
> general can all give you less loads and stores in txns (which either have a 
> decent overhead for software TM libraries or can count towards hardware TM 
> (HTM) capacity limits). You can potentially do better alias and dependency 
> analysis after other optimizations in IR.
> 
> 2) The TM support is not necessarily language specific, IR-level TM 
> instrumentation could be used with light-weight TM support in several different 
> frontends.
> 
> 3) The instrumentation for the kind of HTM that we have worked with can be 
> expressed with inline asm in library code. The library can then be linked and 
> LTO'd, so there's no noticeable performance difference to directly transforming 
> loads/stores to HTM transactional loads/stores. However, this might not be the 
> case for each HTM. For example, transactionally accessed variables on the 
> stack might have to be separated from nontransactionally accesses stack slots 
> if they are on the same cache line, or the compiler has to detect this an 
> instruct the TM to use STM instead of HTM.
> 
> 
> Torvald
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

Garrison





More information about the llvm-dev mailing list