6.15. 对等设备内存访问
本节介绍 CUDA 运行时应用程序编程接口的对等设备内存访问功能。
函数
- __host__ cudaError_t cudaDeviceCanAccessPeer ( int* canAccessPeer, int device, int peerDevice )
- 查询设备是否可以直接访问对等设备的内存。
- __host__ cudaError_t cudaDeviceDisablePeerAccess ( int peerDevice )
- 禁用对对等设备上内存分配的直接访问。
- __host__ cudaError_t cudaDeviceEnablePeerAccess ( int peerDevice, unsigned int flags )
- 启用对对等设备上内存分配的直接访问。
函数
- __host__ cudaError_t cudaDeviceCanAccessPeer ( int* canAccessPeer, int device, int peerDevice )
-
查询设备是否可以直接访问对等设备的内存。
参数
- canAccessPeer
- - 返回的访问能力
- device
- - 设备,从此设备访问上的分配peerDevice将被直接访问。
- peerDevice
- - 设备,其上的分配将被直接访问device驻留。
描述
在*canAccessPeer中返回值 1,如果 devicedevice能够直接访问来自peerDevice的内存,否则返回 0。如果可以直接访问peerDevice来自device,则可以通过调用 cudaDeviceEnablePeerAccess() 启用访问。
注意-
请注意,此函数也可能返回来自先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError, cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,如 cudaStreamAddCallback 所指定,不得从回调中调用任何 CUDA 函数。在这种情况,可能会返回 cudaErrorNotPermitted 作为诊断信息,但不保证一定返回。
另请参阅
cudaDeviceEnablePeerAccess, cudaDeviceDisablePeerAccess, cuDeviceCanAccessPeer
- __host__ cudaError_t cudaDeviceDisablePeerAccess ( int peerDevice )
-
禁用对对等设备上内存分配的直接访问。
参数
- peerDevice
- - 对等设备,禁用对其的直接访问
描述
如果尚未从当前设备启用对peerDevice上内存的直接访问,则返回 cudaErrorPeerAccessNotEnabled。
注意-
请注意,此函数也可能返回来自先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError, cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,如 cudaStreamAddCallback 所指定,不得从回调中调用任何 CUDA 函数。在这种情况,可能会返回 cudaErrorNotPermitted 作为诊断信息,但不保证一定返回。
另请参阅
cudaDeviceCanAccessPeer, cudaDeviceEnablePeerAccess, cuCtxDisablePeerAccess
- __host__ cudaError_t cudaDeviceEnablePeerAccess ( int peerDevice, unsigned int flags )
-
启用对对等设备上内存分配的直接访问。
参数
- peerDevice
- - 对等设备,启用从当前设备对其的直接访问
- flags
- - 保留供将来使用,必须设置为 0
描述
成功后,当前设备将立即可以访问来自peerDevice的所有分配。它们将保持可访问状态,直到使用 cudaDeviceDisablePeerAccess() 显式禁用访问,或使用 cudaDeviceReset() 重置任一设备为止。
请注意,此调用授予的访问权限是单向的,为了从peerDevice访问当前设备上的内存,需要对 cudaDeviceEnablePeerAccess() 进行单独的对称调用。
请注意,根据系统配置,存在设备范围和系统范围的限制,如 CUDA 编程指南中“对等内存访问”部分所述。
如果 cudaDeviceCanAccessPeer() 指示当前设备无法直接访问来自peerDevice.
的内存,则返回 cudaErrorPeerAccessAlreadyEnabled。peerDevice如果已启用从当前设备对
的直接访问,则返回 cudaErrorInvalidValue。flags如果
注意-
请注意,此函数也可能返回来自先前异步启动的错误代码。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError, cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,如 cudaStreamAddCallback 所指定,不得从回调中调用任何 CUDA 函数。在这种情况,可能会返回 cudaErrorNotPermitted 作为诊断信息,但不保证一定返回。
另请参阅
cudaDeviceCanAccessPeer, cudaDeviceDisablePeerAccess, cuCtxEnablePeerAccess