Skip to content

Fused CPU histograms on public KITTI raw

Six schema-valid JSON files preserve timing and numerical validation of the fused numba_cpu backend measured at commit f00c54b (f00c54b9cd7ce32818ee72f6a96398814f99d5c6). The public input is 2011_09_30_drive_0018_sync/image_02, original Velodyne scans, and frozen FeatDepth provider SHA256 7e3ef953a360a7c01ed0cdc3cf947db97fb0aff5912ced805d80bebe210d3360. The same 25 frames contain 3,130,279 points: 20 fit and five holdout, fixed before optimization and histogram-range selection. The declared prior adds local x rotation 0.5 degrees and camera-frame x translation 0.5 m to the dataset reference. Search bounds, steps, and the 800-evaluation budget use defaults. The reference is never the search target.

Projection, rounded-pixel validation, stable nearest-point selection, and histogram accumulation run in a compiled float64 loop. Frozen feature bins avoid repeated searches, and thread-local scratch inspects and clears only pixels touched by the current scan. The candidate uses two persistent frame threads with ordered reduction. No subsampling, approximate arithmetic, or search-budget reduction is used.

Each method was invoked three times from the same problem bytes and prior. Serial NumPy runs first on repetitions one and three; the candidate runs first on repetition two. An absent NUMBA_CACHE_DIR was selected before the first candidate. There is no separate warm-up: its first solve includes JIT compilation, and subsequent candidates reuse the compiled cache in the same process.

Repetition Execution order Serial solve (s) Fused solve (s) Serial pipeline (s) Fused pipeline (s)
1 Serial, candidate 53.927852 5.139488 56.559027 8.200420
2 Candidate, serial 100.623447 3.624189 103.568001 6.388714
3 Serial, candidate 67.077730 3.509601 70.886101 6.499727
Median 67.077730 3.624189 70.886101 6.499727

The ratio of solve medians is 18.5083x; the ratio of pipeline phase medians is 10.9060x. The first pair is 10.4928x for solve, including cold JIT compilation. Pipeline phases include input verification/loading, immutable feature preparation and binning, solve, holdout evaluation, and pool shutdown. Shared demo setup, result serialization, and HTML rendering are excluded. Measurements ran on an i7-9750H, Windows, Python 3.12.10, NumPy 2.3.4, and Numba 0.65.1, without isolating other running work or changing numerical library thread settings. The serial range, 53.928–100.623 s, shows substantial variation. Three repetitions on one workload do not establish a portable speed guarantee or statistical confidence. Bootstrap fields are schema summaries and must not be interpreted as confidence here.

All six timed invocations converged after exactly 229 evaluations. Complete solver records, metrics, final poses, skipped frames, and initial/final holdout evaluations match exactly, including the earlier serial/CUDA x-positive trace. The canonical complete numerical payload SHA256 is fdf4d36e8cbe9b8a88a5cb765f4c387f67fa2021df8e51271ce461bb4f9e3160. Final reference differences are 0.390923 degrees / 0.160078 m and holdout MI is 1.293495 nat. These results preserve the existing calibration outcome; they do not establish accuracy. Quality remains warn, covariance and observability are unknown, raw scans are not motion compensated, and FeatDepth may have KITTI training overlap.

Separately, the fused candidate was run on the six previously frozen signed-axis problems and compared against each original CPU result's full numerical payload.

Case Evaluations Complete numerical equality Solver status
x-positive 229 Exact Converged
x-negative 313 Exact Converged
y-positive 277 Exact Converged
y-negative 241 Exact Converged
z-positive 265 Exact Converged
z-negative 241 Exact Converged

axis-validation.definition.json and axis-validation.benchmark.json retain these six candidates and their six imported historical CPU numerical oracles. Timing is omitted from this matrix: it validates numerical equality and is not a paired speed measurement. All twelve source result hashes and six problem hashes are bound. The validation launcher saved all six standard results before a metadata error interrupted aggregation; a separate bound aggregator read those unchanged bytes and supplied the required metric interpretations.

comparison.definition.json and comparison.benchmark.json retain every timed invocation, individual timings, inputs/configuration, source identity, and original external standard-result SHA256 bindings. serial.result.json and fused.result.json retain the first pair's full traces and holdout records. Every subsequent full numerical payload was checked against this pair, and its shared digest is recorded in each timed benchmark trial. The adapter, measurement launcher, and evidence publisher SHA256 values are also bound. Dataset/workspace paths are replaced with ${DATASET_ROOT} and ${WORKSPACE_ROOT}. Original output hashes bind original external bytes; published representative files have separate hashes in source_artifacts and retain their original-result hash under run.provenance.publication. Raw data, depth weights, generated HTML, and images remain outside Git.

The generated local report was checked at desktop/mobile widths, including expanded provenance, nine decoded images, and nine SVG overlays. Original measurement artifacts remain in outputs/public-kitti-six-dof-fused-cpu-v1; axis results remain in outputs/public-kitti-six-dof-fused-cpu-axis-validation-v1.

Reproduce with an optional dependency and a previously absent cache directory:

pip install 'calibrex[numba]'
NUMBA_CACHE_DIR=/path/to/new-empty-cache calibrex demo kitti-six-dof \
  /path/to/2011_09_30_drive_0018_sync /path/to/featdepth-provider.json \
  --candidate-backend numba_cpu --candidate-frame-workers 2 --repetitions 3 \
  --output-dir outputs/kitti-six-dof-fused-cpu --json

In PowerShell, set $env:NUMBA_CACHE_DIR before invoking the same command. The fixed provider, split, prior, search settings, and first invocation must be retained for a comparable measurement.