Skip to main content

memHierarchy

The memHierarchy library is a collection of cache, scratchpad, directory, and memory components that can be used to build memory systems. The components are generally designed to be interoperable. The library implements SST's StandardMemory interface for interfacing between endpoints (CPU, GPU, other accelerator, etc.) and the memHierarchy memory system. Additionally, memHierarchy components can be connected to each other and endpoints via both both raw SST links and network libraries that implement the SimpleNetwork interface.

At a Glance

Source Code: sst-elements/.../memHierarchy  
SST Name: memHierarchy  
Maturity Level: Mature (3)  
Development Path: Active  
Last Released: SST 16.1

Required dependencies​

None

Optional dependencies​

MemHierarchy memories can optionally use any of the following simulators in place of the included timing models for main memory, scratchpad, and other components that load a backend timing model. SST-Elements must be configured with the simulator's flag (listed below) for the integration to be enabled. See the SST dependency build instructions for details.

  • CramSim; included with sst-elements
  • HMCSim; configure with --with-goblin-hmcsim=/path/to/hmcsim; Download Deprecated as of SST 16.0; will be removed in SST 17.0.
  • messier; included with sst-elements
  • Ramulator; configure with --with-ramulator=/path/to/ramulator; Download Deprecated as of SST 16.0; will be removed in SST 17.0. Use Ramulator2 instead.
  • Ramulator2; configure with --with-ramulator2=/path/to/ramulator2; Ramulator2 does not have releases; SST tests against commit 011ccd7 New in SST 15.0

The following dependencies were removed in SST 16.1:

Elements​

Use sst-info memHierarchy or sst-info memHierarchy.<element> to see each element's parameters, ports, and statistics. Links in the Description column point to the pages that describe an element in more detail.

Caches, directories, and memories​

LibraryElementTypeDescription
memHierarchyCacheComponentCache controller for any cache level; coherence, replacement, hashing, and prefetching are set through subcomponents (see Caches)
memHierarchyDirectoryControllerComponentMSI or MESI coherence directory
memHierarchyMemControllerComponentMemory controller; timing comes from the memory backend in its backend slot
memHierarchyCoherentMemControllerComponentMemory controller that also supports cache shootdowns
memHierarchyMemCacheControllerComponentMemory-side cache (e.g., HBM used as a cache in front of DDR) with its own memory backend
memHierarchyScratchpadComponentScratchpad memory, accessed by an endpoint with explicit scratchpad and remote-memory requests
memHierarchyBusComponentBus that connects several memHierarchy components (e.g., multiple L1s to one L2)
memHierarchymultithreadL1ComponentConnects several CPUs to a single L1 cache as if they were hardware threads of one core
memHierarchySieveComponentSimple cache filter for modeling last-level caches, e.g. with Ariel (MemoryManagerSieve)
memHierarchyBroadcastShimComponentConnects a processor to multiple Sieves (e.g., for private or semi-private last-level caches)
memHierarchystandardInterfaceSubComponentStandardMem interface that endpoints load to send requests into memHierarchy (see Connecting to MemHierarchy and StandardMem Interface)
memHierarchyMemoryManagerSieveSubComponentAriel memory manager (memmgr slot) that works with Sieve
LibraryElementTypeDescription
memHierarchyMemLinkSubComponentDirect link to another memHierarchy component; used in highlink/lowlink slots (see highlink and lowlink)
memHierarchyMemNICSubComponentNetwork interface for connecting memHierarchy components through a SimpleNetwork network (see MemNIC)
memHierarchyMemNICFourSubComponentNetwork interface for split networks, with separate request, ack, forward, and data networks (see MemNICFour)
memHierarchyMemNetBridgeSubComponentTranslator for a merlin.Bridge that connects two memory networks
memHierarchynetworkMemoryInspectorSubComponentNetwork inspector that classifies the memory traffic going through a router

Cache policies​

LibraryElementTypeDescription
memHierarchycoherence.mesi_l1, coherence.mesi_inclusive, coherence.mesi_private_noninclusive, coherence.mesi_shared_noninclusive, coherence.incoherent_l1, coherence.incoherentSubComponentCoherence protocol implementations; a cache selects one from its L1, coherence_protocol, and cache_type parameters (see coherence)
memHierarchyreplacement.lru, replacement.lru-opt, replacement.lfu, replacement.lfu-opt, replacement.mru, replacement.mru-opt, replacement.random, replacement.nmruSubComponentReplacement policies (see replacement)
memHierarchyhash.none, hash.linear, hash.xorSubComponentHash functions for mapping addresses to cache sets (see hash)
memHierarchyemptyCacheListenerSubComponentCache listener that does nothing; the default when no prefetcher or listener is set (see prefetcher and listener)

Memory backends​

LibraryElementTypeDescription
memHierarchysimpleMemSubComponentMemory with a constant access time
memHierarchysimpleDRAMSubComponentSimplified DRAM timing model (banks and row buffers)
memHierarchytimingDRAMSubComponentMore detailed DRAM timing model (channels, ranks, banks); uses the address mappers, transaction queues, and page policies below
memHierarchysimpleAddrMapper, roundRobinAddrMapper, sandyBridgeAddrMapperModuleAddress mappers for timingDRAM (addrMapper parameter)
memHierarchyfifoTransactionQ, reorderTransactionQSubComponentTransaction queues for timingDRAM banks
memHierarchysimplePagePolicy, timeoutPagePolicySubComponentRow-buffer page policies for timingDRAM banks: static open/close, or close after a timeout
memHierarchyDelayBufferSubComponentAdds a fixed delay in front of another backend
memHierarchyreorderSimple, reorderByRowSubComponentReorder requests before passing them to another backend: first N accepted, or grouped by DRAM row
memHierarchycramsimSubComponentBackend that uses cramSim for timing
memHierarchyMessierSubComponentBackend that uses messier for NVM timing
memHierarchyvaultsimSubComponentBackend that uses vaultsim for stacked-memory timing
memHierarchyramulator, ramulator2, goblinHMCSimSubComponentBackends that use Ramulator, Ramulator2, or HMCSim; built only when SST-Elements is configured with the simulator (see Optional dependencies)
memHierarchysimpleMemBackendConvertor, flagMemBackendConvertor, extMemBackendConvertor, simpleMemScratchBackendConvertorSubComponentConvert memHierarchy events for each kind of backend; loaded automatically by memory controllers and scratchpads
memHierarchydefCustomCmdHandlerSubComponentDefault handler for custom memory commands; copies custom data to the backend

Test components​

LibraryElementTypeDescription
memHierarchystandardCPUComponentTest CPU that issues random reads and writes through a StandardMem interface
memHierarchystreamCPUComponentTest CPU that issues a streaming access pattern
memHierarchytrivialCPUComponentSimple test CPU that issues random accesses
memHierarchyScratchCPUComponentTest CPU for the Scratchpad interface
memHierarchymmioExComponentExample memory-mapped I/O device for testing the StandardMem interface