mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-26 19:17:02 -06:00
Perf: ARW6 decode 20-33 % faster, same samples
- The vertical inverse 5/3 lifts whole rows at once (`inverse_lift` with samples `w` values wide) instead of gathering each column through a strided iterator and scattering it back: the same integer arithmetic, sequential memory. The horizontal pass is the same function with w = 1. - `0^n 1` codes are counted with one `leading_zeros` over the next MAX_DPT + 1 bits instead of bit by bit (same bits consumed, same errors); each line reserves its values up front. - Colour reconstruction reads plane rows as slices and runs over rows in parallel (it was one thread per tile: 4 threads on a full-frame file whatever the machine). Best of 5 on 4 CPUs, previous and new decoder alternating: ILCE-7RM6 FF HQ 0.56 → 0.46 s, FF Compressed 0.54 → 0.38 s, APS-C HQ 0.34 → 0.23 s, APS-C Compressed 0.35 → 0.24 s (docs/arw6-compression.md → Timings). The decoded mosaic is identical (hash of every sample) on the 8 ARW6 corpus files and 2 private full-frame photos (ISO 100, ISO 12800); the pinned corpus sums still match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
f407813569
commit
79ab54e167
@@ -171,4 +171,13 @@ Raw decode only, 4 CPUs, release build, best of 3 wall-clock (2026-10-10). Metho
|
||||
| ILCE-7RM6 APS-C, Compressed (HQ) | 29.7 MB | 6592x4372 | 0.35 s |
|
||||
| ILCE-7RM6 APS-C, Compressed | 30.9 MB | 6592x4372 | 0.34 s |
|
||||
|
||||
The 1.0 s budget for the full-frame file is met. Parallelised: rayon over the tiles, over the 13 streams of each tile and over its 3 components.
|
||||
The 1.0 s budget for the full-frame file is met. Parallelised: rayon over the tiles, over the 13 streams of each tile and over its 3 components, and the colour reconstruction over rows.
|
||||
|
||||
2026-10-12 performance pass (output unchanged, bit for bit): the vertical wavelet pass lifts whole rows instead of gathering each column, `0^n 1` codes are counted with one `leading_zeros`, and the colour reconstruction reads rows as slices, in parallel. Same method, best of 5, the previous and the new decoder run alternately on the same machine (4 CPUs, which was busier than on 2026-10-10), best of two rounds:
|
||||
|
||||
| File | Before | After |
|
||||
|---|---|---|
|
||||
| ILCE-7RM6 FF, Compressed (HQ) | 0.56 s | 0.46 s |
|
||||
| ILCE-7RM6 FF, Compressed | 0.54 s | 0.38 s |
|
||||
| ILCE-7RM6 APS-C, Compressed (HQ) | 0.34 s | 0.23 s |
|
||||
| ILCE-7RM6 APS-C, Compressed | 0.35 s | 0.24 s |
|
||||
|
||||
Reference in New Issue
Block a user