SST v15.1.0 Released
SST v15.1.0 is now available and can be downloaded here
Highlights of the feature enhancements in both SST-Core and SST-Elements are:
General
- This release has several performance improvements and bug fixes.
- The experimental debug console that allows online introspection of elements is significantly more capable.
- The memory overhead for configuration and for statistics has been optimized.
- Release tarballs will now include both these release notes and a summary of the platforms SST has been tested on (see PLATFORMS.md in the release tarballs). The website will continue to be updated with this information as well.
Deprecation and Removal Notices
- There are no new deprecations added in this point release. The following list is copied from the 15.0 release.
- Use of shared TimeConverters (via pointers returned from Core API functions) is deprecated. Core APIs that accepted a
TimeConverter* have been updated to accept a TimeConverter instead. In SST 16.0, Core APIs that return TimeConverter pointers will be changed to return a TimeConverter instance instead. To prepare for this switch, change code to construct a local TimeConverter instance from a returned TimeConverter pointer as shown.
// Old code
TimeConverter* tc = registerClock(...);
// New code
TimeConverter tc = registerClock(...);
- In SST input files, GlobalParams have been renamed to SharedParams to reflect the fact that they can be shared among elements but are not “global” as there can be multiple groups of SharedParams that are not shared across all elements.
- Reminder: The Event::Handler and Clock::Handler handler types were deprecated in SST 14.0. Use Event::Handler2 and Clock::Handler2 instead.
- The Handler signatures will be switched to match Handler2 in SST 16.0.
- The name Handler2 will be deprecated at SST 16.0 and removed in SST 17.0.
- Update all elements to use the new signatures before or at SST 16.0. Switching before SST 16.0 will require changing (
Handler<class> -> Handler2<class,&class::callback_function>) prior to SST 16.0 and then to (Handler<class, &class::callback_function>) after 16.0. Waiting until SST 16.0 to switch will cause your code to break in SST 16.0 until you change the definition of (Handler<class> -> Handler<class, &class::callback_function>).
- SST-Macro is a maintenance-only development effort. Due to increasing divergence between the SST-Core and SST-Macro, we will no longer be ensuring that the SST-Core and SST-Macro devel branches stay in sync. However, we will continue to ensure that the master branches and releases of SST-Macro work with SST-Core. Where possible, we recommend using the mercury element instead of SST-Macro. If mercury is missing key functionality present in SST-Macro that is not found elsewhere in SST-Elements, please let us know.
Known Issues
- The OpenMPI 4.1.1 available through Rocky Linux and other OS distributions masks SST’s error return codes which causes some SST tests to fail. A workaround is to use OpenMPI 4.1.6.
- Element python modules (e.g., pymerlin, pyember) do not work under Python 3.14. This issue is being investigated.
- Due to changes in default floating-point compile options which leads to slightly different results, some SST tests currently report failures with gcc 14 on Rocky 10. This is a test issue only and will be fixed for the next release.
SST-Core
New Features and Enhancements
- Added support for statistics to PortModules. Also added access to the sst_fatal and sst_assert functions.
- Reduced memory overhead for ConfigLink which reduces memory footprint for simulations with many links.
- Reduced memory overhead for Statistics which improves performance for simulations that use statistics and/or that declare statistics but do not enable them.
- Re-wrote JSON reader and writer to use a streaming interface which improves performance and eliminates prior file size limitations
- Significant usability improvements in InteractiveConsole.
- A new
SST_ELI_IS_CHECKPOINTABLE can be used to indicate an element supports checkpoint. The macro takes no arguments.
- Parallel checkpoints can now be restarted in serial.
- Output from –print-timing-info reports more information and a verbosity level can be specified to increase level of granularity of code sections
- Enhanced checkpoint serialization support to include
std::variant, std::optional, std::bitset, std::valarray, std::unique_ptr and others.
- Libraries that have the path key
_EXT_ in them are excluded from sst-info, enabling elements to install extra non-element libraries
- Restart no longer requires the
--load-checkpoint flag. A checkpoint file (.sstcpt) will be automatically recognized.
- SST now exits with an error message instead of segfaulting if a bad configuration file is provided.
- Added ability to write profiling/timing information to JSON. This does not yet support the expanded timing information that was also added in this release.
Bug Fixes
- Fixed issue where JSON model reader could not load JSON models exceeding 32b of keys
- Fixed issue where event IDs could potentially be reused when restarting from a checkpoint
- Fixed error in mapping serialization which caused nullptr names
- Fixed missing lock_guard in SharedSet::write() which could cause a race condition
- Fixed bug where sst-info would crash if run without arguments due to auxiliary non-element libraries present in library search path
- Added missing
unregisterClock definition in BaseComponent
- Fixed issue where writing the simulation configuration to a Python file did not correctly instantiate links
- Fixed race condition in Params
General updates, changes, and cleanup
- Cleaned up #includes.
- While code for serializing
shared_ptr and weak_ptr is present in the repository and release, it is not enabled in the release as it can cause compile errors on some older compilers.
- Test framework cleanup including removing unused code and always printing file diffs on test failures
- Checkpoint manifest now stores relative instead of absolute paths to checkpoint files for easier relocation
- Expose MPI_Comm_spawn_multiple to elements, enabling elements to trace processes that use MPI internally without interfering with SST’s use. This is experimental while we work out the mechanism.
- Code reorganization in main to simplify/unify regular-start and restart paths
- Some checkpoint reorganization so that elements are checkpointed as self-contained binary blobs. This will support a future feature allowing repartitioning and different parallelism for restarts. In this release, a restart must either be serial or have the same parallelism as it was checkpointed with.
SST-Elements
- General updates
- General fixes for compile warnings across several elements
- ariel
- New PEBIL-based frontend supports static binary instrumentation as an alternative to PIN. The PEBIL frontend supports sampling for improved simulation time.
- Fixed nullptr format string that was passed to Output::fatal()
- arielapi.h is now installed
- golem
- Correctly allocate an array, fixing potential segfault
- memHierarchy
- Fix for statistics that could be uninitialized during a checkpoint.
- Optimized memory region intersection check which can be slow.
- Added support for checkpointing caches and directory controller
- mercury
- Moved auxiliary libraries to install in an “ext” subdirectory; this enables sst-info to skip them, fixing a fatal error in sst-info.
- Threading fix and other stabilization improvements
- Added support for application arguments
- merlin
- Updated merlin system object to account for allocation_block_size when filling in extra nodes with EmptyJob.
- Fixed propagation of init events in dragonfly
- Fix for uniform target generator
- simpleSimulation
- Updated example to include two versions of the same example simulation; one monolithic and one distributed
- vanadis
- Added clone3, tgkill syscalls. Vanadis now exits with an error instead of segfaulting if the simulated application segfaults.
- New support for pthreads when using clang/riscv-gnu-toolchain cross compilers
- Eliminated extra decodes caused by double looping over the number of decodes
- Fixed bug in mprotect that could break access to program data
- Added ability to unmap part of a region
- Some code reorganization
- Added some example configurations to a new examples/ directory
- Added an unimplemented rseq syscall to support newer llvm compilers
- Minor performance optimization in vanadis registers
- Added script for automatically regenerating test reference files
- Added additional checks to replace segfaults with error messages
SST-Macro
- As of SST 15.0, macro’s devel branch is no longer being kept in sync with sst-core’s devel branch. The master branches and releases will continue to be kept in sync.
This means there may be times when the sst-macro and sst-core devel branches do not work together.
- Fix for OTF2 so that Macro no longer automatically uses OTF2 when found in the environment.
- Fixed bug in torus minimal path computation
- Fixed issue with sst-core includes
- There is a known issue compiling SST-Macro with Python 3.13+. This will be fixed in a future release.
Current release information can be found here
We look forward to hearing your successes with the latest release!
SST Research and Product Teams
Sandia National Laboratories, USA