// AMD tdpLimit private bool SetTdpADL(double percValue) { int min = 0, max = 0, defaultValue = 0; int ok = AMD_ODN.nhm_amd_device_get_tdp_ranges(BusID, ref min, ref max, ref defaultValue); if (ok != 0) { Logger.InfoDelayed(LogTag, $"nhm_amd_device_get_tdp_ranges failed with error code {ok}", _delayedLogging); return(false); } // We limit 100% to the default as max var limit = 0.0d; if (percValue > 1) { limit = RangeCalculator.CalculateValueAMD(percValue - 1, defaultValue, max); } else { limit = RangeCalculator.CalculateValueAMD(percValue, min, defaultValue); } int ok2 = AMD_ODN.nhm_amd_device_set_tdp(BusID, (int)limit); if (ok2 != 0) { Logger.InfoDelayed(LogTag, $"nhm_amd_device_set_tdp failed with error code {ok}", _delayedLogging); return(false); } return(true); }
// AMD tdpLimit private bool SetTdpADL(double percValue) { try { if (ADL.ADL2_OverdriveN_PowerLimit_Set.Delegate == null) { Logger.ErrorDelayed(LogTag, $"SetTdpADL ADL2_OverdriveN_PowerLimit_Set not supported", TimeSpan.FromSeconds(30)); return(false); } if (ADL.ADL2_OverdriveN_CapabilitiesX2_Get.Delegate == null) { Logger.ErrorDelayed(LogTag, $"SetTdpADL ADL2_OverdriveN_CapabilitiesX2_Get not supported", TimeSpan.FromSeconds(30)); return(false); } var ADLODNCapabilitiesX2 = new ADLODNCapabilitiesX2(); var ret = ADL.ADL2_OverdriveN_CapabilitiesX2_Get.Delegate(_adlContext, _adapterIndex, ref ADLODNCapabilitiesX2); if (ret != ADL.ADL_SUCCESS) { Logger.Info(LogTag, $"SetTdpADL ADL2_OverdriveN_CapabilitiesX2_Get returned {ret}"); return(false); } var limit = 0.0d; if (percValue > 1) { limit = RangeCalculator.CalculateValueAMD(percValue - 1, ADLODNCapabilitiesX2.power.iDefault, ADLODNCapabilitiesX2.power.iMax); } else { limit = RangeCalculator.CalculateValueAMD(percValue, ADLODNCapabilitiesX2.power.iMin, ADLODNCapabilitiesX2.power.iDefault); } var setLimit = (int)limit; if (setLimit > ADLODNCapabilitiesX2.power.iMax) { setLimit = ADLODNCapabilitiesX2.power.iMax; } //set value here var lpODPowerLimit = new ADLODNPowerLimitSetting(); lpODPowerLimit.iMode = (int)ADLODNControlType.ODNControlType_Manual; lpODPowerLimit.iTDPLimit = setLimit; var adlRet = ADL.ADL2_OverdriveN_PowerLimit_Set.Delegate(_adlContext, _adapterIndex, ref lpODPowerLimit); if (adlRet != ADL.ADL_SUCCESS) { Logger.Error(LogTag, $"ADL2_OverdriveN_PowerLimit_Set failed with code {adlRet} for GPU BusID={BusID}."); return(false); } return(true); } catch (Exception e) { Logger.Info(LogTag, $"SetTdpADL {e.Message}"); } return(false); }