Beispiel #1
0
        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
        }
Beispiel #2
0
        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 {
            }
        }
Beispiel #3
0
        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);
            }
        }