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_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_PEER_ACCESS_NOT_ENABLED, CUDA_ERROR_INVALID_CONTEXT,
描述
如果尚未从以下位置启用直接对等访问,则返回 CUDA_ERROR_PEER_ACCESS_NOT_ENABLEDpeerContext到当前上下文。
如果当前上下文不存在,或者如果 CUDA_ERROR_INVALID_CONTEXTpeerContext不是有效的上下文,则返回错误。
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
cuDeviceCanAccessPeer, cuCtxEnablePeerAccess, cudaDeviceDisablePeerAccess
- CUresult cuCtxEnablePeerAccess ( CUcontext peerContext, unsigned int Flags )
-
启用对等上下文中内存分配的直接访问。
参数
- peerContext
- - 要从当前上下文启用直接访问的对等上下文
- Flags
- - 保留供将来使用,必须设置为 0
返回值
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED, CUDA_ERROR_TOO_MANY_PEERS, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_PEER_ACCESS_UNSUPPORTED, CUDA_ERROR_INVALID_VALUE
描述
如果当前上下文和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_PEERS。peerContext如果当前上下文不存在,CUDA_ERROR_INVALID_CONTEXTpeerContext.
不是有效的上下文,或者如果当前上下文是 CUDA_ERROR_INVALID_CONTEXTFlags,则返回错误。
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
- 不是 0,则返回错误。
-
参数
返回值
- 要由 CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_DEVICE
描述
直接访问的分配所在的设备。在*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
- - 目标链接的目标设备。
返回值
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_DEVICE, CUDA_ERROR_INVALID_VALUE
描述
直接访问的分配所在的设备。*value和attrib之间链接的请求属性的值和之间的链接的请求属性srcDevicedstDevice
-
的。
-
支持的属性为:
-
CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK:一个相对值,指示两个设备之间链接的性能。
-
CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P:如果启用 P2P 访问,则为 1。
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_CONTEXTattrib或value无效,或者它们代表相同的设备,则返回错误。
注意请注意,此函数也可能返回先前异步启动的错误代码。
另请参阅
无效,或者如果 CUDA_ERROR_INVALID_VALUE