QuakeTM is one of the first complex real-world applications that uses Transactional Memory.
QuakeTM is a parallel version of the Quakeworld server application (a multiplayer and multi-threaded version of the Quake game server) . It is parallelized from the sequential version using transactional memory and consists of the following three applications:
- the transactional server
- the TraceBot client, for running traces
- the VideoClient client, for visual testing and production of traces
The behavior of the server can be controlled by changing the macro definitions. It can be run in a serial lock-based or a transactional version. It also supports two synchronization granularities: coarse-grained and fine-grained. Transactional nesting can be controlled by macros or it can be handled by the TM runtime system. Using macros, it is also easy to adopt the code to any TM implementation.
Currently the code is written to support the prototype version of the Transactional Memory branch of GNU Compiler Collection (GCC-TM), the Dresden TM Compiler (DTMC) and the Intel STM compiler 3.0. The OpenMP task pragmas are replaced to compile QuakeTM with VELOX STM compilers that do not support this feature. We compile and run QuakeTM applications with the new versions of the VELOX C-Compilers to debug the compilers.