Tourmaline: Multifacet's Transactional Memory Functional Simulator, released as part of GEMS 1.2 on 11 February 2006.

Overview

The Tourmaline module is used to rapidly execute transaction memory programs (using Simics "magic" instructions) correctly, though without cache timing information of any sort. Tourmaline preserves transactional semantics to allow quick development of transactional software and workloads, without incurring the overhead of detailed timing simulation. It is a module separate from Ruby and Opal, that may be loaded to enable transactional memory programs to be run within Simics at near-Simics execution speeds when using the Serializer controller, and at improved (vs. Ruby) speeds when using more sophisticated controllers.

The heart of Tourmaline consists of a Transaction Controller, inherited from base class TransactionController. The GEMS 1.2 release of Tourmaline includes two built-in controllers, Serializer and Generic, which are described below in the section entitled "Transaction Controllers".

Tourmaline emulates the same binary interface as the ["Transactional Memory"] implementation in Ruby. However, Tourmaline is intended to run stand-alone, without either Ruby or Opal loaded. It will not function correctly in the presense of these modules.

Detailed documentation can be found in the $GEMS/tourmaline/ directory of the GEMS 1.2 Release, in the README.tourmaline file. Note that Tourmaline was developed for Simics 2.2.X, and is not tested for Simics 2.0.X. Simics 3.0.X compatibility is available but experimental.

Transaction Controllers

Built-in Controllers

The GEMS 1.2 release of Tourmaline includes two built-in controllers, Serializer and Generic:

More information on Serializer and Generic may be found in its source code documentation and in the Tourmaline readme file.

Transaction Controller Cookbook

Tourmaline's TransactionController class is easily extended to make new Transaction Controller types. Below is a step-by-step guild on how to create new Transaction Controllers.:

Before making your own module, it is highly recommended that you read the README.tourmaline file in its entirety.

Compilation of Tourmaline

Tourmaline's compile syntax is very similar to that of Ruby and Opal. A required argument to "make" is the DESTINATION= definition, which determines where the Tourmaline module will be installed. Otherwise, compilation is identical to other modules.

NOTE: Tourmaline was developed and tested with Simics 2.2.X. It is not compatible with Simics 3.0.

Typically, compilation is performed via:

eg.

You must make the following changes in your $GEMS/simics/src/extensions directory to use Tourmaline:

You must also add the following line to file $GEMS/simics/config/modules.list-local:

NOTE: Simics may not detect that its list of modules has changed, so it may be required to delete the modules.cache file in $GEMS/simics/[HOST_TYPE]/lib/ if compilation of Tourmaline fails when linking the Tourmaline module. This problem is characterized by the error message:

Loading the Tourmaline Module

Loading and Running

Once Tourmaline is compiled, it can be loaded just as any other Simics module. Simics must be invoked with the -stall option when using any Transaction Controller that uses the memory timing interface, such as Generic. It is strongly recommended that the user also enable Simics "magic" breakpoints before loading Tourmaline. A configuration should also be loaded before loading Tourmaline. A typical invocation may look something like this:

Before beginning execution, the init function must be invoked:

Simulation may now be started by passing the command c to Simics.

Supported Commands

Tourmaline currently supports the following commands:

Configuration Options

The following parameters have default values set at compile-time from values in $GEMS/tourmaline/config/tourmaline.defaults. These parameters may be overwritten at runtime by invoking the setparam and setparam_str commands (see above) before tourmaline0.init.

Tourmaline_Overview (last edited 2006-06-23 17:16:02 by DanGibson)