Commit 17591a0
perf(math): record rejected fused-pow with inline exp2 minimax
Attacked the named fused-pow lever via the previously-UNTRIED approach: a fully
fused single routine with an INLINE exp2 minimax (degree-12) + log2 hi/lo
double-double, eliminating both libm::exp2 and libm::log2 calls. Prior rejections
(bd-e4jb7k) had kept libm::exp2 as an external call; the open hypothesis was that
inlining it would beat glibc.
Result: 4-ULP-vs-glibc accuracy ACHIEVED (the 1M-point medium-pow sweep gate
stayed green — new info), but 2.3-3.0x SLOWER than glibc for generic medium
exponents (pow(x,2.1)=3.01x, pow(x,-2.3)=2.33x, pow(x,0.7)=2.38x). The inline
degree-12 exp2 poly + the 64-entry log2 table + dd arithmetic is HEAVIER than
glibc's hand-tuned fused asm, not lighter — eliminating the calls does not help.
4th rejection; the fused-pow lever is confirmed dead in safe Rust absent a
verbatim transcription of glibc/ARM-optimized-routines pow.c tables (not in-tree,
home-grown coeffs already insufficient, EV low at 1.9x on a cold profile).
Reverted cleanly; pow stays on the libm::exp2(exponent*libm::log2(base)) path.
Full analysis: tests/artifacts/perf/bd-fused-pow-arm-port-inline-exp2-rejected.md
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent c5209aa commit 17591a0
1 file changed
Lines changed: 37 additions & 0 deletions
Lines changed: 37 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
0 commit comments