Cuda 什么';cuDeviceCanAccessPeer(…)和CUDeviceGetP2PatAttribute(…,CU_设备_P2P_属性_访问_受支持,…)之间的区别是什么?
我没有访问多gpu系统来测试这一点,但在cuda.h中,我发现了两个非常相似的东西。首先是功能Cuda 什么';cuDeviceCanAccessPeer(…)和CUDeviceGetP2PatAttribute(…,CU_设备_P2P_属性_访问_受支持,…)之间的区别是什么?,cuda,multi-gpu,Cuda,Multi Gpu,我没有访问多gpu系统来测试这一点,但在cuda.h中,我发现了两个非常相似的东西。首先是功能 CUresult CUDAAPI cuDeviceCanAccessPeer(int *canAccessPeer, CUdevice dev, CUdevice peerDev); 形容为 如果dev上的上下文能够从peerDev上的上下文直接访问内存,则在*canAccessPeer中返回1的值,否则返回0。如果可以从dev直接访问peerDev,则可以通过调用:cuctxenablel
CUresult CUDAAPI cuDeviceCanAccessPeer(int *canAccessPeer, CUdevice dev, CUdevice peerDev);
形容为
如果dev
上的上下文能够从peerDev
上的上下文直接访问内存,则在*canAccessPeer
中返回1
的值,否则返回0
。如果可以从dev
直接访问peerDev
,则可以通过调用:cuctxenablelepearaccess()
在两个特定上下文上启用访问
第二个是
CUresult CUDAAPI cuDeviceGetP2PAttribute(int* value, CUdevice_P2PAttribute attrib, CUdevice srcDevice, CUdevice dstDevice);
形容为
在*值中返回srcDevice
和dstDevice
之间链接的请求属性attrib
的值。支持的属性包括:
::CU\u设备\u P2P\u属性\u性能\u排名
:指示两个设备之间链路性能的相对值
::CU\u设备\u P2P\u属性\u访问受支持
P2:
1`如果启用了P2P访问
::CU\u设备\u P2P\u属性\u本机\u原子\u支持:1
如果支持通过链接进行原子操作
支持的名称CU\u设备\u属性\u访问
表明调用cuDeviceCanAccessPeer
与使用CUDeviceGetP2PatAttribute
时相同,且attrib
设置为::CU\u设备\u P2P\u属性\u访问
支持的P2P
,但如果启用P2P访问,则说明“1
”我很困惑
它们真的是一样的,还是第二个应该测试链接是否被激活?我不相信它们是一样的
返回两台设备之间是否可以进行P2P访问cuDeviceCanAccessPeer
返回两台设备之间是否启用了P2P访问CUDeviceGetP2PatAttribute
cuctxenablepeercess
,cuDeviceGetP2PAttribute
在查询CU\u DEVICE\u P2P\u ATTRIBUTE\u ACCESS\u SUPPORTED
属性时应返回false,即使cuDeviceCanAccessPeer
返回true
请注意,我目前也无法访问启用P2P的系统来检查这一点。似乎是这样,但另一方面,属性名称
CU\u DEVICE\u P2P\u attribute\u access\u SUPPORTED
让我有点困惑。