This page contains proposed changes for a future release of ROCm. Read the latest Linux release of ROCm documentation for your production environments.

PeerToPeer Device Memory Access

PeerToPeer Device Memory Access#

HIP Runtime API Reference: PeerToPeer Device Memory Access
PeerToPeer Device Memory Access
Collaboration diagram for PeerToPeer Device Memory Access:

Macros

#define USE_PEER_NON_UNIFIED   1
 

Functions

hipError_t hipDeviceCanAccessPeer (int *canAccessPeer, int deviceId, int peerDeviceId)
 Determine if a device can access a peer's memory. More...
 
hipError_t hipDeviceEnablePeerAccess (int peerDeviceId, unsigned int flags)
 Enable direct access from current device's virtual address space to memory allocations physically located on a peer device. More...
 
hipError_t hipDeviceDisablePeerAccess (int peerDeviceId)
 Disable direct access from current device's virtual address space to memory allocations physically located on a peer device. More...
 
hipError_t hipMemGetAddressRange (hipDeviceptr_t *pbase, size_t *psize, hipDeviceptr_t dptr)
 Get information on memory allocations. More...
 
hipError_t hipMemcpyPeer (void *dst, int dstDeviceId, const void *src, int srcDeviceId, size_t sizeBytes)
 Copies memory from one device to memory on another device. More...
 
hipError_t hipMemcpyPeerAsync (void *dst, int dstDeviceId, const void *src, int srcDevice, size_t sizeBytes, hipStream_t stream)
 Copies memory from one device to memory on another device. More...
 

Detailed Description



Warning
PeerToPeer support is experimental. This section describes the PeerToPeer device memory access functions of HIP runtime API.

Macro Definition Documentation

◆ USE_PEER_NON_UNIFIED

#define USE_PEER_NON_UNIFIED   1

Function Documentation

◆ hipDeviceCanAccessPeer()

hipError_t hipDeviceCanAccessPeer ( int *  canAccessPeer,
int  deviceId,
int  peerDeviceId 
)

Determine if a device can access a peer's memory.

Parameters
[out]canAccessPeerReturns the peer access capability (0 or 1)
[in]deviceId- device from where memory may be accessed.
[in]peerDeviceId- device where memory is physically located

Returns "1" in canAccessPeer if the specified device is capable of directly accessing memory physically located on peerDevice , or "0" if not.

Returns "0" in canAccessPeer if deviceId == peerDeviceId, and both are valid devices : a device is not a peer of itself.

Returns
hipSuccess,
hipErrorInvalidDevice if deviceId or peerDeviceId are not valid devices

◆ hipDeviceDisablePeerAccess()

hipError_t hipDeviceDisablePeerAccess ( int  peerDeviceId)

Disable direct access from current device's virtual address space to memory allocations physically located on a peer device.

Returns hipErrorPeerAccessNotEnabled if direct access to memory on peerDevice has not yet been enabled from the current device.

Parameters
[in]peerDeviceIdPeer device to disable direct access to
Returns
hipSuccess, hipErrorPeerAccessNotEnabled

◆ hipDeviceEnablePeerAccess()

hipError_t hipDeviceEnablePeerAccess ( int  peerDeviceId,
unsigned int  flags 
)

Enable direct access from current device's virtual address space to memory allocations physically located on a peer device.

Memory which already allocated on peer device will be mapped into the address space of the current device. In addition, all future memory allocations on peerDeviceId will be mapped into the address space of the current device when the memory is allocated. The peer memory remains accessible from the current device until a call to hipDeviceDisablePeerAccess or hipDeviceReset.

Parameters
[in]peerDeviceIdPeer device to enable direct access to from the current device
[in]flagsReserved for future use, must be zero

Returns hipSuccess, hipErrorInvalidDevice, hipErrorInvalidValue,

Returns
hipErrorPeerAccessAlreadyEnabled if peer access is already enabled for this device.

◆ hipMemcpyPeer()

hipError_t hipMemcpyPeer ( void *  dst,
int  dstDeviceId,
const void *  src,
int  srcDeviceId,
size_t  sizeBytes 
)

Copies memory from one device to memory on another device.

Parameters
[out]dst- Destination device pointer.
[in]dstDeviceId- Destination device
[in]src- Source device pointer
[in]srcDeviceId- Source device
[in]sizeBytes- Size of memory copy in bytes
Returns
hipSuccess, hipErrorInvalidValue, hipErrorInvalidDevice

◆ hipMemcpyPeerAsync()

hipError_t hipMemcpyPeerAsync ( void *  dst,
int  dstDeviceId,
const void *  src,
int  srcDevice,
size_t  sizeBytes,
hipStream_t  stream 
)

Copies memory from one device to memory on another device.

Parameters
[out]dst- Destination device pointer.
[in]dstDeviceId- Destination device
[in]src- Source device pointer
[in]srcDevice- Source device
[in]sizeBytes- Size of memory copy in bytes
[in]stream- Stream identifier
Returns
hipSuccess, hipErrorInvalidValue, hipErrorInvalidDevice

◆ hipMemGetAddressRange()

hipError_t hipMemGetAddressRange ( hipDeviceptr_t pbase,
size_t *  psize,
hipDeviceptr_t  dptr 
)

Get information on memory allocations.

Parameters
[out]pbase- BAse pointer address
[out]psize- Size of allocation
[in]dptr-Device Pointer
Returns
hipSuccess, hipErrorNotFound
See also
hipCtxCreate, hipCtxDestroy, hipCtxGetFlags, hipCtxPopCurrent, hipCtxGetCurrent, hipCtxSetCurrent, hipCtxPushCurrent, hipCtxSetCacheConfig, hipCtxSynchronize, hipCtxGetDevice