Commit Graph

4 Commits

Author SHA1 Message Date
bherbruck 100535f457 Merge pull request #333 from tdamsma/perf/basis-eval-stack
perf: point evaluation without a heap basis array (outputs bit-identical)
2026-10-21 14:38:45 +00:00
Thijs Damsma eb7b5391b2 difftest: document n= in TIME line; analyze.py: close profile file
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
2026-10-21 03:38:03 +02:00
Thijs Damsma 2c78dac714 perf: point evaluation without a heap basis array (outputs bit-identical)
- KnotVector::basis_eval_into: N_BasisEval into a caller buffer (same
  values, same errors); basis_eval wraps it
- srf_nurb::Surface::eval (N_SrfEvalPt) and crv_nurb::Curve::eval
  (N_CrvEval) keep N on the stack, as upstream; one malloc/free less per
  basis per point evaluation
- test: basis_eval_into equals basis_eval bit for bit, errors included
- scripts/perf/samply_top.py: self/inclusive/callee/allocator tables and a
  Rust/C++ split from samply profiles (no GUI)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
2026-10-20 22:27:53 +02:00
Thijs Damsma af94851172 difftest: per-unit TIME line, opt-in Rust output digest
- UnitResult.timing (not in the report): wall time of case building,
  run_cpp, run_rust, compare and the slowest Rust case; main prints
  `TIME <unit> ...` to stderr per unit
- DIFFTEST_RUST_DIGEST=<dir>: writes <dir>/<unit>.digest with one
  `<case>\t<fnv1a64 of format!("{rust_output:?}")>` line per case, so two
  builds can be proved bit-identical; off by default
- README: --green takes ~35 min on 16 threads (not ~2 min), TIME line,
  digest, and scripts/perf (ptrace sampler + analyzer, no sudo needed)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
2026-10-20 16:45:42 +02:00