6.15. 对等设备内存访问

本节介绍CUDA运行时应用程序编程接口中的对等设备内存访问功能。

Functions

__host__cudaError_t cudaDeviceCanAccessPeer ( int* canAccessPeer, int  device, int  peerDevice )
Queries if a device may directly access a peer device's memory.
__host__cudaError_t cudaDeviceDisablePeerAccess ( int  peerDevice )
Disables direct access to memory allocations on a peer device.
__host__cudaError_t cudaDeviceEnablePeerAccess ( int  peerDevice, unsigned int  flags )
Enables direct access to memory allocations on a peer device.

Functions

__host__cudaError_t cudaDeviceCanAccessPeer ( int* canAccessPeer, int  device, int  peerDevice )
查询设备是否可以直接访问对等设备的内存。
参数
canAccessPeer
- Returned access capability
device
- Device from which allocations on peerDevice are to be directly accessed.
peerDevice
- Device on which the allocations to be directly accessed by device reside.
描述

如果设备device能够直接访问peerDevice的内存,则在*canAccessPeer中返回1,否则返回0。如果从device直接访问peerDevice是可行的,则可以通过调用cudaDeviceEnablePeerAccess()来启用该访问。

Note:

另请参阅:

cudaDeviceEnablePeerAccess, cudaDeviceDisablePeerAccess, cuDeviceCanAccessPeer

__host__cudaError_t cudaDeviceDisablePeerAccess ( int  peerDevice )
禁用对等设备上的内存分配直接访问。
参数
peerDevice
- Peer device to disable direct access to
描述

如果当前设备尚未启用对peerDevice内存的直接访问,则返回cudaErrorPeerAccessNotEnabled

Note:

另请参阅:

cudaDeviceCanAccessPeer, cudaDeviceEnablePeerAccess, cuCtxDisablePeerAccess

__host__cudaError_t cudaDeviceEnablePeerAccess ( int  peerDevice, unsigned int  flags )
允许直接访问对等设备上的内存分配。
参数
peerDevice
- Peer device to enable direct access to from the current device
flags
- Reserved for future use and must be set to 0
描述

成功时,来自peerDevice的所有分配将立即可以被当前设备访问。这些分配将保持可访问状态,直到使用cudaDeviceDisablePeerAccess()显式禁用访问,或者使用cudaDeviceReset()重置任一设备。

请注意,此调用授予的访问权限是单向的,为了从peerDevice访问当前设备上的内存,还需要对cudaDeviceEnablePeerAccess()进行单独的对称调用。

请注意,根据系统配置,存在设备级和系统级的限制,如CUDA编程指南中"点对点内存访问"部分所述。

如果cudaDeviceCanAccessPeer()显示当前设备无法直接访问peerDevice的内存,则返回cudaErrorInvalidDevice

如果当前设备已启用对peerDevice的直接访问,则返回cudaErrorPeerAccessAlreadyEnabled

如果flags不为0,则返回cudaErrorInvalidValue

Note:

另请参阅:

cudaDeviceCanAccessPeer, cudaDeviceDisablePeerAccess, cuCtxEnablePeerAccess