---
name: "sc_RDMAMemoryGrp"
section: "3"
platform: "linux"
package: "libsc-doc"
version: "2.3.1-22"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/sc_RDMAMemoryGrp"
---

# sc\_RDMAMemoryGrp(3)

The RDMAMemoryGrp abstract class specializes the MsgMemoryGrp class.

## NAME

sc::RDMAMemoryGrp - The **RDMAMemoryGrp** abstract class specializes the **MsgMemoryGrp** class.

## SYNOPSIS

`#include <memrdma.h>`

Inherits **sc::MsgMemoryGrp**.

Inherited by **sc::ARMCIMemoryGrp**.

### Public Member Functions

**RDMAMemoryGrp** (const **Ref**\< **MessageGrp** \> &msg)\
 **RDMAMemoryGrp** (const **Ref**\< **KeyVal** \> &)\
 void \* **localdata** ()\
 Returns a pointer to the local data.  void **set\_localsize** (size\_t **localsize**)\
 Set the size of locally held memory.  void \* **obtain\_writeonly** (**distsize\_t** **offset**, int **size**)\
 This gives write access to the memory location. No locking is done.  void \* **obtain\_readwrite** (**distsize\_t** **offset**, int **size**)\
 Only one thread can have an unreleased obtain\_readwrite at a time.  void \* **obtain\_readonly** (**distsize\_t** **offset**, int **size**)\
 This gives read access to the memory location. No locking is done.  void **release\_readonly** (void \*data, **distsize\_t** **offset**, int **size**)\
 This is called when read access is no longer needed.  void **release\_writeonly** (void \*data, **distsize\_t** **offset**, int **size**)\
 This is called when write access is no longer needed.  void **release\_readwrite** (void \*data, **distsize\_t** **offset**, int **size**)\
 This is called when read/write access is no longer needed.  void **sum\_reduction** (double \*data, **distsize\_t** doffset, int dsize)\
 void **sum\_reduction\_on\_node** (double \*data, size\_t doffset, int dsize, int node=-1)\
 void **print** (std::ostream &o=**ExEnv::out0**()) const\
 Prints out information about the object.

### Protected Member Functions

virtual void **retrieve\_data** (void \*, int node, int **offset**, int **size**, int lock)=0\
 virtual void **replace\_data** (void \*, int node, int **offset**, int **size**, int unlock)=0\
 virtual void **sum\_data** (double \*data, int node, int doffset, int dsize)=0\
 void \* **malloc\_region** (size\_t nbyte)\
 void **free\_region** (void \*)\

### Protected Attributes

char \* **data\_**\
 std::vector\< **Pool** \* \> **pools\_**\
 size\_t **default\_pool\_size\_**\

### Additional Inherited Members

## Detailed Description

The **RDMAMemoryGrp** abstract class specializes the **MsgMemoryGrp** class.

It uses RDMA to implement global shared memory. \

## Member Function Documentation

### void \* sc::RDMAMemoryGrp::localdata ()` [virtual]`

Returns a pointer to the local data.

Implements **sc::MemoryGrp**.

### void \* sc::RDMAMemoryGrp::obtain\_readonly (distsize\_t offset, int size)` [virtual]`

This gives read access to the memory location. No locking is done.

Implements **sc::MemoryGrp**.

### void \* sc::RDMAMemoryGrp::obtain\_readwrite (distsize\_t offset, int size)` [virtual]`

Only one thread can have an unreleased obtain\_readwrite at a time. The actual memory region locked can be larger than that requested. If the memory region is already locked this will block. For this reason, data should be held as read/write for as short a time as possible.

Implements **sc::MemoryGrp**.

### void \* sc::RDMAMemoryGrp::obtain\_writeonly (distsize\_t offset, int size)` [virtual]`

This gives write access to the memory location. No locking is done.

Implements **sc::MemoryGrp**.

### void sc::RDMAMemoryGrp::print (std::ostream & o = ExEnv::out0`()`) const` [virtual]`

Prints out information about the object.

Reimplemented from **sc::MemoryGrp**.

### void sc::RDMAMemoryGrp::release\_readonly (void \* data, distsize\_t offset, int size)` [virtual]`

This is called when read access is no longer needed.

Implements **sc::MemoryGrp**.

### void sc::RDMAMemoryGrp::release\_readwrite (void \* data, distsize\_t offset, int size)` [virtual]`

This is called when read/write access is no longer needed. The memory will be unlocked.

Implements **sc::MemoryGrp**.

### void sc::RDMAMemoryGrp::release\_writeonly (void \* data, distsize\_t offset, int size)` [virtual]`

This is called when write access is no longer needed.

Implements **sc::MemoryGrp**.

### void sc::RDMAMemoryGrp::set\_localsize (size\_t)` [virtual]`

Set the size of locally held memory. When memory is accessed using a global offset counting starts at node 0 and proceeds up to node **n()** - 1.

Reimplemented from **sc::MsgMemoryGrp**.

### void sc::RDMAMemoryGrp::sum\_reduction (double \* data, distsize\_t doffset, int dsize)` [virtual]`

Reimplemented from **sc::MemoryGrp**.

### void sc::RDMAMemoryGrp::sum\_reduction\_on\_node (double \* data, size\_t doffset, int dsize, int node = `-1`)` [virtual]`

Reimplemented from **sc::MemoryGrp**.

## Author

Generated automatically by Doxygen for MPQC from the source code.
