Clocks fixes

This commit is contained in:
Serge
2023-05-09 18:21:07 +02:00
parent c69bf65c84
commit 16feeb05a1
3 changed files with 25 additions and 13 deletions

View File

@@ -3,6 +3,7 @@ using NvAPIWrapper.Native;
using NvAPIWrapper.Native.GPU; using NvAPIWrapper.Native.GPU;
using NvAPIWrapper.Native.GPU.Structures; using NvAPIWrapper.Native.GPU.Structures;
using NvAPIWrapper.Native.Interfaces.GPU; using NvAPIWrapper.Native.Interfaces.GPU;
using System;
using System.Diagnostics; using System.Diagnostics;
using System.Management; using System.Management;
using static NvAPIWrapper.Native.GPU.Structures.PerformanceStates20InfoV1; using static NvAPIWrapper.Native.GPU.Structures.PerformanceStates20InfoV1;
@@ -47,23 +48,29 @@ public class NvidiaGpuControl : IGpuControl
} }
public void GetClocks(out int core, out int memory, out string gpu) public int GetClocks(out int core, out int memory, out string gpu)
{ {
PhysicalGPU internalGpu = _internalGpu!; PhysicalGPU internalGpu = _internalGpu!;
gpu = internalGpu.FullName; gpu = internalGpu.FullName;
Logger.WriteLine(internalGpu.FullName); //Logger.WriteLine(internalGpu.FullName);
Logger.WriteLine(internalGpu.ArchitectInformation.ToString()); //Logger.WriteLine(internalGpu.ArchitectInformation.ToString());
IPerformanceStates20Info states = GPUApi.GetPerformanceStates20(internalGpu.Handle); try
{
IPerformanceStates20Info states = GPUApi.GetPerformanceStates20(internalGpu.Handle);
core = states.Clocks[PerformanceStateId.P0_3DPerformance][0].FrequencyDeltaInkHz.DeltaValue / 1000;
memory = states.Clocks[PerformanceStateId.P0_3DPerformance][1].FrequencyDeltaInkHz.DeltaValue / 1000;
Logger.WriteLine($"GET GPU Clock offsets : {core}, {memory}");
return 0;
//Logger.WriteLine("IPerformanceStates20Info type : " + states.GetType()); } catch (Exception ex)
{
core = states.Clocks[PerformanceStateId.P0_3DPerformance][0].FrequencyDeltaInkHz.DeltaValue / 1000; Logger.WriteLine(ex.Message);
memory = states.Clocks[PerformanceStateId.P0_3DPerformance][1].FrequencyDeltaInkHz.DeltaValue / 1000; core = memory = 0;
return -1;
Logger.WriteLine($"GET GPU Clock offsets : {core}, {memory}"); }
} }

View File

@@ -368,7 +368,7 @@ namespace GHelper
startInfo.Arguments = param; startInfo.Arguments = param;
startInfo.Verb = "runas"; startInfo.Verb = "runas";
Process.Start(startInfo); Process.Start(startInfo);
//Application.Exit(); Application.Exit();
} }
} }
} }

View File

@@ -1061,8 +1061,13 @@ namespace GHelper
using NvidiaGpuControl nvControl = (NvidiaGpuControl)HardwareControl.GpuControl; using NvidiaGpuControl nvControl = (NvidiaGpuControl)HardwareControl.GpuControl;
try try
{ {
int status = nvControl.SetClocks(gpu_core, gpu_memory); int getStatus = nvControl.GetClocks(out int current_core, out int current_memory, out string gpuName);
if (launchAsAdmin && status == -1) Program.RunAsAdmin("gpu"); if (getStatus == -1) return;
if (Math.Abs(gpu_core - current_core) < 5 && Math.Abs(gpu_memory - current_memory) < 5) return;
int setStatus = nvControl.SetClocks(gpu_core, gpu_memory);
if (launchAsAdmin && setStatus == -1) Program.RunAsAdmin("gpu");
} }
catch (Exception ex) catch (Exception ex)
{ {