1

我无法访问多 GPU 系统来测试这一点,但在 cuda.h 中我发现了两件看起来非常相似的事情。首先是功能

    CUresult CUDAAPI cuDeviceCanAccessPeer(int *canAccessPeer, CUdevice dev, CUdevice peerDev);

被描述成

返回*canAccessPeer1是否上下文 ondev能够直接从上下文访问内存peerDev0否则返回。如果可以直接访问peerDevfrom dev,则可以通过调用在两个特定上下文上启用访问::cuCtxEnablePeerAccess()

第二个是

    CUresult CUDAAPI cuDeviceGetP2PAttribute(int* value, CUdevice_P2PAttribute attrib, CUdevice srcDevice, CUdevice dstDevice);

被描述成

返回和之间链接*value the的请求属性的值。支持的属性是:attribsrcDevicedstDevice

::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK:表示两个设备之间链路性能的相对值。

::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTEDP2 :1` 如果启用 P2P 访问。

::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1如果支持通过链接的原子操作。

该名称CU_DEVICE_ATTRUBUTE_ACCESS_SUPPORTED表明调用 to 与cuDeviceCanAccessPeer使用set to相同,但“如果启用 P2P 访问”的描述让我感到困惑。cuDeviceGetP2PAttributeattrib::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P1

它们真的一样吗,或者第二个应该测试链接是否已激活?

4

1 回答 1

2

我不相信他们是一样的。

  • cuDeviceCanAccessPeer返回两个设备之间是否可以进行 P2P 访问。
  • cuDeviceGetP2PAttribute返回两个设备之间是否启用P2P 访问。

如果没有事先成功调用cuCtxEnablePeerAccesscuDeviceGetP2PAttribute则在查询CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED属性时应该返回 false,即使cuDeviceCanAccessPeer返回 true。

请注意,我目前也无法访问启用 P2P 的系统来检查这一点。

于 2016-11-08T10:43:50.717 回答