Add complete Eigen 5 benchmark coverage - #125
Conversation
Compile-time performance diffCompiler: Repetitions: 5 per configuration. psychicstd compile time, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 3 within noise). 🟡 3 benchmark(s) within noise
Reproduce this on your machine: |
rdfind build-time diff (configure / compile / run tests)Compiler: Repetitions: 5 per configuration. rdfind build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 3 within noise). 🟡 3 benchmark(s) within noise
Reproduce this on your machine: |
eigen build-time diff (compile / run tests)Compiler: Repetitions: 2 per configuration. eigen build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 2 within noise). 🟡 2 benchmark(s) within noise
Reproduce this on your machine: |
flatbuffers build-time diff (configure / compile / run tests)Compiler: Repetitions: 1 per configuration. flatbuffers build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 3 within noise). 🟡 3 benchmark(s) within noise
Reproduce this on your machine: |
fmt build-time diff (compile / run tests)Compiler: Repetitions: 2 per configuration. fmt build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 2 within noise). 🟡 2 benchmark(s) within noise
Reproduce this on your machine: |
simdutf build-time diff (compile / run tests)Compiler: Repetitions: 1 per configuration. simdutf build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 2 within noise). 🟡 2 benchmark(s) within noise
Reproduce this on your machine: |
catch2 build-time diff (compile / run tests)Compiler: Repetitions: 3 per configuration. catch2 build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 2 within noise). 🟡 2 benchmark(s) within noise
Reproduce this on your machine: |
Compliance diff🔴 1 header(s) regressed, 🟢 1 header(s) improved.
70 header(s) unchanged
Reproduce this on your machine: |
Sanitizer diff (ASan/UBSan)🟢 1 header(s) improved.
71 header(s) unchanged
Reproduce this on your machine: |
cppcheck build-time diff (compile)Compiler: Repetitions: 2 per configuration. cppcheck build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 1 within noise). 🟡 1 benchmark(s) within noise
Reproduce this on your machine: |
51b5f88 to
58042c7
Compare
Use the latest Eigen release while preserving the existing focused test set. Verify the official archive checksum and keep the benchmark recipe otherwise unchanged.
Provide correctly typed unary and binary overloads for floating-point and integral arguments while retaining the C names from <math.h>. Match GCC's builtin-backed constant evaluation without requiring unsupported constexpr math from Clang.
Add the standard operations needed by Eigen and use compiler complex builtins for overflow-safe magnitude, square root, and exponential edge cases. Keep stream insertion lightweight while consuming Eigen field widths correctly.
Support shrinking and both forms of list growth while preserving existing nodes and iterators. Eigen exercises these operations through its STL tests.
Build Eigen's complete official test target as a separate real-world project. Cap compilation at two jobs because the heaviest translation units consume several GiB. Allow tests to use the requested parallelism.
Summary
Performance
The refreshed nine-repetition GCC 14 benchmark reports:
The always-inline cmath wrappers reduce Debug call overhead and emitted code without a measurable regression in the broader compile-time suite. A large compiler ifdef alternative was benchmarked and rejected because it provided no project-level gain while substantially duplicating the header.
Validation