Skip to content

Consolidation cluster 14: GPU (4 sub-PRs) (long-tail epic #2424) #2438

Closed

Description

@brendancol

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_tiff from _helpers/tiff_builders.py. Apply @requires_gpu on every test.
  • Descriptive IDs (e.g. id="nvcomp-batched[float32-zlib]").
  • A CLUSTER_AUDIT_GPU_<letter>.md per sub-PR, deleted before merge of that sub-PR.

Verification

pytest xrspatial/geotiff/tests/gpu/ -v  # requires CUDA
pytest xrspatial/geotiff/tests/ -x -q

File 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions