The RSTM package is now available as a Google code project. We welcome your comments, suggestions, and contributions. Future releases will occur through the Google code mechanism.
The information hosted here is accurate with respect to the fifth release, and the initial Google code release. The STM Implementations and STM Primer pages will continue to be relevant, but we expect the RSTM-specific information hosted at the University of Rochester to become rapidly out-of-date.
The default build allows you to run 8 microbenchmarks by typing
bench/obj/Bench_[libname] -B <benchmark>
Since RSTM and RedoLock are obstruction-free, we provide a number of contention managers that can be run with
bench/obj/Bench_rstm -C <contention manager>Note: These options have no effect when invoked with the word-based backends.
When configured with the RSTM backend, this release supports conflict detection based on visible or invisible readers, and eager or lazy acquire. The appropriate command-line options are:
For blocking, word-based STMs based on ET we support three write acquisition and versioning pairs.
There are many other parameters as well, for varying the benchmark time, the range of elements in the data set, the number of threads, the read/write mix, and much more. Type
bench/obj/Bench_rstm -hfor the full list.
The mesh/ folder contains code that computes the unique Delaunay Triangulation for a set of points. Invoking
mesh/mesh -hwill enumerate the command-line options. Please note that the validation strategy and contention management policies for the mesh application are hard-coded. You will need to change the parameters to stm::init() in mesh.cpp and my_thread.cpp to use different policies.
Please note that the mesh application is currently not supported on Win32.
This is the extensible hashing benchmark that we used to test contention manager implementations in our PPOPP 2009 paper.
The swarm/ folder contains code for an OpenGL 3-D Rendering benchmark. The current release of swarm consists of an engine that computes animation and physics (velocity, collisions) for a set of animated tripods that are being drawn into large gravity-emitting planets. Swarm uses inevitability, when available, to accelerate rendering and updating transactions.
Swarm requires OpenGL and GLUT. If necessary, you may need to download OpenGL and GLUT to the alt-license/ folder. Our tests use the implementation available from OpenGL.org. As in the mesh, swarm requires you to manually change the contention management and validation policies in the code. The files my_thread.cpp and Game.cpp contain calls to stm::init().
Please note that on Mac OS X, swarm will not handle user input (such as clicking on the graphics window or pressing 'esc' to terminate the benchmark) during execution. This OS X specific bug will be addressed in a future release. Swarm can be terminated in this case with a [ctrl-C] on the command line, and can be run with the -t field to specify the number of seconds to run for.
If you are interested in developing new runtime libraries, the VerifyRetry, VerifyNesting, and TypeTest code (part of the bench/ folder) may be of interest. This code consists of simple tests to ensure that each library implements retry and subsumption correctly. These tests also verify that word-based stms (such as LLT) handle all primitive types correctly.