From 3a15e3b0d08fd9aa258a80474b8fd0b13b7302d3 Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Thu, 8 Oct 2026 10:27:53 +0000 Subject: [PATCH 1/2] ca3-pc1-amd-grid.ps1 finds the rebuilt telemetry exe by itself: the newest igneum-gpu-telemetry*.exe under the data root's jobs folders (a fetch job's landing place) whose --tune prints a tune line, before the installed exe (the kit's old tool has no --tune, so the first grid stopped at no_tune_line); IGNEUM_GRID_TOOL still overrides Co-Authored-By: Claude Fable 5.1 --- relay/playbooks/ca3-pc1-amd-grid.ps1 | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/relay/playbooks/ca3-pc1-amd-grid.ps1 b/relay/playbooks/ca3-pc1-amd-grid.ps1 index 86ce034d1..cc40b35b6 100644 --- a/relay/playbooks/ca3-pc1-amd-grid.ps1 +++ b/relay/playbooks/ca3-pc1-amd-grid.ps1 @@ -11,7 +11,22 @@ $ErrorActionPreference = 'Continue' function Say([string] $s) { Write-Output ('[' + (Get-Date -Format 'HH:mm:ss') + '] ' + $s) } $install = Join-Path $env:LOCALAPPDATA 'Programs\Igneum Miner' $tool = $env:IGNEUM_GRID_TOOL -if (-not $tool) { $cand = Join-Path (Get-Location) 'igneum-gpu-telemetry.exe'; if (Test-Path -LiteralPath $cand) { $tool = $cand } else { $tool = Join-Path $install 'igneum-gpu-telemetry.exe' } } +if (-not $tool) { + # the rebuilt tool (the AMD knob's, sha 1d8e055d...) lands on the PC by a fetch job under \app\jobs\\; the newest + # copy whose --tune prints a tune line wins over the installed exe (the 0.3.24 kit's has no --tune) + $cands = @() + $cands += Join-Path (Get-Location) 'igneum-gpu-telemetry.exe' + $jobsDir = Join-Path $env:LOCALAPPDATA 'igneum\app\jobs' + if (Test-Path -LiteralPath $jobsDir) { $cands += @(Get-ChildItem -LiteralPath $jobsDir -Recurse -Filter 'igneum-gpu-telemetry*.exe' -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | ForEach-Object { $_.FullName }) } + $cands += Join-Path $install 'igneum-gpu-telemetry.exe' + foreach ($c in $cands) { + if (-not (Test-Path -LiteralPath $c)) { continue } + $probe = @(& $c --tune 2>&1 | ForEach-Object { "$_" }) | Where-Object { $_ -match '^tune \d+ ' } + if ($probe) { $tool = $c; break } + Say ("no tune line from " + $c) + } + if (-not $tool) { $tool = Join-Path $install 'igneum-gpu-telemetry.exe' } +} if (-not (Test-Path -LiteralPath $tool)) { Write-Output ('RESULT GRID error=no_tool ' + $tool); exit 1 } Say ("tool: " + $tool + " sha256 " + (Get-FileHash -LiteralPath $tool -Algorithm SHA256).Hash.ToLower()) $hold = if ($env:IGNEUM_GRID_HOLD_S) { [int]$env:IGNEUM_GRID_HOLD_S } else { 75 } From aa2b8652959498fb94e4c5803d1fa6cd6f621605 Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Thu, 8 Oct 2026 11:23:54 +0000 Subject: [PATCH 2/2] 0.3.25 AMD knob: the RX 9070 XT's measured efficient point, 149 W, in the tuner's ceiling table (the first grid on the knob, PC 1, 8 October 2026, 12:10 BST, run-ca3-pc1-amd-grid-9070-20261008-b, 24 of 24 rows ok, the app's own hash_now, the card reset at the end). The rate is flat at 18.93 to 18.98 MH/s over the whole ladder: the knob moves watts only, so the knee never comes and the stop rule reaches the floor; the efficient point is both floors (clock offset -500, about 2,920 MHz where ADLX clamps; power limit -30): 149.3 W at 18.96 MH/s, 0.127 MH/W, 24 percent under stock's 195.8 W at the same rate. The clock offset alone takes 196 to 159 W; the power limit alone does nothing until -30 (184 W). Test: efficient_watts reads 149 Co-Authored-By: Claude Fable 5.1 --- app/igneum-app/src/ember.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/igneum-app/src/ember.rs b/app/igneum-app/src/ember.rs index 33538c649..e9770a590 100644 --- a/app/igneum-app/src/ember.rs +++ b/app/igneum-app/src/ember.rs @@ -37,7 +37,12 @@ pub const CLOCK_FINE_STEP_MHZ: u32 = 100; /// 5090 for 575 W with proving on the same card): the tuner never requests more than the card's measured efficient point /// unless Power control is on and the user raised the cap above the default; a card not in this table is held at the /// cap it runs at. A point below the vendor's minimum limit clamps up to that minimum (the 5090 floors at 400 W). -pub const EFFICIENT_W: &[(&str, f64)] = &[("RTX 5090", 308.0), ("RX 9070 XT", 199.0)]; +/// RX 9070 XT: 149 W from the first measured grid on the AMD knob (PC 1, 8 October 2026, 12:10 BST, run +/// run-ca3-pc1-amd-grid-9070-20261008-b, 24 of 24 rows ok): the rate is flat at 18.93 to 18.98 MH/s over the whole ladder, +/// the knob moves watts only, and the efficient point is both floors (clock offset -500, about 2,920 MHz, the ADLX clamp; +/// power limit -30): 149.3 W at 18.96 MH/s, 0.127 MH/W, 24 percent under stock's 195.8 W. The 199 W before it was the +/// 7 October read at stock. +pub const EFFICIENT_W: &[(&str, f64)] = &[("RTX 5090", 308.0), ("RX 9070 XT", 149.0)]; /// The app's cap when the user chose none (engine.rs requested_watts); a cap above it is one the user raised. pub const DEFAULT_CAP_PCT: u32 = 80; @@ -1416,7 +1421,7 @@ mod tests { assert_eq!(l.ceiling(), 403.0, "70% of 575 W, the card's own cap"); let zero = with_ceiling("NVIDIA GeForce RTX 4070", Point::default(), false); assert_eq!(zero.ceiling(), 460.0, "no chosen cap: the app's default 80%"); - assert_eq!(efficient_watts("AMD Radeon RX 9070 XT"), Some(199.0)); + assert_eq!(efficient_watts("AMD Radeon RX 9070 XT"), Some(149.0), "the 8 October grid: both floors, 149.3 W at 18.96 MH/s"); assert_eq!(efficient_watts("gfx1036"), None); }