public override void Update() { NvGPUThermalSettings settings = GetThermalSettings(); foreach (Sensor sensor in temperatures) { sensor.Value = settings.Sensor[sensor.Index].CurrentTemp; } if (fan != null) { int value = 0; NVAPI.NvAPI_GPU_GetTachReading(handle, out value); fan.Value = value; } uint[] values = GetClocks(); if (values != null) { clocks[1].Value = 0.001f * values[8]; if (values[30] != 0) { clocks[0].Value = 0.0005f * values[30]; clocks[2].Value = 0.001f * values[30]; } else { clocks[0].Value = 0.001f * values[0]; clocks[2].Value = 0.001f * values[14]; } } NvPStates states = new NvPStates(); states.Version = NVAPI.GPU_PSTATES_VER; states.PStates = new NvPState[NVAPI.MAX_PSTATES_PER_GPU]; if (NVAPI.NvAPI_GPU_GetPStates != null && NVAPI.NvAPI_GPU_GetPStates(handle, ref states) == NvStatus.OK) { for (int i = 0; i < 3; i++) { if (states.PStates[i].Present) { loads[i].Value = states.PStates[i].Percentage; ActivateSensor(loads[i]); } } } else { NvUsages usages = new NvUsages(); usages.Version = NVAPI.GPU_USAGES_VER; usages.Usage = new uint[NVAPI.MAX_USAGES_PER_GPU]; if (NVAPI.NvAPI_GPU_GetUsages != null && NVAPI.NvAPI_GPU_GetUsages(handle, ref usages) == NvStatus.OK) { loads[0].Value = usages.Usage[2]; loads[1].Value = usages.Usage[6]; loads[2].Value = usages.Usage[10]; for (int i = 0; i < 3; i++) { ActivateSensor(loads[i]); } } } NvGPUCoolerSettings coolerSettings = GetCoolerSettings(); if (coolerSettings.Count > 0) { control.Value = coolerSettings.Cooler[0].CurrentLevel; ActivateSensor(control); } NvMemoryInfo memoryInfo = new NvMemoryInfo(); memoryInfo.Version = NVAPI.GPU_MEMORY_INFO_VER; memoryInfo.Values = new uint[NVAPI.MAX_MEMORY_VALUES_PER_GPU]; if (NVAPI.NvAPI_GPU_GetMemoryInfo != null && displayHandle.HasValue && NVAPI.NvAPI_GPU_GetMemoryInfo(displayHandle.Value, ref memoryInfo) == NvStatus.OK) { uint totalMemory = memoryInfo.Values[0]; uint freeMemory = memoryInfo.Values[4]; float usedMemory = Math.Max(totalMemory - freeMemory, 0); memoryFree.Value = (float)freeMemory / 1024; memoryAvail.Value = (float)totalMemory / 1024; memoryUsed.Value = usedMemory / 1024; memoryLoad.Value = 100f * usedMemory / totalMemory; ActivateSensor(memoryAvail); ActivateSensor(memoryUsed); ActivateSensor(memoryFree); ActivateSensor(memoryLoad); } _NV_GPU_PERF_PSTATE_ID current_pstate = _NV_GPU_PERF_PSTATE_ID.NVAPI_GPU_PERF_PSTATE_ALL; if (NVAPI.NvAPI_GPU_GetCurrentPstate != null && NVAPI.NvAPI_GPU_GetCurrentPstate(handle, ref current_pstate) == NvStatus.OK) { currentPState.Value = (int)current_pstate; ActivateSensor(currentPState); } if (1 == 1) { coreVoltage.Value = 1.5f; ActivateSensor(coreVoltage); } }