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:-
请注意,此函数也可能返回之前异步启动的错误代码。
-
请注意,如果此调用尝试初始化CUDA RT内部状态,该函数也可能返回cudaErrorInitializationError、cudaErrorInsufficientDriver或cudaErrorNoDevice。
-
请注意,根据cudaStreamAddCallback的规定,回调函数中不得调用任何CUDA函数。在这种情况下,可能会(但不保证)返回cudaErrorNotPermitted作为诊断信息。
另请参阅:
cudaDeviceEnablePeerAccess, cudaDeviceDisablePeerAccess, cuDeviceCanAccessPeer
- __host__ cudaError_t cudaDeviceDisablePeerAccess ( int peerDevice )
-
禁用对等设备上的内存分配直接访问。
参数
- peerDevice
- - Peer device to disable direct access to
描述
如果当前设备尚未启用对peerDevice内存的直接访问,则返回cudaErrorPeerAccessNotEnabled。
Note:-
请注意,此函数也可能返回之前异步启动的错误代码。
-
请注意,如果此调用尝试初始化CUDA RT内部状态,该函数也可能返回cudaErrorInitializationError、cudaErrorInsufficientDriver或cudaErrorNoDevice。
-
请注意,根据cudaStreamAddCallback的规定,回调函数中不得调用任何CUDA函数。在这种情况下,可能会(但不保证)返回cudaErrorNotPermitted作为诊断信息。
另请参阅:
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:-
请注意,此函数也可能返回之前异步启动的错误代码。
-
请注意,如果此调用尝试初始化CUDA RT内部状态,该函数也可能返回cudaErrorInitializationError、cudaErrorInsufficientDriver或cudaErrorNoDevice。
-
请注意,根据cudaStreamAddCallback的规定,回调函数中不得调用任何CUDA函数。在这种情况下,可能会(但不保证)返回cudaErrorNotPermitted作为诊断信息。
另请参阅:
cudaDeviceCanAccessPeer, cudaDeviceDisablePeerAccess, cuCtxEnablePeerAccess