6.31. 对等上下文内存访问

本节介绍低级别 CUDA 驱动程序应用程序编程接口的直接对等上下文内存访问功能。

函数

CUresult cuCtxDisablePeerAccess ( CUcontext peerContext )
禁用对等上下文中内存分配的直接访问,并取消注册任何已注册的分配。
CUresult cuCtxEnablePeerAccess ( CUcontext peerContext, unsigned int  Flags )
启用对等上下文中内存分配的直接访问。
CUresult cuDeviceCanAccessPeer ( int* canAccessPeer, CUdevice dev, CUdevice peerDev )
查询设备是否可以直接访问对等设备的内存。
CUresult cuDeviceGetP2PAttribute ( int* value, CUdevice_P2PAttribute attrib, CUdevice srcDevice, CUdevice dstDevice )
查询两个设备之间链接的属性。

函数

CUresult cuCtxDisablePeerAccess ( CUcontext peerContext )
禁用对等上下文中内存分配的直接访问,并取消注册任何已注册的分配。
参数
peerContext
- 要禁用直接访问的对等上下文
描述

如果尚未从以下位置启用直接对等访问,则返回 CUDA_ERROR_PEER_ACCESS_NOT_ENABLEDpeerContext到当前上下文。

如果当前上下文不存在,或者如果 CUDA_ERROR_INVALID_CONTEXTpeerContext不是有效的上下文,则返回错误。

注意

请注意,此函数也可能返回先前异步启动的错误代码。

另请参阅

cuDeviceCanAccessPeer, cuCtxEnablePeerAccess, cudaDeviceDisablePeerAccess

CUresult cuCtxEnablePeerAccess ( CUcontext peerContext, unsigned int  Flags )
启用对等上下文中内存分配的直接访问。
参数
peerContext
- 要从当前上下文启用直接访问的对等上下文
Flags
- 保留供将来使用,必须设置为 0
描述

如果当前上下文和peerContext都位于支持统一寻址(可以使用 CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING 查询)且主计算能力相同的设备上,则成功后,当前上下文将立即访问 统一寻址 获取更多详细信息。peerContext的所有分配。

请注意,此调用授予的访问权限是单向的,为了从当前上下文中访问 cuCtxEnablePeerAccess() 的对称调用。peerContext中的内存,需要单独对

请注意,每个系统配置都有设备范围和系统范围的限制,如 CUDA 编程指南中“对等内存访问”部分所述。

如果 cuDeviceCanAccessPeer() 指示当前上下文的 CUdevice 无法直接访问 CUdevice 的内存,则返回 CUDA_ERROR_PEER_ACCESS_UNSUPPORTEDpeerContext.

的。peerContext如果已启用从当前上下文直接访问 CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED

,则返回错误。

如果由于对等访问所需的硬件资源已耗尽,而无法进行直接对等访问,则返回 CUDA_ERROR_TOO_MANY_PEERSpeerContext如果当前上下文不存在,CUDA_ERROR_INVALID_CONTEXTpeerContext.

不是有效的上下文,或者如果当前上下文是 CUDA_ERROR_INVALID_CONTEXTFlags,则返回错误。

注意

请注意,此函数也可能返回先前异步启动的错误代码。

另请参阅

如果 CUDA_ERROR_INVALID_VALUE

不是 0,则返回错误。
参数
CUresult cuDeviceCanAccessPeer ( int* canAccessPeer, CUdevice dev, CUdevice peerDev )
查询设备是否可以直接访问对等设备的内存。
canAccessPeer
- 返回的访问能力dev- 从其分配的设备
dev
peerDevcanAccessPeer是要直接访问的设备。
描述

直接访问的分配所在的设备。*canAccessPeercanAccessPeer中返回dev的值为 1,如果 CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_DEVICEdev上的上下文能够直接访问 CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_DEVICEcanAccessPeer上的上下文的内存,否则为 0。如果可以从 cuCtxEnablePeerAccess() 启用两个特定上下文的访问。

注意

请注意,此函数也可能返回先前异步启动的错误代码。

另请参阅

直接访问 cuCtxEnablePeerAccess, cuCtxDisablePeerAccess, cudaDeviceCanAccessPeer

CUresult cuDeviceGetP2PAttribute ( int* value, CUdevice_P2PAttribute attrib, CUdevice srcDevice, CUdevice dstDevice )
查询两个设备之间链接的属性。
参数
value
- 返回的请求属性值
attrib
- CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_DEVICE, CUDA_ERROR_INVALID_VALUE之间的链接的请求属性srcDevice.
- 目标链接的源设备。
srcDevice
- 目标链接的目标设备。
描述

直接访问的分配所在的设备。*valueattrib之间链接的请求属性的值之间的链接的请求属性srcDevicedstDevice

CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED:如果支持通过链接的原子操作,则为 1。CU_DEVICE_P2P_ATTRIBUTE_CUDA_ARRAY_ACCESS_SUPPORTED:如果可以通过链接访问 cudaArray,则为 1。srcDevice如果 CUDA_ERROR_INVALID_DEVICE

不是有效的上下文,或者如果当前上下文是 CUDA_ERROR_INVALID_CONTEXTattribvalue无效,或者它们代表相同的设备,则返回错误。

注意

请注意,此函数也可能返回先前异步启动的错误代码。

另请参阅

无效,或者如果 CUDA_ERROR_INVALID_VALUE