internal DeviceMonitorNVIDIA(NvapiNvmlInfo info) { UUID = info.UUID; BusID = info.BusID; _nvHandle = info.nvHandle; _nvmlDevice = info.nvmlHandle; try { var powerInfo = new NvGPUPowerInfo { Version = NVAPI.GPU_POWER_INFO_VER, Entries = new NvGPUPowerInfoEntry[4] }; var ret = NVAPI.NvAPI_DLL_ClientPowerPoliciesGetInfo(_nvHandle, ref powerInfo); if (ret != NvStatus.OK) { throw new Exception(ret.ToString()); } Debug.Assert(powerInfo.Entries.Length == 4); if (powerInfo.Entries[0].MinPower == 0 || powerInfo.Entries[0].MaxPower == 0) { throw new Exception("Power control not available!"); } _minPowerLimit = powerInfo.Entries[0].MinPower; _maxPowerLimit = powerInfo.Entries[0].MaxPower; _defaultPowerLimit = powerInfo.Entries[0].DefPower; PowerLimitsEnabled = true; // set to high by default var defaultLevel = PowerLevel.High; if (!DeviceMonitorManager.DisableDevicePowerModeSettings) { var success = SetPowerTarget(defaultLevel); if (!success) { Logger.Info("NVML", $"Cannot set power target ({defaultLevel.ToString()}) for device with BusID={BusID}"); } } else { PowerLevel = PowerLevel.Disabled; } } catch (Exception e) { Logger.Error("NVML", $"Getting power info failed with message \"{e.Message}\", disabling power setting"); PowerLimitsEnabled = false; } }
public void ResetHandles(NvapiNvmlInfo info) { _nvHandle = info.nvHandle; _nvmlDevice = info.nvmlHandle; try { var powerInfo = new NvGPUPowerInfo { Version = NVAPI.GPU_POWER_INFO_VER, Entries = new NvGPUPowerInfoEntry[4] }; var ret = NVAPI.NvAPI_DLL_ClientPowerPoliciesGetInfo(_nvHandle, ref powerInfo); if (ret != NvStatus.OK) { throw new Exception(ret.ToString()); } Debug.Assert(powerInfo.Entries.Length == 4); if (powerInfo.Entries[0].MinPower == 0 || powerInfo.Entries[0].MaxPower == 0) { throw new Exception("Power control not available!"); } _minPowerLimit = powerInfo.Entries[0].MinPower; _maxPowerLimit = powerInfo.Entries[0].MaxPower; _defaultPowerLimit = powerInfo.Entries[0].DefPower; } catch (Exception e) { Logger.Error("NVML", $"Getting power info failed with message \"{e.Message}\", disabling power setting"); PowerLimitsEnabled = false; } }