示例#1
0
        public ulong GetTotalMemory(int gpuIndex)
        {
            int           adapterIndex = GpuIndexToAdapterIndex(_gpuNames, gpuIndex);
            ADLMemoryInfo adlt         = new ADLMemoryInfo();

            if (ADL.ADL_Adapter_MemoryInfo_Get(adapterIndex, ref adlt) == ADL.ADL_OK)
            {
                return(adlt.MemorySize);
            }
            else
            {
                return(0);
            }
        }
示例#2
0
        public uint GetPowerUsageByIndex(int gpuIndex)
        {
            int adapterIndex = GpuIndexToAdapterIndex(gpuIndex);
            int power        = 0;

            try {
                if (ADL.ADL2_Overdrive6_CurrentPower_Get(context, adapterIndex, 0, ref power) == ADL.ADL_OK)
                {
                    return((uint)(power / 256.0));
                }
            }
            catch {
            }
            return(0);
        }
示例#3
0
        public int GetTemperatureByIndex(int gpuIndex)
        {
            int            adapterIndex = GpuIndexToAdapterIndex(_gpuNames, gpuIndex);
            ADLTemperature adlt         = new ADLTemperature();

            if (ADL.ADL_Overdrive5_Temperature_Get(adapterIndex, 0, ref adlt)
                == ADL.ADL_OK)
            {
                return((int)(0.001f * adlt.Temperature));
            }
            else
            {
                return(0);
            }
        }
示例#4
0
 public void SetFunSpeedByIndex(int gpuIndex, int value)
 {
     try {
         int adapterIndex      = GpuIndexToAdapterIndex(gpuIndex);
         ADLFanSpeedValue adlf = new ADLFanSpeedValue {
             SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT
         };
         if (ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0, ref adlf) == ADL.ADL_OK)
         {
             adlf.FanSpeed = value;
             ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0, ref adlf);
         }
     }
     catch {
     }
 }
示例#5
0
        public uint GetFanSpeedByIndex(int gpuIndex)
        {
            int adapterIndex      = GpuIndexToAdapterIndex(_gpuNames, gpuIndex);
            ADLFanSpeedValue adlf = new ADLFanSpeedValue();

            adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
            if (ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0, ref adlf)
                == ADL.ADL_OK)
            {
                return((uint)adlf.FanSpeed);
            }
            else
            {
                return(0);
            }
        }
示例#6
0
        public void SetSystemClockByIndex(int gpuIndex, int value)
        {
            try {
                int adapterIndex = GpuIndexToAdapterIndex(gpuIndex);
                ADLODNPerformanceLevelsX2 lpODPerformanceLevels = ADLODNPerformanceLevelsX2.Create();
                var 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 {
            }
        }
示例#7
0
        public int GetTempLimitByIndex(int gpuIndex)
        {
            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)
                {
                    return(lpODPowerLimit.iMaxOperatingTemperature);
                }
                return(0);
            }
            catch {
                return(0);
            }
        }
示例#8
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)
                {
                    lpODPowerLimit.iMode = ADL.ODNControlType_Manual;
                    lpODPowerLimit.iMaxOperatingTemperature = value;
                    ADL.ADL2_OverdriveN_PowerLimit_Set(context, adapterIndex, ref lpODPowerLimit);
                }
            }
            catch {
            }
        }
示例#9
0
文件: AdlHelper.cs 项目: npk/ntminer
 public int GetMemoryClockByIndex(int gpuIndex)
 {
     try {
         int adapterIndex = GpuIndexToAdapterIndex(gpuIndex);
         ADLODNPerformanceLevelsX2 lpODPerformanceLevels = ADLODNPerformanceLevelsX2.Create();
         var result = ADL.ADL2_OverdriveN_MemoryClocksX2_Get(context, adapterIndex, ref lpODPerformanceLevels);
         foreach (var level in lpODPerformanceLevels.aLevels)
         {
             if (level.iControl == 7)
             {
                 return(level.iClock * 10);
             }
         }
         return(0);
     }
     catch {
         return(0);
     }
 }
示例#10
0
 public int GetSystemClockByIndex(int gpuIndex)
 {
     try {
         int adapterIndex = GpuIndexToAdapterIndex(gpuIndex);
         ADLODNPerformanceLevelsX2 lpODPerformanceLevels = ADLODNPerformanceLevelsX2.Create();
         var result = ADL.ADL2_OverdriveN_SystemClocksX2_Get(context, adapterIndex, ref lpODPerformanceLevels);
         int index  = 0;
         for (int i = 0; i < lpODPerformanceLevels.aLevels.Length; i++)
         {
             if (lpODPerformanceLevels.aLevels[i].iEnabled != 0)
             {
                 index = i;
             }
         }
         return(lpODPerformanceLevels.aLevels[index].iClock * 10);
     }
     catch {
         return(0);
     }
 }
示例#11
0
        public void SetPowerLimitByIndex(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 DEBUG
                Write.DevWarn($"ADL2_OverdriveN_PowerLimit_Get result={result},iMode={lpODPowerLimit.iMode},iTDPLimit={lpODPowerLimit.iTDPLimit},iMaxOperatingTemperature={lpODPowerLimit.iMaxOperatingTemperature}");
#endif
                if (result == ADL.ADL_OK)
                {
                    lpODPowerLimit.iMode     = ADL.ODNControlType_Manual;
                    lpODPowerLimit.iTDPLimit = value - 100;
                    ADL.ADL2_OverdriveN_PowerLimit_Set(context, adapterIndex, ref lpODPowerLimit);
                }
            }
            catch (Exception e) {
                Logger.ErrorDebugLine(e);
            }
        }
示例#12
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);
            }
        }
示例#13
0
文件: AdlHelper.cs 项目: npk/ntminer
        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 tempLimitMin, out int tempLimitMax, out int tempLimitDefault)
        {
            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;
            tempLimitMin        = lpODCapabilities.powerTuneTemperature.iMin;
            tempLimitMax        = lpODCapabilities.powerTuneTemperature.iMax;
            tempLimitDefault    = lpODCapabilities.powerTuneTemperature.iDefault;
#if DEBUG
            Write.DevWarn($"ADL2_OverdriveN_CapabilitiesX2_Get result {result} coreClockDeltaMin={coreClockDeltaMin},coreClockDeltaMax={coreClockDeltaMax},memoryClockDeltaMin={memoryClockDeltaMin},memoryClockDeltaMax={memoryClockDeltaMax}");
#endif
        }
示例#14
0
        public bool Init()
        {
            try {
                if (Environment.Is64BitOperatingSystem)
                {
                    Windows.NativeMethods.SetDllDirectory(SpecialPath.ThisSystem32Dir);
                }
                else
                {
                    Windows.NativeMethods.SetDllDirectory(SpecialPath.ThisSysWOW64Dir);
                }
                int status = ADL.ADL_Main_Control_Create(1);
#if DEBUG
                Write.DevDebug("AMD Display Library Status: " + (status == ADL.ADL_OK ? "OK" : status.ToString()));
#endif
                if (status == ADL.ADL_OK)
                {
                    int numberOfAdapters = 0;
                    ADL.ADL_Adapter_NumberOfAdapters_Get(ref numberOfAdapters);
                    if (numberOfAdapters > 0)
                    {
                        ADLAdapterInfo[] adapterInfo = new ADLAdapterInfo[numberOfAdapters];
                        if (ADL.ADL_Adapter_AdapterInfo_Get(adapterInfo) == ADL.ADL_OK)
                        {
                            for (int i = 0; i < numberOfAdapters; i++)
                            {
#if DEBUG
                                Write.DevDebug(adapterInfo[i].ToString());
#endif
                                if (!string.IsNullOrEmpty(adapterInfo[i].UDID) && adapterInfo[i].VendorID == ADL.ATI_VENDOR_ID)
                                {
                                    bool found = false;
                                    foreach (ATIGPU gpu in _gpuNames)
                                    {
                                        if (gpu.BusNumber == adapterInfo[i].BusNumber && gpu.DeviceNumber == adapterInfo[i].DeviceNumber)
                                        {
                                            found = true;
                                            break;
                                        }
                                    }
                                    if (!found)
                                    {
                                        _gpuNames.Add(new ATIGPU {
                                            AdapterName  = adapterInfo[i].AdapterName.Trim(),
                                            AdapterIndex = adapterInfo[i].AdapterIndex,
                                            BusNumber    = adapterInfo[i].BusNumber,
                                            DeviceNumber = adapterInfo[i].DeviceNumber
                                        });
                                    }
                                }
                            }
                        }
                    }
                    ADL.ADL2_Main_Control_Create(ADL.Main_Memory_Alloc, 1, ref context);
                }
                _gpuNames = _gpuNames.OrderBy(a => a.BusNumber).ToList();
#if DEBUG
                Write.DevDebug(string.Join(",", _gpuNames.Select(a => a.AdapterIndex)));
#endif
            }
            catch {
                return(false);
            }

            return(true);
        }