diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 6f7fa859..dd2fecde 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -12,15 +12,18 @@ This is an UNSTABLE release. It includes many experimental features, as well as * rugnux: Stills **partiality post-refinement** added, on by default (`--simple-stills` disables); several non-helping stills scaling/detection knobs removed. * rugnux: **Scaling** hardened against a collapsed per-frame scale on the stills path as well as rotation, and the merged-sigma systematic floor is kept when ISa is too degenerate to report. * rugnux: `--min-image-cc` now works for rotation data (opt-in); new `--search-min-zeta` (rotation default 0.85); reports how close a symmetry axis lies to the spindle. -* Performance: bitshuffle+LZ4 images are **decoded on the GPU** rather than on the host (1.8x on a large rotation run), and first-pass rotation indexing refines candidate cells in parallel instead of on one thread per scheme. +* Performance: bitshuffle+LZ4 images are **decoded on the GPU** rather than on the host (1.8x on a large rotation run), with the bitshuffle inverse fused into preprocessing so the decompressed frame is never held in device memory (0.62 -> 0.41 ms/frame at 18 Mpx, ~144 MB less per worker); first-pass rotation indexing refines candidate cells in parallel instead of on one thread per scheme. +* GPU decoding: a corrupt or truncated chunk was decoded as far as it went, leaving the rest of the frame holding the previous image, so the decode is now checked and reported instead; bitshuffle blocks larger than 48 kB decode rather than failing, and anything the device decoder cannot handle falls back to host decompression instead of stopping the run. * Performance: Assorted work removed from the hot paths - GPU lookup tables shared per device, fewer device allocations, cheaper candidate filtering and merged-file writing; jfjoch_viewer image rendering and interaction improved. * Reader: A stored dataset is read as **int32**, so the saturation cap comes from the file's own `saturation_value` (32-bit files were capping at 32767 and dropping their strongest reflections; 16- and 8-bit files at half their range). -* GPU: Spot finding, merging and Bragg prediction now match the CPU path and reproduce run to run. +* GPU: Spot finding, merging and Bragg prediction now match the CPU path and reproduce run to run. Adaptive detection sums its per-ring statistics in integers, so the threshold no longer depends on the order the GPU happens to schedule the reduction in and the two engines agree exactly. +* rugnux: Stills geometry refinement took frames from a shared cursor and stopped on a shared counter, so the refined geometry varied between runs and with `-N` and was fitted to the start of the run; it now draws fixed stripes spanning the whole run. * rugnux: **Geometry refinement** no longer commits a solve that did not converge, and per-image refinement weights spots by confidence. * Lattice search: Corrected the reindex matrices for two Niggli characters. * Azimuthal integration: A flat ring no longer yields a NaN standard deviation, and a low-Q limit above the maximum is rejected instead of producing undefined behaviour. * rugnux: Bad command-line input is **reported** (exit 1) instead of terminating the process, and a run in which nothing indexes still writes a `_process.h5`. -* Broker / writer / image pusher: Image-slot lifetime, locking and deactivation fixes. +* Broker / writer / image pusher: Image-slot lifetime, locking and deactivation fixes; tearing a TCP connection down is serialised per connection; and per-image datasets are sized by the images actually written, so a frame that failed mid-run no longer truncated the last image out of the file. +* rugnux / broker: rugnux exited before reading an image on hosts with more than 128 hardware threads, so the refinement thread count is clamped; a config without a `bragg_integration` block now gets the documented fixed `max_hkl` rather than deriving it per crystal; and the device decode time is reported as compression time again, so that plot and `/entry/profiling/compressionTime` are populated. * Docs: Document device-side bitshuffle+LZ4 image decoding in CPU_DATA_ANALYSIS.md. **Breaking changes to OpenAPI** - regenerate the client (`jfjoch-client` 1.0.0-rc.161, `frontend/src/client`) or read the affected fields as optional: