WP-1325, "would another Rust kernel help?": where a blocked joint fit's Jacobian time goes, N = 60.

machine   Linux x86_64, 4 CPUs (Intel(R) Xeon(R) Processor), 15.7 GiB RAM, no swap
python    3.12.3, numpy 2.5.4 (scipy-openblas)
rietx     1.9.0.dev0 from /home/user/rietx/.claude/worktrees/wp1325-parametric-series/src/rietx ([dev] venv), compiled kernels on
load      0.71 0.32 0.22 (1/5/15 min) at start; other measuring or test processes running: 0
kernels   1 pool threads; RIETX_COMPILED_THREADS=1, OPENBLAS_NUM_THREADS=1, OMP_NUM_THREADS=1
tree      HEAD cf8f789 at start, src/ fingerprint 6e3d84a08da0
library   tests' library(n): 3000 points a pattern, cell = four-term polynomial over (x, y), 10 own columns a pattern, blocked layout

== (1) the fit: converged, Rwp 0.038988
  plain      wall 5.87 s; joint Jacobian 2.88 s over 40 calls (49%), joint residual 0.56 s over 43 calls (10%)
  cProfile   wall 9.56 s, 9.54 s profiled (the profiler inflates python, not the kernels: a python share is read against python, a kernel's against the plain wall)
    rietx_kernels calls: 0.144 s = 1.5% of the profiled fit, 2.4% of the plain wall (an upper estimate)
      <built-in method rietx_kernels.rietx_kernels.accum>      15660 calls 0.055 s
      <built-in method rietx_kernels.rietx_kernels.omega_sym>   3900 calls 0.047 s
      <built-in method rietx_kernels.rietx_kernels.bases_sym>   2220 calls 0.041 s
    joint Jacobian (block_jacobian): 4.82 s over 40 calls = 51% of the fit
    _peak_chain_column: 3.67 s over 9600 calls = 76% of the joint Jacobian, 4.0 a pattern a Jacobian

== (2) at the answer, 60 patterns, last stage's 604 columns; min over 5 repeats, each at a new θ
  Jacobian  serial       145.0-158.3 ms   (2.42 ms a pattern)
  Jacobian  2 threads    206.3-252.4 ms   speedup 0.70x
  Jacobian  4 threads    298.4-388.6 ms   speedup 0.49x
  residual  serial         17.6-19.3 ms   (0.29 ms a pattern)
  residual  2 threads      30.7-37.3 ms   speedup 0.57x
  residual  4 threads      44.2-48.9 ms   speedup 0.40x

== (3) peak-chain columns of one pattern's Jacobian, last stage: 10
  1 x instrument.zero_shift
  1 x instrument.profile.u
  1 x instrument.profile.v
  1 x instrument.profile.w
  1 x instrument.profile.x
  1 x instrument.profile.y
  4 x phases.0.cell.a

== (4) each repeated peak-chain path once per pattern (timing only)
  Jacobian loop 152.2-161.5 ms -> 102.9-109.8 ms = 1.48x (min against min)

load      0.81 0.37 0.24 (1/5/15 min) at end; other measuring or test processes running: 0
tree      HEAD cf8f789 at end; src/ fingerprint 6e3d84a08da0, unchanged during the run
