func GetP2PLink(dev1, dev2 *Device) (link P2PLinkType, err error) { var level C.nvmlGpuTopologyLevel_t r := C.nvmlDeviceGetTopologyCommonAncestor_dl(dev1.handle, dev2.handle, &level) if r == C.NVML_ERROR_FUNCTION_NOT_FOUND { return P2PLinkUnknown, nil } if err = nvmlErr(r); err != nil { return } switch level { case C.NVML_TOPOLOGY_INTERNAL: link = P2PLinkSameBoard case C.NVML_TOPOLOGY_SINGLE: link = P2PLinkSingleSwitch case C.NVML_TOPOLOGY_MULTIPLE: link = P2PLinkMultiSwitch case C.NVML_TOPOLOGY_HOSTBRIDGE: link = P2PLinkHostBridge case C.NVML_TOPOLOGY_CPU: link = P2PLinkSameCPU case C.NVML_TOPOLOGY_SYSTEM: link = P2PLinkCrossCPU default: err = ErrUnsupportedP2PLink } return }
func deviceGetTopologyCommonAncestor(h1, h2 handle) (*uint, error) { var level C.nvmlGpuTopologyLevel_t r := C.nvmlDeviceGetTopologyCommonAncestor_dl(h1.dev, h2.dev, &level) if r == C.NVML_ERROR_FUNCTION_NOT_FOUND || r == C.NVML_ERROR_NOT_SUPPORTED { return nil, nil } return uintPtr(C.uint(level)), errorString(r) }