public void GetPowerFanTemp(int gpuIndex, out uint power, out uint fanSpeed, out int temp) { power = 0; fanSpeed = 0; temp = 0; if (!TryGetAtiGpu(gpuIndex, out ATIGPU gpu)) { return; } try { if (gpu.OverdriveVersion < 8) { temp = GetTemperature(gpuIndex); power = GetPowerUsage(gpuIndex); fanSpeed = GetFanSpeed(gpuIndex); } else { ADLPMLogDataOutput logDataOutput = ADLPMLogDataOutput.Create(); var r = AdlNativeMethods.ADL2_New_QueryPMLogData_Get(_context, gpu.AdapterIndex, ref logDataOutput); if (r < AdlStatus.ADL_OK) { NTMinerConsole.DevError(() => $"{nameof(AdlNativeMethods.ADL2_New_QueryPMLogData_Get)} {r.ToString()}"); } int i = (int)ADLSensorType.PMLOG_ASIC_POWER; if (i < logDataOutput.Sensors.Length && logDataOutput.Sensors[i].Supported != 0) { power = (uint)logDataOutput.Sensors[i].Value; } i = (int)ADLSensorType.PMLOG_FAN_PERCENTAGE; if (i < logDataOutput.Sensors.Length && logDataOutput.Sensors[i].Supported != 0) { fanSpeed = (uint)logDataOutput.Sensors[i].Value; } i = (int)ADLSensorType.PMLOG_TEMPERATURE_EDGE; if (i < logDataOutput.Sensors.Length && logDataOutput.Sensors[i].Supported != 0) { temp = logDataOutput.Sensors[i].Value; } } } catch { } }