Overview

Currently, SMT is only implemented for the Opal module. Thus all SMT simulations need to be run with both Opal and Ruby modules together. Running with Opal only in SMT-mode is untested. You will need to configure Opal and Ruby separately in order to use SMT. The relevant configuration steps are shown below.

Opal

Here are the relevant configuration parameters and their meanings. These are the minimum paramters that need to be changed in order to run with SMT.

CONFIG_LOGICAL_PER_PHY_PROC (>=1): The number of SMT thread contexts per processor core.

CONFIG_FETCH_THREADS_PER_CYCLE (>=1): How many SMT threads to fetch from in each cycle.

CONFIG_IREG_PHYSICAL (>= 160*CONFIG_LOGICAL_PER_PHY_PROC+64): The number of physical integer registers per processor core.

CONFIG_FPREG_PHYSICAL (>= 64*CONFIG_LOGICAL_PER_PHY_PROC+128): The number of physical floating-point registers per processor core.

CONFIG_CCREG_PHYSICAL (>= 5*CONFIG_LOGICAL_PER_PHY_PROC+64): The number of condition code registers per processor core.

Ruby

It is useful to first define another variable (this is not a valid config param) to represent the total number of logical processors in the system. We call this variable NUM_LOGICAL_PROCESSORS. It is defined as follows:

NUM_LOGICAL_PROCESSORS = g_PROCS_PER_CHIP*g_NUM_SMT_THREADS*g_NUM_CHIPS

Then we can go ahead and set our Ruby params. Here is the minimum configuration parameters that need to be set in order to run with SMT.

g_NUM_SMT_THREADS (== (NUM_LOGICAL_PROCESSORS/(g_PROCS_PER_CHIP*g_NUM_CHIPS))): Number of SMT thread contexts per processor core.

g_NUM_PROCESSORS (== (NUM_LOGICAL_PROCESSORS/g_NUM_SMT_THREADS)): The number of physical processors seen by the memory subsystem. These represent the number of "driver" processors that submit memory requests to the memory subsystem.

Then set g_PROCS_PER_CHIP to be (NUM_LOGICAL_PROCESSORS/(g_NUM_SMT_THREADS*g_NUM_CHIPS)). g_NUM_CHIPS will be calculated automatically at runtime, so do not set this value to be nonzero!

Reading a checkpoint

Always load a Simics checkpoint that contains NUM_LOGICAL_PROCESSORS as given by the equation above.

SMT (last edited 2008-10-15 19:37:41 by LukeYen)