У меня нет доступа к системе с несколькими gpu, чтобы проверить это, но в cuda.h я нашел две вещи, которые кажутся очень похожими. Первая функцияВ чем разница между cuDeviceCanAccessPeer (...) и cuDeviceGetP2PAttribute (..., CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED, ...)?
CUresult CUDAAPI cuDeviceCanAccessPeer(int *canAccessPeer, CUdevice dev, CUdevice peerDev);
Описанная как
возврат в
*canAccessPeer
значении1
, если контексты наdev
способны прямой доступ к памяти из контекстов наpeerDev
и0
иным образом. Если возможен прямой доступpeerDev
отdev
, то доступ может быть включен в двух конкретных контекстах, вызвав::cuCtxEnablePeerAccess()
.
И второй один
CUresult CUDAAPI cuDeviceGetP2PAttribute(int* value, CUdevice_P2PAttribute attrib, CUdevice srcDevice, CUdevice dstDevice);
Описано как
Возвращения в
*value the
значение запрашиваемого атрибутаattrib
канала связи междуsrcDevice
иdstDevice
. Поддерживаемые атрибуты:
::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK
: Относительное значение, указывающее на эффективность связи между двумя устройствами.
::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED
P2:
1` если P2P Access разрешен.
::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1
если поддерживаются Атомные операции по ссылке.
Название CU_DEVICE_ATTRUBUTE_ACCESS_SUPPORTED
бы предположить, что призыв к cuDeviceCanAccessPeer
так же, как с помощью cuDeviceGetP2PAttribute
с attrib
набором для ::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P
, но описание «1
если P2P Доступ включить» меня смущает.
Действительно ли они одинаковы или второй должен проверить, активирована ли ссылка?
Кажется, что так, но с другой стороны, имя атрибута 'CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED' меня немного смущает. – pansk