add SST packages and dependencies (#16618)

This commit is contained in:
Jeremy 2020-05-20 20:15:02 -07:00 committed by GitHub
parent cfb6f21236
commit bcd5dd6e3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 712 additions and 55 deletions

View File

@ -0,0 +1,30 @@
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class Dramsim2(MakefilePackage):
"""
DRAMsim is a hardware-validated, cycle-accurate
C based simulator for DRAM devices such as DDR3
"""
homepage = "https://github.com/umd-memsys/DRAMSim2"
git = "https://github.com/umd-memsys/DRAMSim2"
url = "https://github.com/dramninjasUMD/DRAMSim2/archive/v2.2.2.tar.gz"
maintainers = ['jjwilke']
version('2.2.2', sha256="96d0257eafb41e38ffa4f13e3ef3759567bdde7fa3329403f324abd0ddf8d015")
def build(self, spec, prefix):
if spec.satisfies("platform=darwin"):
make("libdramsim.dylib")
else:
make("libdramsim.so")
def install(self, spec, prefix):
install_tree(".", prefix)

View File

@ -0,0 +1,28 @@
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class GoblinHmcSim(MakefilePackage):
"""
The Goblin HMC-Sim is a Hybrid Memory Cube
Functional Simulation Environment
"""
homepage = "https://github.com/tactcomplabs/gc64-hmcsim"
git = "https://github.com/tactcomplabs/gc64-hmcsim"
# The version numbers track the SST they were released with
url = "https://github.com/tactcomplabs/gc64-hmcsim/archive/sst-8.0.0-release.tar.gz"
# This works with parallel builds outside Spack
# For some reason .o files get thrashed inside Spack
parallel = False
maintainers = ['jjwilke']
version('8.0.0', sha256="8a5e6b701865a581f15965d3ddd8c7d301b15f4b63543c444058e9c3688fd2c8")
def install(self, spec, prefix):
install_tree(".", prefix)

View File

@ -0,0 +1,23 @@
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class HbmDramsim2(MakefilePackage):
"""
HBM Simulator based on DRAMSim2
"""
homepage = "https://github.com/tactcomplabs/HBM"
git = "https://github.com/tactcomplabs/HBM"
url = "https://github.com/tactcomplabs/HBM/archive/hbm-1.0.0-release.tar.gz"
maintainers = ['jjwilke']
version('1.0.0', sha256="0efad11c58197edb47ad1359f8f93fb45d882c6bebcf9f2143e0df7a719689a0")
def install(self, spec, prefix):
install_tree(".", prefix)

View File

@ -0,0 +1,20 @@
diff --git a/Makefile b/Makefile
index c43f1e2..8b3bd86 100644
--- a/Makefile
+++ b/Makefile
@@ -14,12 +14,11 @@ endif
CXXFLAGS+=$(OPTFLAGS)
CUR_DIRECTORY=$(shell pwd)
-DRAM_LIB=$(CUR_DIRECTORY)/../DRAMSim2
-NV_LIB=$(CUR_DIRECTORY)/../NVDIMMSim/src
-#NV_LIB=$(CUR_DIRECTORY)/../FNVSim
+DRAM_LIB=$(CUR_DIRECTORY)/DRAMSim2
+NV_LIB=$(CUR_DIRECTORY)/NVDIMMSim
INCLUDES=-I$(DRAM_LIB) -I$(NV_LIB)
-LIBS=-L${DRAM_LIB} -L${NV_LIB} -ldramsim -lnvdsim -Wl,-rpath ${DRAM_LIB} -Wl,-rpath ${NV_LIB}
+LIBS=-L${DRAM_LIB} -L${NV_LIB} -ldramsim -lnvdsim -Wl,-rpath -Wl,${DRAM_LIB} -Wl,-rpath -Wl,${NV_LIB}
EXE_NAME=HybridSim
LIB_NAME=libhybridsim.so

View File

@ -0,0 +1,37 @@
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class Hybridsim(MakefilePackage):
"""
HybridSim provides cycle-accurate simulation of a non-volatile
memory system augmented with a DRAM based cache. It uses DRAMSim2
for the DRAM model and NVDIMMSim for the non-volatile memory model
"""
homepage = "https://github.com/jimstevens2001/HybridSim"
git = "https://github.com/jimstevens2001/HybridSim"
url = "https://github.com/jimstevens2001/HybridSim/archive/v2.0.1.tar.gz"
maintainers = ['jjwilke']
version('2.0.1', sha256="57b82ac929acd36de84525e4d61358f1ab6532f5b635ca3f560e563479921937")
depends_on("dramsim2")
depends_on("nvdimmsim")
patch("makefile.patch", when="@2.0.1")
def build(self, spec, prefix):
symlink(spec["dramsim2"].prefix, "DRAMSim2")
symlink(spec["nvdimmsim"].prefix, "NVDIMMSim")
if spec.satisfies("platform=darwin"):
make("libhybridsim.dylib")
else:
make("libhybridsim.so")
def install(self, spec, prefix):
install_tree(".", prefix)

View File

@ -19,6 +19,7 @@ class IntelPin(Package):
version('3.11', sha256='aa5abca475a6e106a75e6ed4ba518fb75a57549a59f00681e6bd6e3f221bd23a', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.11-97998-g7ecce2dac-gcc-linux.tar.gz') version('3.11', sha256='aa5abca475a6e106a75e6ed4ba518fb75a57549a59f00681e6bd6e3f221bd23a', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.11-97998-g7ecce2dac-gcc-linux.tar.gz')
version('3.10', sha256='7c8f14c3a0654bab662b58aba460403138fa44517bd40052501e8e0075b2702a', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.10-97971-gc5e41af74-gcc-linux.tar.gz') version('3.10', sha256='7c8f14c3a0654bab662b58aba460403138fa44517bd40052501e8e0075b2702a', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.10-97971-gc5e41af74-gcc-linux.tar.gz')
version('3.7', sha256='4730328795be61f1addb0e505a3792a4b4ca80b1b9405acf217beec6b5b90fb8', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.7-97619-g0d0c92f4f-gcc-linux.tar.gz') version('3.7', sha256='4730328795be61f1addb0e505a3792a4b4ca80b1b9405acf217beec6b5b90fb8', url='https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.7-97619-g0d0c92f4f-gcc-linux.tar.gz')
version('2.14', sha256="1c29f589515772411a699a82fc4a3156cad95863a29741dfa6522865d4d281a1", url="https://software.intel.com/sites/landingpage/pintool/downloads/pin-2.14-71313-gcc.4.4.7-linux.tar.gz")
def install(self, spec, prefix): def install(self, spec, prefix):
install_tree('.', prefix) install_tree('.', prefix)

View File

@ -0,0 +1,32 @@
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class Nvdimmsim(MakefilePackage):
"""
NVDIMMSim is a cycle-accurate non-volatile memory simulator
for devices such as NAND flash
"""
homepage = "https://github.com/slunk/NVDIMMSim"
git = "https://github.com/slunk/NVDIMMSim"
url = "https://github.com/jimstevens2001/NVDIMMSim/archive/v2.0.0.tar.gz"
maintainers = ['jjwilke']
version('2.0.0', sha256="2a621ef10be5e52a1f543985d08354a2e6ee6532b5720e5f17ad6362cfd4adef")
def build(self, spec, prefix):
with working_dir("src"):
if spec.satisfies("platform=darwin"):
make("libnvdsim.dylib")
else:
make("libnvdsim.so")
def install(self, spec, prefix):
with working_dir("src"):
install_tree(".", prefix)

View File

@ -0,0 +1,35 @@
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class Ramulator(MakefilePackage):
"""
Ramulator is a fast and cycle-accurate DRAM simulator that supports
a wide array of commercial, as well as academic, DRAM standards.
"""
homepage = "https://github.com/CMU-SAFARI/ramulator"
git = "https://github.com/CMU-SAFARI/ramulator"
maintainers = ['jjwilke']
version('sst', commit="7d2e72306c6079768e11a1867eb67b60cee34a1c")
patch('ramulator_sha_7d2e723_gcc48Patch.patch', when="@sst")
patch('ramulator_sha_7d2e723_libPatch.patch', when="@sst")
def patch(self):
filter_file('-fpic', self.compiler.cxx_pic_flag, "Makefile")
def build(self, spec, prefix):
if spec.satisfies("platform=darwin"):
make("libramulator.a")
else:
make("libramulator.so")
def install(self, spec, prefix):
install_tree(".", prefix)

View File

@ -0,0 +1,250 @@
diff --git a/src/Scheduler.h b/src/Scheduler.h
index c8561c1..38f924d 100644
--- a/src/Scheduler.h
+++ b/src/Scheduler.h
@@ -9,8 +9,10 @@
#include <list>
#include <functional>
#include <cassert>
+#include <utility>
using namespace std;
+using namespace std::placeholders;
namespace ramulator
{
@@ -22,18 +24,66 @@ template <typename T>
class Scheduler
{
public:
- Controller<T>* ctrl;
-
- enum class Type {
- FCFS, FRFCFS, FRFCFS_Cap, FRFCFS_PriorHit, MAX
- } type = Type::FRFCFS_Cap;
- //} type = Type::FCFS;
-
- long cap = 16;
+ Controller<T>* ctrl;
+
+ enum class Type {
+ FCFS, FRFCFS, FRFCFS_Cap, FRFCFS_PriorHit, MAX
+ } type = Type::FRFCFS_Cap;
+ //} type = Type::FCFS;
+
+ long cap = 16;
+
+ Scheduler(Controller<T>* _ctrl) : ctrl(_ctrl) {
- Scheduler(Controller<T>* ctrl) : ctrl(ctrl) {}
-
- list<Request>::iterator get_head(list<Request>& q)
+ // FCFS
+ compare[0] = std::bind([] (ReqIter req1, ReqIter req2, Scheduler *obj) -> ReqIter {
+ if (req1->arrive <= req2->arrive) return req1;
+ return req2;}, _1, _2, std::move(this));
+
+ // FRFCFS
+ compare[1] = std::bind([] (ReqIter req1, ReqIter req2, Scheduler *obj) -> ReqIter {
+ bool ready1 = obj->ctrl->is_ready(req1);
+ bool ready2 = obj->ctrl->is_ready(req2);
+
+ if (ready1 ^ ready2) {
+ if (ready1) return req1;
+ return req2;
+ }
+
+ if (req1->arrive <= req2->arrive) return req1;
+ return req2;}, _1, _2, std::move(this));
+
+ // FRFCFS_CAP
+ compare[2] = std::bind([] (ReqIter req1, ReqIter req2, Scheduler *obj) -> ReqIter {
+ bool ready1 = obj->ctrl->is_ready(req1);
+ bool ready2 = obj->ctrl->is_ready(req2);
+
+ ready1 = ready1 && (obj->ctrl->rowtable->get_hits(req1->addr_vec) <= obj->cap);
+ ready2 = ready2 && (obj->ctrl->rowtable->get_hits(req2->addr_vec) <= obj->cap);
+
+ if (ready1 ^ ready2) {
+ if (ready1) return req1;
+ return req2;
+ }
+
+ if (req1->arrive <= req2->arrive) return req1;
+ return req2;}, _1, _2, this);
+
+ // FRFCFS_PriorHit
+ compare[3] = std::bind([] (ReqIter req1, ReqIter req2, Scheduler *obj) -> ReqIter {
+ bool ready1 = obj->ctrl->is_ready(req1) && obj->ctrl->is_row_hit(req1);
+ bool ready2 = obj->ctrl->is_ready(req2) && obj->ctrl->is_row_hit(req2);
+
+ if (ready1 ^ ready2) {
+ if (ready1) return req1;
+ return req2;
+ }
+
+ if (req1->arrive <= req2->arrive) return req1;
+ return req2;}, _1, _2, this);
+ }
+
+ list<Request>::iterator get_head(list<Request>& q)
{
// TODO make the decision at compile time
if (type != Type::FRFCFS_PriorHit) {
@@ -106,55 +156,8 @@ public:
private:
typedef list<Request>::iterator ReqIter;
- function<ReqIter(ReqIter, ReqIter)> compare[int(Type::MAX)] = {
- // FCFS
- [this] (ReqIter req1, ReqIter req2) {
- if (req1->arrive <= req2->arrive) return req1;
- return req2;},
-
- // FRFCFS
- [this] (ReqIter req1, ReqIter req2) {
- bool ready1 = this->ctrl->is_ready(req1);
- bool ready2 = this->ctrl->is_ready(req2);
-
- if (ready1 ^ ready2) {
- if (ready1) return req1;
- return req2;
- }
-
- if (req1->arrive <= req2->arrive) return req1;
- return req2;},
-
- // FRFCFS_CAP
- [this] (ReqIter req1, ReqIter req2) {
- bool ready1 = this->ctrl->is_ready(req1);
- bool ready2 = this->ctrl->is_ready(req2);
-
- ready1 = ready1 && (this->ctrl->rowtable->get_hits(req1->addr_vec) <= this->cap);
- ready2 = ready2 && (this->ctrl->rowtable->get_hits(req2->addr_vec) <= this->cap);
-
- if (ready1 ^ ready2) {
- if (ready1) return req1;
- return req2;
- }
-
- if (req1->arrive <= req2->arrive) return req1;
- return req2;},
- // FRFCFS_PriorHit
- [this] (ReqIter req1, ReqIter req2) {
- bool ready1 = this->ctrl->is_ready(req1) && this->ctrl->is_row_hit(req1);
- bool ready2 = this->ctrl->is_ready(req2) && this->ctrl->is_row_hit(req2);
-
- if (ready1 ^ ready2) {
- if (ready1) return req1;
- return req2;
- }
-
- if (req1->arrive <= req2->arrive) return req1;
- return req2;}
- };
-};
-
+ function<ReqIter(ReqIter, ReqIter)> compare[int(Type::MAX)];
+ };
template <typename T>
class RowPolicy
@@ -168,50 +171,52 @@ public:
int timeout = 50;
- RowPolicy(Controller<T>* ctrl) : ctrl(ctrl) {}
-
- vector<int> get_victim(typename T::Command cmd)
- {
- return policy[int(type)](cmd);
- }
-
-private:
- function<vector<int>(typename T::Command)> policy[int(Type::MAX)] = {
- // Closed
- [this] (typename T::Command cmd) -> vector<int> {
- for (auto& kv : this->ctrl->rowtable->table) {
- if (!this->ctrl->is_ready(cmd, kv.first))
+ RowPolicy(Controller<T>* _ctrl) : ctrl(_ctrl) {
+ // Closed
+ policy[0] = std::bind([] (typename T::Command cmd, RowPolicy *obj) -> vector<int> {
+ for (auto& kv : obj->ctrl->rowtable->table) {
+ if (!obj->ctrl->is_ready(cmd, kv.first))
continue;
return kv.first;
}
- return vector<int>();},
+ return vector<int>();}, _1, this);
// ClosedAP
- [this] (typename T::Command cmd) -> vector<int> {
- for (auto& kv : this->ctrl->rowtable->table) {
- if (!this->ctrl->is_ready(cmd, kv.first))
- continue;
- return kv.first;
- }
- return vector<int>();},
+ policy[1] = std::bind([] (typename T::Command cmd, RowPolicy *obj) -> vector<int> {
+ for (auto& kv : obj->ctrl->rowtable->table) {
+ if (!obj->ctrl->is_ready(cmd, kv.first))
+ continue;
+ return kv.first;
+ }
+ return vector<int>();}, _1, this);
// Opened
- [this] (typename T::Command cmd) {
- return vector<int>();},
-
- // Timeout
- [this] (typename T::Command cmd) -> vector<int> {
- for (auto& kv : this->ctrl->rowtable->table) {
- auto& entry = kv.second;
- if (this->ctrl->clk - entry.timestamp < timeout)
- continue;
- if (!this->ctrl->is_ready(cmd, kv.first))
- continue;
- return kv.first;
- }
- return vector<int>();}
- };
+ policy[2] = std::bind([] (typename T::Command cmd, RowPolicy *obj) -> vector<int> {
+ return vector<int>();}, _1, this);
+
+ // Timeout
+ policy[3] = std::bind([] (typename T::Command cmd, RowPolicy *obj) -> vector<int> {
+ for (auto& kv : obj->ctrl->rowtable->table) {
+ auto& entry = kv.second;
+ if (obj->ctrl->clk - entry.timestamp < obj->timeout)
+ continue;
+ if (!obj->ctrl->is_ready(cmd, kv.first))
+ continue;
+ return kv.first;
+ }
+ return vector<int>();}, _1, this);
+
+
+ }
+
+ vector<int> get_victim(typename T::Command cmd)
+ {
+ return policy[int(type)](cmd);
+ }
+
+private:
+ function<vector<int>(typename T::Command)> policy[int(Type::MAX)];
};
@@ -304,7 +309,8 @@ public:
return itr->second.row;
}
-};
+ };
+
} /*namespace ramulator*/

View File

@ -0,0 +1,23 @@
diff --git a/Makefile b/Makefile
index ea340c8..314113d 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,7 @@ OBJS := $(patsubst $(SRCDIR)/%.cpp, $(OBJDIR)/%.o, $(SRCS))
# g++ 4.x due to an internal compiler error when processing lambda functions.
CXX := clang++
# CXX := g++-5
-CXXFLAGS := -O3 -std=c++11 -g -Wall
+CXXFLAGS := -O3 -std=c++11 -g -Wall -fpic
.PHONY: all clean depend
@@ -38,6 +38,9 @@ ramulator: $(MAIN) $(OBJS) $(SRCDIR)/*.h | depend
libramulator.a: $(OBJS) $(OBJDIR)/Gem5Wrapper.o
libtool -static -o $@ $(OBJS) $(OBJDIR)/Gem5Wrapper.o
+libramulator.so: $(OBJS) $(OBJDIR)/Gem5Wrapper.o
+ $(CXX) -shared -o $@ $(OBJS) $(OBJDIR)/Gem5Wrapper.o
+
$(OBJS): | $(OBJDIR)
$(OBJDIR):

View File

@ -7,38 +7,71 @@
class SstCore(AutotoolsPackage): class SstCore(AutotoolsPackage):
"""The Structural Simulation Toolkit (SST) was developed to explore """The Structural Simulation Toolkit (SST) core
innovations in highly concurrent systems where the ISA, microarchitecture, provides a parallel discrete event simulation (PDES)
and memory interact with the programming model and communications system""" framework for performing architecture simulations
of existing and proposed HPC systems"""
homepage = "http://sst-simulator.org/" homepage = "https://github.com/sstsimulator"
url = "https://github.com/sstsimulator/sst-core/releases/download/v8.0.0_Final/sstcore-8.0.0.tar.gz"
git = "https://github.com/sstsimulator/sst-core.git" git = "https://github.com/sstsimulator/sst-core.git"
url = "https://github.com/sstsimulator/sst-core/releases/download/v10.0.0_Final/sstcore-10.0.0.tar.gz"
maintainers = ['jjwilke']
version('10.0.0', sha256="64cf93a46dfab011fba49244bf0e0efe25ef928c6fbde1d49003220d0eb7735a")
version('9.1.0', sha256="cfeda39bb2ce9f32032480427517df62e852c0b3713797255e3b838075f3614d")
version('develop', branch='devel') version('develop', branch='devel')
version('8.0.0', sha256='34a62425c3209cf80b6bca99cb0dcc328b67fb84ed92d5e6d6c975ad9319ba8a') version('master', branch='master')
variant('mpi', default=True, description='Support multi-node simulations using MPI') variant("pdes_mpi", default=True,
variant('boost', default=False, description='Use boost') description="Build support for parallel discrete event simulation")
variant("zoltan", default=False,
description="Use Zoltan for partitioning parallel runs")
variant("hdf5", default=False,
description="Build support for HDF5 statistic output")
variant("zlib", default=False,
description="Build support for ZLIB compression")
variant("preview", default=False,
description="Preview build with deprecated features removed")
depends_on('autoconf@1.68:', type='build', when='@develop') depends_on("python", type=('build', 'run'))
depends_on('automake@1.11.1:', type='build', when='@develop') depends_on("mpi", when="+pdes_mpi")
depends_on('libtool@1.2.4:', type='build', when='@develop') depends_on("zoltan", when="+zoltan")
depends_on('m4', type='build', when='@develop') depends_on("hdf5", when="+hdf5")
depends_on("zlib", when="+zlib")
depends_on('python@:2') depends_on('autoconf@1.68:', type='build', when='@master:')
depends_on('zlib', type='build') depends_on('automake@1.11.1:', type='build', when='@master:')
depends_on('mpi', when='+mpi') depends_on('libtool@1.2.4:', type='build', when='@master:')
depends_on('boost@1.56.0:', type='build', when='+boost') depends_on('m4', type='build', when='@master:')
# force out-of-source builds
build_directory = 'spack-build'
def autoreconf(self, spec, prefix):
bash = which('bash')
bash('autogen.sh')
def configure_args(self): def configure_args(self):
args = [] args = []
spec = self.spec if "+zoltan" in self.spec:
args.append("--with-zoltan=%s" % self.spec["zoltan"].prefix)
if "+hdf5" in self.spec:
args.append("--with-hdf5=%s" % self.spec["hdf5"].prefix)
if "+zlib" in self.spec:
args.append("--with-zlib=%s" % self.spec["zlib"].prefix)
if '~mpi' in spec: if "+pdes_mpi" in self.spec:
args.append('--disable-mpi') args.append("--enable-mpi")
env['CC'] = self.spec['mpi'].mpicc
env['CXX'] = self.spec['mpi'].mpicxx
env['F77'] = self.spec['mpi'].mpif77
env['FC'] = self.spec['mpi'].mpifc
else:
args.append("--disable-mpi")
if '+boost' in spec: if "+preview" in self.spec:
args.append('--with-boost=%s' % spec['boost'].prefix) args.append("--enable-preview-build")
args.append("--with-python=%s" % self.spec["python"].prefix)
return args return args

View File

@ -0,0 +1,101 @@
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class SstElements(AutotoolsPackage):
"""SST Elements implements a range of components for performing
architecture simulation from node-level to system-level using
the SST discrete event core
"""
homepage = "https://github.com/sstsimulator"
git = "https://github.com/sstsimulator/sst-elements.git"
url = "https://github.com/sstsimulator/sst-elements/releases/download/v10.0.0_Final/sstelements-10.0.0.tar.gz"
maintainers = ['jjwilke']
version('10.0.0', sha256="ecf28ef97b27ea75be7e64cb0acb99d36773a888c1b32ba16034c62174b02693")
version('9.1.0', sha256="e19b05aa6e59728995fc059840c79e476ba866b67887ccde7eaf52a18a1f52ca")
version('develop', branch='devel')
version('master', branch='master')
variant("pin", default=False,
description="Enable the Ariel CPU model")
variant("dramsim2", default=False,
description="Build with DRAMSim2 support")
variant("nvdimmsim", default=False,
description="Build with NVDimmSim support")
variant("hybridsim", default=False,
description="Build with HybridSim support")
variant("goblin", default=False,
description="Build with GoblinHMCSim support")
variant("hbm", default=False,
description="Build with HBM DRAMSim2 support")
variant("ramulator", default=False,
description="Build with Ramulator support")
depends_on("python", type=('build', 'run'))
depends_on("sst-core")
depends_on("sst-core@develop", when="@develop")
depends_on("sst-core@master", when="@master")
depends_on("intel-pin@2.14", when="+pin")
depends_on("dramsim2@2.2", when="+dramsim2")
depends_on("hybridsim@2.0.1", when="+hybridsim")
depends_on("nvdimmsim@2.0.0", when="+nvdimmsim")
depends_on("goblin-hmc-sim", when="+goblin")
depends_on("ramulator@sst", when="+ramulator")
depends_on("hbm-dramsim2", when="+hbm")
depends_on("dramsim2@2.2.2", when="+hybridsim")
depends_on("nvdimmsim@2.0.0", when="+hybridsim")
depends_on('autoconf@1.68:', type='build', when='@master:')
depends_on('automake@1.11.1:', type='build', when='@master:')
depends_on('libtool@1.2.4:', type='build', when='@master:')
depends_on('m4', type='build', when='@master:')
# force out-of-source builds
build_directory = 'spack-build'
def autoreconf(self, spec, prefix):
bash = which('bash')
bash('autogen.sh')
def configure_args(self):
args = []
if '+pdes_mpi' in self.spec["sst-core"]:
env['CC'] = self.spec['mpi'].mpicc
env['CXX'] = self.spec['mpi'].mpicxx
env['F77'] = self.spec['mpi'].mpif77
env['FC'] = self.spec['mpi'].mpifc
if "+pin" in self.spec:
args.append("--with-pin=%s" % self.spec["intel-pin"].prefix)
if "+dramsim2" in self.spec or "+hybridsim" in self.spec:
args.append("--with-dramsim=%s" % self.spec["dramsim2"].prefix)
if "+nvdimmsim" in self.spec or "+hybridsim" in self.spec:
args.append("--with-nvdimmsim=%s" % self.spec["nvdimmsim"].prefix)
if "+hybridsim" in self.spec:
args.append("--with-hybridsim=%s" % self.spec["hybridsim"].prefix)
if "+goblin" in self.spec:
args.append("--with-goblin-hmcsim=%s" %
self.spec["goblin-hmc-sim"].prefix)
if "+hbm" in self.spec:
args.append("--with-hbmdramsim=%s" %
self.spec["hbm-dramsim2"].prefix)
if "+ramulator" in self.spec:
args.append("--with-ramulator=%s" % self.spec["ramulator"].prefix)
args.append("--with-sst-core=%s" % self.spec["sst-core"].prefix)
return args

View File

@ -16,48 +16,56 @@ class SstMacro(AutotoolsPackage):
""" """
homepage = "http://sst.sandia.gov/about_sstmacro.html" homepage = "http://sst.sandia.gov/about_sstmacro.html"
url = "https://github.com/sstsimulator/sst-macro/releases/download/v6.1.0_Final/sstmacro-6.1.0.tar.gz"
git = "https://github.com/sstsimulator/sst-macro.git" git = "https://github.com/sstsimulator/sst-macro.git"
url = "https://github.com/sstsimulator/sst-macro/releases/download/v10.0.0_Final/sstmacro-10.0.0.tar.gz"
maintainers = ['jjwilke']
version('10.0.0', sha256='064b732256f3bec9b553e00bcbc9a1d82172ec194f2b69c8797f585200b12566')
version('master', branch='master')
version('develop', branch='devel') version('develop', branch='devel')
version('8.0.0', sha256='8618a259e98ede9a1a2ce854edd4930628c7c5a770c3915858fa840556c1861f')
version('6.1.0', sha256='930b67313b594148d6356e550ca370214a9283858235321d3ef974191eb028d6')
depends_on('boost@1.59:', when='@:6.1.0') depends_on('autoconf@1.68:', type='build', when='@master:')
depends_on('automake@1.11.1:', type='build', when='@master:')
depends_on('autoconf@1.68:', type='build', when='@develop') depends_on('libtool@1.2.4:', type='build', when='@master:')
depends_on('automake@1.11.1:', type='build', when='@develop') depends_on('m4', type='build', when='@master:')
depends_on('libtool@1.2.4:', type='build', when='@develop')
depends_on('m4', type='build', when='@develop')
depends_on('binutils', type='build') depends_on('binutils', type='build')
depends_on('zlib', type=('build', 'link')) depends_on('zlib', type=('build', 'link'))
depends_on('otf2', when='+otf2') depends_on('otf2', when='+otf2')
depends_on('llvm+clang@:5.99.99', when='+skeletonizer') depends_on('llvm+clang@5:9', when='+skeletonizer')
depends_on('mpi', when='+mpi') depends_on('mpi', when='+pdes_mpi')
depends_on('sst-core@8.0.0', when='@8.0.0 +core')
depends_on('sst-core@develop', when='@develop+core') depends_on('sst-core@develop', when='@develop+core')
depends_on('sst-core@master', when='@master+core')
variant('pdes_threads', default=True,
description='Enable thread-parallel PDES simulation')
variant('pdes_mpi', default=False,
description='Enable distributed PDES simulation')
variant('core', default=False, description='Use SST Core for PDES') variant('core', default=False, description='Use SST Core for PDES')
variant('mpi', default=True, description='Enable distributed PDES simulation') variant('otf2', default=False,
variant('otf2', default=False, description='Enable OTF2 trace emission and replay support') description='Enable OTF2 trace emission and replay support')
variant('shared', default=True, description='Build shared libraries') variant('skeletonizer', default=False,
variant('skeletonizer', default=False, description='Enable Clang source-to-source autoskeletonization') description='Enable Clang source-to-source autoskeletonization')
variant('static', default=True, description='Build static libraries')
variant('threaded', default=False, description='Enable thread-parallel PDES simulation')
@run_before('autoreconf') variant('static', default=True, description='Build static libraries')
def bootstrap(self): variant('shared', default=True, description='Build shared libraries')
if '@develop' in self.spec:
Executable('./bootstrap.sh')() variant('werror', default=False,
description='Build with all warnings as errors')
variant('warnings', default=False,
description='Build with all possible warnings')
# force out-of-source builds
build_directory = 'spack-build'
def autoreconf(self, spec, prefix):
bash = which('bash')
bash('./bootstrap.sh')
def configure_args(self): def configure_args(self):
args = ['--disable-regex'] args = ['--disable-regex']
# Set CFLAGS and CXXFLAGS so they won't automatically insert '-g'
env['CFLAGS'] = '-O2'
env['CXXFLAGS'] = '-O2'
spec = self.spec spec = self.spec
args.append( args.append(
'--enable-static=%s' % ('yes' if '+static' in spec else 'no')) '--enable-static=%s' % ('yes' if '+static' in spec else 'no'))
@ -66,19 +74,30 @@ def configure_args(self):
if spec.satisfies("@8.0.0:"): if spec.satisfies("@8.0.0:"):
args.extend([ args.extend([
'--%sable-otf2' % ('en' if '+otf2' in spec else 'dis'), '--%sable-otf2' %
'--%sable-multithread' % ( ('en' if '+otf2' in spec else 'dis'),
'en' if '+threaded' in spec else 'dis') '--%sable-multithread' %
('en' if '+pdes_threads' in spec else 'dis')
]) ])
if '+skeletonizer' in spec: if '+skeletonizer' in spec:
args.append('--with-clang=' + spec['llvm'].prefix) args.append('--with-clang=' + spec['llvm'].prefix)
if spec.satisfies("@10:"):
if "+warnings" in spec:
args.append("--with-warnings")
if "+werror" in spec:
args.append("--with-werror")
if '+core' in spec: if '+core' in spec:
args.append('--with-sst-core=%s' % spec['sst-core'].prefix) args.append('--with-sst-core=%s' % spec['sst-core'].prefix)
# Optional MPI support # Optional MPI support
if '+mpi' in spec: need_core_mpi = False
if "+core" in spec:
if "+pdes_mpi" in spec["sst-core"]:
need_core_mpi = True
if '+pdes_mpi' in spec or need_core_mpi:
env['CC'] = spec['mpi'].mpicc env['CC'] = spec['mpi'].mpicc
env['CXX'] = spec['mpi'].mpicxx env['CXX'] = spec['mpi'].mpicxx
env['F77'] = spec['mpi'].mpif77 env['F77'] = spec['mpi'].mpif77

View File

@ -0,0 +1,25 @@
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class SstTransports(CMakePackage):
"""Provides transports like uGNI and verbs
that run in the simulator"""
homepage = "https://github.com/sstsimulator"
git = "https://github.com/jjwilke/sst-transports.git"
maintainers = ['jjwilke']
version('master', branch='master')
depends_on("sst-macro")
def cmake_args(self):
args = []
args.append("-DSSTMacro_ROOT=%s" % self.spec["sst-macro"].prefix)
return args