HIP: Heterogenous-computing Interface for Portability: PeerToPeer Device Memory Access

HIP: Heterogenous-computing Interface for Portability

Macros | Functions
PeerToPeer Device Memory Access
HIP API
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 __dparm(0))
| 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.

## Function Documentation

## ◆ hipDeviceCanAccessPeer()

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

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

Parameters

  [out] | canAccessPeer | Returns the peer access capability (0 or 1)
  [in] | device | - device from where memory may be accessed.
  [in] | peerDevice | - 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] | peerDeviceId |

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] | peerDeviceId |
  [in] | flags | 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 | __dparm0
| ) |  |

Copies memory from one device to memory on another device.

Parameters

  [out] | dst | - Destination device pointer.
  [in] | dstDevice | - 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, hipErrorInvalidDevicePointer

See also
  hipCtxCreate, hipCtxDestroy, hipCtxGetFlags, hipCtxPopCurrent, hipCtxGetCurrent, hipCtxSetCurrent, hipCtxPushCurrent, hipCtxSetCacheConfig, hipCtxSynchronize, hipCtxGetDevice