Ember: a power step on a card with no limit readback (AMD through ADLX reports an offset, never watts) is applied on the acknowledgement; run 6 aborted the 9070 XT's ladder at its first step on "card reports 0 W"; test

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-06 16:43:26 +00:00
parent 12e045b64e
commit 57de3112b8

View file

@ -774,8 +774,13 @@ impl Run {
let power_changed = (step.watts - before_w).abs() >= 1.5; let power_changed = (step.watts - before_w).abs() >= 1.5;
if step.point.clock_mhz > 0 || step.point.mem_mhz > 0 || !power_changed { if step.point.clock_mhz > 0 || step.point.mem_mhz > 0 || !power_changed {
rb.acked && power_ok rb.acked && power_ok
} else if rb.limit_w <= 0.0 {
// a card with no limit readback at all (AMD through ADLX reports an offset, never watts; run 6 on
// 6 October 2026 aborted the 9070 XT's ladder at its first step on "card reports 0 W"): the
// acknowledgement is the proof
rb.acked
} else { } else {
rb.limit_w > 0.0 && power_ok power_ok
} }
} }
@ -976,6 +981,17 @@ mod tests {
assert!(Plan::full(&Limits::default(), Point::default(), 1.0).is_empty()); assert!(Plan::full(&Limits::default(), Point::default(), 1.0).is_empty());
} }
#[test]
fn a_power_step_on_a_card_without_a_limit_readback_is_applied_on_the_acknowledgement() {
// AMD through ADLX: the limit reads back as an offset, never watts (run 6, 6 October 2026)
let step = Step { point: Point { clock_mhz: 0, power_pct: 90, mem_mhz: 0 }, watts: 90.0, kind: Kind::Power };
assert!(Run::applied(&step, Readback { limit_w: 0.0, acked: true }, 100.0));
assert!(!Run::applied(&step, Readback { limit_w: 0.0, acked: false }, 100.0));
// NVIDIA: the watts must read back
assert!(!Run::applied(&step, Readback { limit_w: 100.0, acked: true }, 100.0));
assert!(Run::applied(&step, Readback { limit_w: 90.0, acked: false }, 100.0));
}
#[test] #[test]
fn limits_never_exceed_the_vendor_or_undercut_the_floor() { fn limits_never_exceed_the_vendor_or_undercut_the_floor() {
let l = l5090(); let l = l5090();