Overview

SST is an open source, cross platform simulation platform that provides a framework to connect multiple simulated hardware object including CPUs, network, memory, etc. Simulations using the toolkit can be run either single node, or run on multiple nodes via MPI. The toolkit provides a parallel discrete event core as well as several programming interfaces including classes to manage random number generation, statistics handling, simulation output and efficient memory pooling for simulation events. The most recent performance evaluation has shown that SST can scale to simulate beyond 1.5M objectss and operate efficiently on simulations up to 128 dual-processor nodes.

These instructions are intended to walk the user through a detailed set of steps to build and install SST. It is intended for users with intermediate knowledge in the operation of Unix/Linux/OSX environments.

NOTE: The following instructions build a basic version of SST and its required external components. Additional (optional) external components can be built to provide additional features. Instructions for these additional components are available at Instructions for Additional External SST Components.

The SST Release Notes identify what operating systems, compiler and external component combinations have been tested and proven to work with SST 6.1.x.

NOTE: Using combinations other than what is identified in the Release Notes may cause build failures and/or unexpected results.

NOTE: Building SST can sometimes be cumbersome and error prone due to the sheer number of combinations of operating systems, compiler versions and external required components. It is STRONGLY recommended that users closely follow these instructions.

General Build and Install Information

SST does not require root/superuser privileges for installation. Prior to installation, the user will need to decide on directories where SST and its prerequisites can be built and installed. This location should have sufficient space and permissions for building and storage of the libraries and other binaries.

The user is expected to have an intermediate knowledge in the operation of Unix/Linux/OSX environments. They should be able to modify their environment variables, and understand basic build/installation methods, and manipulate the file system.

NOTE: SST and all of its external components should be built using the same compiler type and version. Using different types or versions can create binary incompatibilities that may be difficult to diagnose.

Shell Used For Instructions

These instructions are targeted for users running Bourne-compatible shells. Users running different shells will need to adjust these instructions as necessary.

Specific Instructions for Operating Systems and Compilers

There are 2 main operating systems used for SST: Linux and Mac OSX.

In the Linux OS, gcc is the only supported compiler.

In the Mac OSX OS, clang (XCode) is the only supported compiler

In the instructions that follow, the following icons are used to point out specific issues for an operating system or an operating system with a specific compiler.

- Represents Instructions specific to Linux Operating Systems.

- Represents Instructions specific to Mac OSX Operating Systems.

Required system tools

- Most Linux Systems contain all the necessary tools required to build SST (either pre-installed or available via the distro.), however some older versions may need their system tools updated.NOTE - Newer versions of components for SST (such as Boost) can cause incompatibilites. It is recommended that the user use the versions defined in the SST Release Notes.

- Mac OSX systems will need the following to be installed on the system before building SST see (Mac OSX Install Options):

Example Build and Install Directories

These instructions will use the following conventions (the user can adjust these as they see fit):

Download directory $HOME/scratch

This directory will contain downloaded source code packages for SST and its dependencies.

The following directories should be created on the users machine

$HOME/scratch

$HOME/scratch/src

Installation directory $HOME/local

This directory will be the installation directory for SST and its dependencies.

The following directories should be created on the users machine

$HOME/local

$HOME/local/packages

Other Possible Tasks for Users

For most users, following these instructions will get SST up and running. However there may be rare circumstances that the user will have implement additional changes to their system to resolve problems.

The user may have to possibly modify their system in the following possible ways:

Modifying the $PATH environment variable to include directories as needed

Modifying compiler options in makefiles so that the appropriate directories are searched during the build.

Modifying the $LD_LIBRARY_PATH environment variable to include directories that are searched for shared libraries at runtime (for .so files).

For Mac OSX, modifying the $DYLD_LIBRARY_PATH environment variable to include directories that are searched for shared libraries at runtime (for .dylib files).

Modifying the $MANPATH environment variable to include directories so that they are searched for man page documentation.

It is expected that the user has sufficent knowledge in Linux and/or Mac OSX operating systems to manage and understand these changes.

Building A Basic SST System

SST requires 1 external component (Boost) and recommends 1 external component (OpenMPI) to be built, installed and available on the users machine. After these components are available, then SST itself can be built and installed.

NOTE: If OpenMPI is not available, the SST-Core must be configured with the --disable-mpi option (see configure instructions below). With OpenMPI disabled, the user will be unable to run multi-node simulations.

External Dependent Components

OpenMPI 1.8.8 (Recommended)

SST 6.1.x is regularly tested with OpenMPI 1.8.8, and this version is known to work with SST. Installation of an MPI package from source code is typically unnecessary, since many Linux distributions provide OpenMPI as an optional installable package. Instructions for building OpenMPI 1.8.8 follow.

NOTE: Do not use the base release of OpenMPI 1.8 (openmpi-1.8.tar.gz) due to a security issue. For more information go here and search for the 1.8.1 Release notes.

3. Decide on an installation location. For this example: $HOME/local/packages/OpenMPI-1.8.8. Note this location will contain bin, lib, include, and other directories for use of OpenMPI.

4. Set the home directory environment variable of the OpenMPI installation.

$ export MPIHOME=$HOME/local/packages/OpenMPI-1.8.8

5. Configure OpenMPI to be installed in $MPIHOME

$ ./configure --prefix=$MPIHOME

6. Build and install OpenMPI

$ make all install

7. Update your PATH environment variable so that it contains the bin directory of the OpenMPI installation location. Also set the MPICC and MPICXX variables to point to the correct MPI compiler options. initialization file.

Boost 1.56 (Required)

SST 6.1.x makes use of Boost 1.56. If a Boost installation is in the default compiler search paths and it is not the Boost installation you wish to use, it’s best to remove that copy of Boost if possible.

2. Set the home directory environment variable to the SST-Elements installation (i.e. where you want the SST-Elements files installed).

$ export SST_ELEMENTS_HOME=$HOME/local/sstelements-6.1.0

3. Review prerequisite package installation locations and use this to construct a configure line for SST-Elements. For more information on SST-Elements configuration click here or run $ ./configure –help

4. Configure SST-Elements, being sure to make configure reference the location of SST-Elements’s local prerequisite packages.

Developers and Researchers are encouraged to be part of SST Development. Contact SST Support to be added to the team..

To clone the latest project source code on the devel branch (from GitHub):

Using Git

git clone -b devel https://github.com/sstsimulator/sst-core.git

git clone -b devel https://github.com/sstsimulator/sst-elements.git

The build process is the same as described above, except the user must perform a $ ./autogen.sh to create a configure file. This must occur before running the configure script.

The source for SST-Core and SST-Elements are stored in two repositories (SST-Core and SST-Elements). Each repository contains two primary development branches (devel and master):

The devel branch is under active development.

Code is submitted to the devel branch via Pull Requests.

The Pull Requests to both repositories are automatically tested (but not exhaustively) before merging. Due to the non-exhaustive tests, the possibility exists that the code in the devel branch may be non-operational or contains bugs.

A full exhaustive test suite is run nightly on the devel branch of SST (Core and Elements). When these tests pass, the devel branches are then merged into the appropriate master branches.

The master branch is exhaustively tested and will contain the latest stable version of SST-Core and SST-Elements

Below is a description of the Elements provided with SST 6.1.x. Most elements are automatically included in the configuration. Some elements are only enabled when the –with-“external component” is set. For more information, see Instructions for Additional External SST Components

Boost

Required by SST-CORE Configure: –with-boost=”path to Boost Library”

Zoltan

Enabled by SST-Core Configure: –with-zoltan=”path to Zoltan”

Ariel

Enabled by SST-Elements Configure: –with-pin=”path to Intel Pin”

cacheTracer

Always Enabled

chdlComponent

Enabled by SST-Elements Configure: –with-chdl=”path to CHDL”

cassini

Always Enabled

Cramsim

Always Enabled

ember

Always Enabled

firefly

Always Enabled

hermes

Always Enabled

memHierarchy

Always Enabled

Optional Features Enabled by SST-Elements Configure: –with-dramsim=”path to DRAMSim2”

Optional Features Enabled by SST-Elements Configure: –with-nvdimmsim=”path to NVDimmSim”

Optional Features Enabled by SST-Elements Configure: –with-hybridsim=”path to HybridSim”

merlin

Always Enabled

miranda

Always Enabled

prospero

Always Enabled

pyproto

Always Enabled

qsimComponent

Enabled by Configure: –with-qsim=”path to QSim”

scheduler

Always Enabled

Optional Features Enabled by SST-Elements Configure: –with-glpk=”path to GLPK”

Optional Features Enabled by SST-Elements Configure: –with-metis=”path to METIS”