Simplified Interface for Complex Memory Improved Software Engineering Functionality

The above figure represents new provided interfaces from the SICM API to help applications and libraries utilize complex memories.
The above figure represents new provided interfaces from the SICM API to help applications and libraries utilize complex memories.


Released new version of SICM that incorporates improved SW engineering.

Significance and Impact

The first exascale computers will depend heavily on efficient use of nodes with complex memory architectures. There will be significant benefit to applications and libraries that place data objects in the correct memory tier for their usage profile.

Research Details

  • Adding capabilities within SICM for improved software engineering.
  • New Spack-compatible design will enable managing shared installations and modules on a cluster, or building combinatorial versions of SICM for testing.
  • The new build system allows installation to be customized. Users can specify the version, build compiler, compile-time options, and cross-compile platform, all on the command line.


Among the projects within the Software Technology area of the Exascale Computing Project (ECP) [1] is the SICM project [2] which focuses on delivering a unified simple interface to the emerging complex memory hierarchies on exascale nodes. It will enable applications and runtime libraries to leverage emerging memory technologies in a portable manner. The goal of this project is to create a universal interface for discovering, managing and sharing within complex memory hierarchies. The result will be a memory API and a software library that implements the API. These will allow operating system, runtime and application developers and vendors to access emerging memory technologies.

This Quarter, we improved SICM with some significant changes related to its build system, dependency handling, general efficiency, and arena allocation in the past quarter. These changes greatly enhance the ease of compiling SICM and its dependencies, as well as increase the efficiency of its high-level interface.

The two most significant changes from a user's perspective are the changes to the build system. GNU Autoconf and Automake are no longer used in favor of CMake. This enhances how SICM finds its compile-time dependencies, replacing our ad-hoc method with a more standard and simple CMake module for each dependency. Closely related to this change is the new Spack module, which should automatically handle SICM's dependencies on systems with Spack installed. Not only does this change simplify SICM's low-level interface greatly, but it also removes the requirement on the user's part to compile a custom-patched version of some of SICM's dependencies for the high-level interface.

A host of other, smaller changes simplify the high-level interface while increasing its feature set. We now no longer require a patched version of `jemalloc`. We have made profiling in SICM more efficient by enabling multiple allocation sites to be aggregated into a single arena and profiled together. This could be useful for larger-scale applications that have more allocation sites accessed at runtime. We also have improved C++ support by adding an interface to intercept all of C++'s standard library allocation calls, even if they have not been inlined into the application.