Skip to content

cuda: add an approximate float32 CIEDE2000 extractor - #1661

Open
BardieJoensen wants to merge 6 commits into
Netflix:masterfrom
BardieJoensen:cuda-ciede-feature
Open

BardieJoensen wants to merge 6 commits into
Netflix:masterfrom
BardieJoensen:cuda-ciede-feature

Conversation

@BardieJoensen

Copy link
Copy Markdown
Contributor

Adds ciede_cuda, a GPU CIEDE2000 feature extractor for 8/10/12/16-bit input
with the same chroma handling as the CPU ciede extractor after #1611.

Colour conversion and the CIEDE2000 arithmetic run in float32 per pixel; the
per-frame mean is accumulated in double partial sums. Against the CPU ciede
(double throughout) the per-frame score differs by at most 1e-6 on the clips
tested, which the CLI's 6-digit output shows as identical on most frames
(35 of 48 on src01). It is therefore documented as approximate, with the
accuracy scope stated in the extractor's description, rather than as bit-exact
like psnr_cuda and ssim_cuda.

Tests cover all four input formats, partial blocks at odd sizes, callback
errors and initialization cleanup, plus a CPU parity test
(test_cuda_ciede_parity) with an explicit tolerance.

Depends on, and is stacked on:

Split from #1563.

Skip CUDA extractors in the temporal flush loop to avoid duplicate final
scores. Add a regression across thread counts and short clips.
Retain common cleanup after CPU dispatch and finish all-plane downloads
before CPU reads. Test pool reuse, GPU completion and CPU PSNR/SSIM output.
Add ssim_cuda with scaling, L/C/S and dB options. Reuse the CUDA PSNR resource helpers and test numerical parity, callback errors and initialization cleanup.
Use horizontal subsampling for columns and vertical subsampling for rows.
Check explicit expected pixels at 8, 10, 12 and 16 bits.
Use float color conversion and CIEDE arithmetic with double partial sums. Test formats, partial blocks, callback errors and initialization cleanup.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant