You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
perf(elreal,ci): cut sanitizer/Debug CI time ~20x (depth, -O1, ctest -j)
The ASan/UBSan jobs grew past an hour because the elreal transcendental tests
(el_math_trigonometry/hyperbolic/exponent/constants) run a heavy O(depth^4)
workload at -O0 with no test parallelism. Four independent, multiplicative levers,
none of which lose any asserted coverage:
1) Test generation depth (the dominant, quartic lever). The math functions default
to depth 4 (~212 bits) for high-precision use, but the tests assert only loose
host tolerances (1e-10/1e-5) plus structural identities and the 0-overlap
invariant -- all satisfied with wide margin at far smaller depth (d ~ d*53 bits
on a double host). Thread an explicit small test depth (LIBRARY DEFAULTS
UNCHANGED): single-series fns (atan/sin/cos/tan/exp/log/sinh/cosh/tanh) at
depth 2 (~106 bits); the deepest compositions (asin/acos, pow=exp(y*log(x))) at
depth 3; constants generated at depth 6 instead of the 16/32 defaults, with one
deliberately-deep pi check kept at 8. Full elreal Debug+assertions ctest drops
178s -> 8.2s locally (constants alone 175s -> 8.3s), 32/32 pass on gcc + clang.
2) Sanitizer builds at -O1 (CMakeLists.txt). AddressSanitizer's recommended
setting: 2-4x faster than -O0 on this template-heavy header-only library with
equal-or-better ASan detection (Debug -g retained for stacks). UBSan loses a few
UB sites the optimizer elides before instrumentation -- an accepted trade.
3) ctest -j 2 in sanitizers.yml (was serial). Matches the 2-vCPU ubuntu-latest
runner; safe under ASan's ~2-3x shadow-memory multiplier in 7 GB (the sibling
cmake.yml already runs ctest -j 4 on the same runner).
4) --timeout 180 in sanitizers.yml: caps a hung instrumented test at 180s instead
of CTest's 1500s default (tail-latency insurance, no effect on green runs).
Also tightens the priestRenorm iterate-to-fixpoint loop bound from 6 to 3
(threeAdd.hpp): a cancellation residual converges in two extra passes, so 3 is
ample headroom and removes the recently-added worst-case rescue cost.
Validated: full elreal suite (32 tests) passes on gcc and clang in Release and
Debug (assertions on); ASCII clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0 commit comments