caps-sa 0.7.0 adds opt-in geometric LCP memoization and a substantially faster production path for large segmented generalized suffix arrays.
Highlights
- Opt-in, bounded, partition-local geometric LCP memoization through
LcpMemoizationPolicy::geometric()andGeometricMemoizationConfig. - Fused external-memory sort/distribution, cutting one complete intermediate spill.
- Prefetching of upcoming text positions in the phase-4 merge.
- Structure-of-arrays routing and task-local phase-1 ping-pong sorting.
- A bounded coarse boundary directory for
SegmentedTextinputs with large segment collections. - Cross-platform Rust CI and complete LCP-array validation.
- Correct finite-
max_contextboundary handling in merge comparison.
On the complete ruSTAR-shaped GENCODE Human v50 workload—6.56 billion symbols, 6.18 billion retained suffixes, and 1.40 million segments—the final build completed in 172.953 s at 32 physical cores with 8.75 GiB peak RSS. This was 35.4% faster and used 12.8% less peak RSS than the pre-pass 0.7 baseline, with identical output.
Geometric memoization remains disabled by default because its value is workload-dependent. In its isolated full-workload A/B it reduced wall time by 8.43% and user CPU by 5.26%.
Compatibility
ExtMemOpts, LcpMemoizationPolicy, and GeometricMemoizationConfig are non-exhaustive. Construct options with ExtMemOpts::default() or ExtMemOpts::from_env() and configure them through builder methods. This is a one-time 0.x API adjustment intended to make future option additions non-breaking.
See the complete changelog and crates.io package.