Repository navigation
Description
Follow-up to epic #2424 / #2390. Cluster 14 of 16. The largest remaining cluster by far.
Will be 4 PRs. Single issue for tracking; four PRs against this issue for actual landings. Each sub-PR is independently reviewable.
Scope
43 GPU-flavoured tests grouped by concern under a new gpu/ directory.
Sub-PR layout
Sub-PR A: gpu/test_reader.py (about 10 files)
GPU reader paths: window-band, stripped (multiband, no-georef-window, forwarding), nodata, miniswhite-band-first, chunks-out-of-core, sidecar-georef-parity, read-eager-url, declared-dtype.
Files: test_gpu_window_band_1605.py, test_gpu_stripped_multiband.py, test_gpu_stripped_no_georef_window_1753.py, test_gpu_stripped_forwarding_1732.py, test_gpu_nodata_1542.py, test_gpu_miniswhite_band_first_2097.py, test_gpu_chunks_out_of_core_1876.py, test_gpu_sidecar_georef_parity_2324.py, test_read_geotiff_gpu_url_eager_2161.py, test_chunked_gpu_declared_dtype_1909.py.
Sub-PR B: gpu/test_writer.py (about 8 files)
GPU writer paths: attrs, band-first, compression-modes, cpu-fallback-codecs, nan-sentinel, overview-inplace, overview-mode-and-compression-level, to_geotiff-gpu-fallback.
Files: test_gpu_writer_attrs_1563.py, test_gpu_writer_band_first_1580.py, test_gpu_writer_compression_modes_2026_05_11.py, test_gpu_writer_cpu_fallback_codecs_2026_05_12.py, test_gpu_writer_nan_sentinel_1599.py, test_gpu_writer_overview_inplace_1948.py, test_gpu_writer_overview_mode_and_compression_level_1740.py, test_to_geotiff_gpu_fallback_1674.py.
Sub-PR C: gpu/test_codec.py (about 12 files)
GPU codec paths: nvcomp (batched, single-alloc, decompress-cumsum-offsets, batch-upload), nvjpeg (encode-stream-sync, 2k-single-alloc), jpeg-gpu, lerc-valid-mask-gpu, predictor (2 / 3 GPU), jpeg-interop-reject.
Files: test_nvcomp_batch_compress_batched_1712.py, test_nvcomp_batch_upload_p3.py, test_nvcomp_decompress_cumsum_offsets_1950.py, test_nvcomp_from_device_bufs_single_alloc_1659.py, test_nvjpeg_encode_stream_sync_2212.py, test_nvjpeg2k_single_alloc_2107.py, test_jpeg_gpu_1549.py, test_lerc_valid_mask_gpu.py, test_predictor2_big_endian_gpu_1517.py, test_predictor3_int_dtype_gpu_1933.py, test_gpu_jpeg_interop_reject_issue_D_1845.py.
Sub-PR D: gpu/test_kernels_and_kwargs.py (about 13 files)
GPU kernel + kwarg surface: cuda-preflight, kwarg-rename, strict-fallback, fallback-forwards-kwargs, kvikio-batched-pread, gds (chunked-parity, fallback-batched-d2h), orientation-gpu, size-param-validation-gpu-vrt, mask-nodata-gpu-vrt, open-geotiff-on-gpu-failure, crs-fail-closed-gpu.
Files: test_gpu_cuda_preflight_1903.py, test_gpu_kwarg_rename_1560.py, test_gpu_strict_fallback_1516.py, test_gpu_fallback_forwards_kwargs_2238.py, test_kvikio_batched_pread_1688.py, test_gds_chunked_gpu_parity_1896.py, test_gds_fallback_batched_d2h_1552.py, test_orientation_gpu.py, test_size_param_validation_gpu_vrt_1776.py, test_mask_nodata_gpu_vrt_2052.py, test_open_geotiff_on_gpu_failure_1615.py, test_crs_fail_closed_gpu_1929.py.
Golden-corpus GPU files (test_golden_corpus_dask_gpu_1930.py, test_golden_corpus_gpu_1930.py) belong to the golden-corpus relocation cluster (issue 16). Hands off here.
Constraints
- Tests-only.
- Markers from
_helpers/markers.py;make_minimal_tifffrom_helpers/tiff_builders.py. Apply@requires_gpuon every test. - Descriptive IDs (e.g.
id="nvcomp-batched[float32-zlib]"). - A
CLUSTER_AUDIT_GPU_<letter>.mdper sub-PR, deleted before merge of that sub-PR.
Verification
pytest xrspatial/geotiff/tests/gpu/ -v # requires CUDA
pytest xrspatial/geotiff/tests/ -x -qFile count drops by 39 (43 deleted, 4 added).
Note on register pressure
This project has hit GPU register-pressure issues before (see memory note in CLAUDE.md / project history). When consolidating the writer-overview and nvcomp tests, watch for kernel-launch parametrise IDs that combine many heavy paths; if the test compilation slows materially, split parametrise IDs into per-codec sub-cases.
Activity
Address review nits: clarify GPU codec deferral, rename helper, tight…
geotiff tests: consolidate codec round-trip cluster (jpeg/jpeg2000/le…
geotiff tests: consolidate predictor cluster (predictor 2 / 3) (#2454)
geotiff tests: consolidate overview cluster (#2456)
Address review feedback on Sub-PR A (#2438)
geotiff tests: consolidate GPU reader cluster (Sub-PR A of #2438) (#2471
geotiff tests: consolidate GPU codec cluster (Sub-PR C) (#2472)
Address review: scope LERC importorskip + silence kvikio deprecation
Add docstring path note to overview putmask test (#2438)
Delete cluster audit file (#2438)
Address review nit: rename _lerc_gpu_only_1896 to _lerc_required_1896 (…
Delete CLUSTER_AUDIT_GPU_D.md per epic #2424 hard gate (Sub-PR D of #…
Delete CLUSTER_AUDIT_GPU_A.md (pre-merge gate for Sub-PR A of #2438) (#…
geotiff tests: consolidate GPU writer cluster (Sub-PR B) (#2473)