Skip to content

shmem_malloc Interface to Leverage Hierarchical & Heterogenous Memory Characteristics  #258

@manjugv

Description

@manjugv

Problem:

A typical node in the current HPC systems is composed of variety of memories and organized into multiple hierarchies and/or have different affinities to the PEs and threads. The OpenSHMEM programming model and its memory allocation routines are oblivious to these variations. As a consequence, it is a challenge for the OpenSHMEM program to leverage memory characteristics and capabilities to achieve higher performance in a portable way.

Proposal:

Introduce memory allocation interface that can pass hints to the OpenSHMEM implementations.
The memory hints are then utilized by the implementations to optimize memory for that behavior.
For example, if the user specifies that a particular allocation is used as a pSync array, then the implementation can use the memory that is available on NUMA memory bank that is near to the network. In the cases where the memory is available on the network interface, it can allocate that memory for the pSync array. This can impact the latency characteristics.

Impact on Users:

These interfaces should provide an opportunity to the user to provide usage information to
the implementation, which implementations can then utilize to optimize for that behavior. If the implementations
optimize for that behavior, the programs should achieve higher performance and/or scalability.

The OpenSHMEM programs not using these interfaces or using SHMEM_HINT_NONE is not
impacted.

Impact on Implementations:

This provides an opportunity for the implementations to optimize the behavior for particular usage.
If an implementation does not support optimizations, it is allowed to default to shmem_malloc behavior.

Useful References

  1. https://software.intel.com/sites/default/files/managed/5f/5e/MCDRAM_Tutorial.pdf
  2. SharP Unified Memory Allocator: https://www.osti.gov/biblio/1468045
  3. mbind: https://www.kernel.org/doc/html/v4.18/admin-guide/mm/numa_memory_policy.html

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions