private static IEnumerable <CardParam> FindCards(ControlMemory ctlm) { const int divider = 1000; var cardCount = ctlm.GpuEntries.Length; var cards = new CardParam[cardCount]; for (uint i = 0; i < cardCount; i++) { var v1 = ctlm.GpuEntries[i]; var flags = v1.Flags; var voltageBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_VOLTAGE_BOOST); var voltage = new CardMinMaxCurrent { Current = voltageBoost ? v1.CoreVoltageBoostCur : (int)v1.CoreVoltageCur, Max = voltageBoost ? v1.CoreVoltageBoostMax : (int)v1.CoreVoltageMax, Min = voltageBoost ? v1.CoreVoltageBoostMin : (int)v1.CoreVoltageMin }; var templimit = new CardMinMaxCurrent { Current = v1.ThermalLimitCur, Max = v1.ThermalLimitMax, Min = v1.ThermalLimitMin }; var voltagelimit = new CardMinMaxCurrent { Current = v1.PowerLimitCur, Max = v1.PowerLimitMax, Min = v1.PowerLimitMin }; var coreclockBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_CLOCK_BOOST); var coreclock = new CardMinMaxCurrent { Current = coreclockBoost ? v1.CoreClockBoostCur / divider : (int)v1.CoreClockCur / divider, Max = coreclockBoost ? v1.CoreClockBoostMax / divider : (int)v1.CoreClockMax / divider, Min = coreclockBoost ? v1.CoreClockBoostMin / divider : (int)v1.CoreClockMin / divider }; var memoryclockBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.MEMORY_CLOCK_BOOST); var memoryclock = new CardMinMaxCurrent { Current = memoryclockBoost ? v1.MemoryClockBoostCur / divider : (int)v1.MemoryClockCur / divider, Max = memoryclockBoost ? v1.MemoryClockBoostMax / divider : (int)v1.MemoryClockMax / divider, Min = memoryclockBoost ? v1.MemoryClockBoostMin / divider : (int)v1.MemoryClockMin / divider }; var fancontrol = new CardMinMaxCurrent { Current = v1.FanSpeedCur, Max = v1.FanSpeedMax, Min = v1.FanSpeedMin }; var ismaster = v1.IsMaster; cards[i] = new CardParam(v1.Index, ismaster, voltage, templimit, voltagelimit, coreclock, memoryclock, fancontrol); } return(cards); }
public CardParam(int id, bool isMaster, CardMinMaxCurrent voltage, CardMinMaxCurrent tempLimit, CardMinMaxCurrent powerLimit, CardMinMaxCurrent coreClock, CardMinMaxCurrent memoryClock, CardMinMaxCurrent fanSpeed) { Voltage = voltage; IsMaster = isMaster; TempLimit = tempLimit; PowerLimit = powerLimit; CoreClock = coreClock; MemoryClock = memoryClock; FanSpeed = fanSpeed; Id = id; }
protected bool Equals(CardMinMaxCurrent other) { return(Min.Equals(other.Min) && Max.Equals(other.Max) && Current.Equals(other.Current)); }