public void GetClockRangeByIndex( int gpuIndex, out int coreClockDeltaMin, out int coreClockDeltaMax, out int memoryClockDeltaMin, out int memoryClockDeltaMax, out int powerMin, out int powerMax, out int powerDefault, out int tempLimitMin, out int tempLimitMax, out int tempLimitDefault, out int fanSpeedMin, out int fanSpeedMax, out int fanSpeedDefault) { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNCapabilitiesX2 lpODCapabilities = new ADLODNCapabilitiesX2(); var result = ADL.ADL2_OverdriveN_CapabilitiesX2_Get(context, adapterIndex, ref lpODCapabilities); coreClockDeltaMin = lpODCapabilities.sEngineClockRange.iMin * 10; coreClockDeltaMax = lpODCapabilities.sEngineClockRange.iMax * 10; memoryClockDeltaMin = lpODCapabilities.sMemoryClockRange.iMin * 10; memoryClockDeltaMax = lpODCapabilities.sMemoryClockRange.iMax * 10; powerMin = lpODCapabilities.power.iMin + 100; powerMax = lpODCapabilities.power.iMax + 100; powerDefault = lpODCapabilities.power.iDefault + 100; tempLimitMin = lpODCapabilities.powerTuneTemperature.iMin; tempLimitMax = lpODCapabilities.powerTuneTemperature.iMax; tempLimitDefault = lpODCapabilities.powerTuneTemperature.iDefault; fanSpeedMin = lpODCapabilities.fanSpeed.iMin * 100 / lpODCapabilities.fanSpeed.iMax; fanSpeedMax = 100; fanSpeedDefault = lpODCapabilities.fanSpeed.iDefault; #if DEBUG Write.DevWarn($"ADL2_OverdriveN_CapabilitiesX2_Get result {result} coreClockDeltaMin={coreClockDeltaMin},coreClockDeltaMax={coreClockDeltaMax},memoryClockDeltaMin={memoryClockDeltaMin},memoryClockDeltaMax={memoryClockDeltaMax},powerMin={powerMin},powerMax={powerMax},powerDefault={powerDefault},tempLimitMin={tempLimitMin},tempLimitMax={tempLimitMax},tempLimitDefault={tempLimitDefault},fanSpeedMin={fanSpeedMin},fanSpeedMax={fanSpeedMax},fanSpeedDefault={fanSpeedDefault}"); #endif }
public void SetSystemClockByIndex(int gpuIndex, int value) { try { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNCapabilitiesX2 lpODCapabilities = new ADLODNCapabilitiesX2(); var result = ADL.ADL2_OverdriveN_CapabilitiesX2_Get(context, adapterIndex, ref lpODCapabilities); if (result != 0) { return; } ADLODNPerformanceLevelsX2 lpODPerformanceLevels = ADLODNPerformanceLevelsX2.Create(); result = ADL.ADL2_OverdriveN_SystemClocksX2_Get(context, adapterIndex, ref lpODPerformanceLevels); lpODPerformanceLevels.iMode = ADL.ODNControlType_Default; result = ADL.ADL2_OverdriveN_SystemClocksX2_Set(context, adapterIndex, ref lpODPerformanceLevels); result = ADL.ADL2_OverdriveN_SystemClocksX2_Get(context, adapterIndex, ref lpODPerformanceLevels); #if DEBUG Write.DevWarn("ADL2_OverdriveN_SystemClocksX2_Get result=" + result); foreach (var item in lpODPerformanceLevels.aLevels) { Write.DevWarn($"iClock={item.iClock},iControl={item.iControl},iEnabled={item.iEnabled},iVddc={item.iVddc}"); } #endif if (result == ADL.ADL_OK) { if (value <= 0) { return; } else { lpODPerformanceLevels.iMode = ADL.ODNControlType_Manual; int index = 0; for (int i = 0; i < lpODPerformanceLevels.aLevels.Length; i++) { if (lpODPerformanceLevels.aLevels[i].iEnabled == 1) { index = i; } } lpODPerformanceLevels.aLevels[index].iClock = value * 100; } result = ADL.ADL2_OverdriveN_SystemClocksX2_Set(context, adapterIndex, ref lpODPerformanceLevels); #if DEBUG if (result != ADL.ADL_OK) { Write.DevWarn($"ADL2_OverdriveN_SystemClocksX2_Set({value * 100}) result " + result); } #endif } } catch { } }
public void SetTempLimitByIndex(int gpuIndex, int value) { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNPowerLimitSetting lpODPowerLimit = new ADLODNPowerLimitSetting(); try { int result = ADL.ADL2_OverdriveN_PowerLimit_Get(context, adapterIndex, ref lpODPowerLimit); if (result == ADL.ADL_OK) { if (value == 0) { ADLODNCapabilitiesX2 lpODCapabilities = new ADLODNCapabilitiesX2(); result = ADL.ADL2_OverdriveN_CapabilitiesX2_Get(context, adapterIndex, ref lpODCapabilities); value = lpODCapabilities.powerTuneTemperature.iDefault; } lpODPowerLimit.iMode = ADL.ODNControlType_Manual; lpODPowerLimit.iMaxOperatingTemperature = value; ADL.ADL2_OverdriveN_PowerLimit_Set(context, adapterIndex, ref lpODPowerLimit); } } catch (Exception e) { Logger.ErrorDebugLine(e); } }