Correctness fix (affects v0.12.2 – v0.12.7)
The warp-once seed optimisation was invalid in the chase kernel. pom_mine_v4_chase assigns one nonce per thread, but the seed was computed in lane 0 and broadcast across the warp — so 31 of every 32 lanes built their offset chain from another nonce's seed.
It did not merely waste work: it produced PoW values no verifier can reproduce, so hits that cleared the target were submitted and rejected. Cards affected:
- CC 8.0 / 9.0 (A100, CMP 170HX, H100) — default to chase+tc
- RTX 3070 and similar — autotune measures chase+tc as faster and selects it
Chaseless (most GDDR cards) and classic (Pascal) were never affected.
Performance — fleet A/B vs v0.12.7, identical power
| GPU | v0.12.7 | v0.13.0 | Δ |
|---|---|---|---|
| GTX 1080 Ti (Pascal) | 0.3574 | 0.3872 | +8.35% |
| 2× 3070 + 2× 5080 | 9.0363 | 9.3006 | +2.92% |
| RTX 5070 Ti | 2.9333 | 3.0078 | +2.54% |
| 2× RTX 5090 | 10.948 | 11.204 | +2.34% |
Also in this release
- stratum-v3 —
block_bitscapability; the assigned pool share target stays authoritative - Autotune cache is version-stamped and self-invalidating. A cache written by an older miner is discarded automatically instead of silently pinning the previous generation's kernel choice. New
--delete-autotuneforces a re-measure within one version - Tier-flag conflicts are now enforced —
--very-light --very-hightogether was silently accepted in release builds - VRAM batch cap only charges for buffers the solver actually allocates (chaseless and classic allocate no offsets array)
- Identical cards now pick identical starting batches — a VRAM sampling race could hand one of two identical GPUs half the batch
Upgrading
Delete ~/.keryx/v4tune.json if you are on ≤ v0.12.x — from this release it happens automatically.