Skip to content

Add support for different kinds of memory (HBM, FAM, and others) #195

Open
@naveen-rn

Description

@naveen-rn

Goal

Allow explicit allocation of symmetric heap on different kinds of memory available in the system architecture.

Problem

Emerging systems support multiple kinds of memory with different performance and capacity characteristics. At present, the symmetric heap is created on a memory location determined by the implementation and the users don't have options to select the kind of memory for allocating the symmetric heap.

Proposed Solution - 1 - Environment Variable based Allocation

We propose few runtime changes to allow the users to determine the memory location at which the symmetric heaps can be created and call these user-determined memory locations as Memory Partitions. Each Memory Partitions feature a list of traits to define their characteristics and kind of memory being one of those featured traits.

More details on the proposed changes, HW/SW Impact analysis are available in Redmine Ticket and in this OpenSHMEM-17 workshop paper.

Example

# Environmental variable
SHMEM_SYMMETRIC_PARTITION<ID>=size=<size>[:pgsize=<page_size>][:kind=<mem_kind>][:policy=<mem_policy>]

# C/C++ routines
void *shmem_partition_malloc(size_t size, int partition_id)
void *shmem_partition_align(size_t alignment, size_t size, int partition_id)

Proposed Solution - 2 - OpenSHMEM Teams based memory allocation

This solution is still under discussion. Will be updated once the OpenSHMEM Teams proposal is complete and ready for adding into the specification.

Notes

Symmetric Memory Partition is a feature for allocating SHEAP on different memory kinds explicitly by the users. There are multiple ways to achieve it. Initially it started as env-variable based approach and later evolved into team-based approach. So, the feature itself isn't fixed on any one particular means to achieve the goal. Even both the solution can be adopted.

Blocked by Teams proposal for further discussioin

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions