You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Replace coordinate-only benchmarks with end-to-end reproject/merge tables (#1045)
README now shows full pipeline times (transform + resampling) and
merge times, both compared against rioxarray. More useful than the
previous coordinate-transform-only table since users care about
total wall time.
|[Reproject](xrspatial/reproject/__init__.py)| Reprojects a raster to a new CRS with Numba JIT / CUDA coordinate transforms and resampling | Standard (inverse mapping) | ✅️ | ✅️ | ✅️ | ✅️ |
216
216
|[Merge](xrspatial/reproject/__init__.py)| Merges multiple rasters into a single mosaic with configurable overlap strategy | Standard (mosaic) | ✅️ | ✅️ | 🔄 | 🔄 |
217
217
218
-
Built-in Numba JIT and CUDA projection kernels bypass pyproj for common CRS pairs:
218
+
Built-in Numba JIT and CUDA projection kernels bypass pyproj for common CRS pairs. Other CRS pairs fall back to pyproj automatically.
219
219
220
220
| Projection | EPSG examples | CPU Numba | CUDA GPU |
Times include coordinate transform + bilinear resampling. Speedup in parentheses is rioxarray/xrspatial. The Polar Stereographic advantage comes from rioxarray computing a much larger output grid for the same input extent.
244
+
245
+
**Merge performance** (4 overlapping same-CRS tiles, vs rioxarray):
| State Plane ME (tmerc) | 223ms (9x) | 23ms (88x) | 2.03s |
249
-
| State Plane CA (lcc, ftUS) | 426ms (11x) | 36ms (124x) | 4.47s |
250
-
251
-
Speedups in parentheses are relative to pyproj. The Numba kernels port the PROJ C math (Krueger 6th-order series for Transverse Mercator, Newton iteration for LCC/Mercator inverse, authalic latitude Fourier series for equal-area projections) to `@njit(parallel=True)`. CUDA kernels use `@cuda.jit(device=True)` for the same per-pixel math.
252
-
253
-
These times measure the coordinate transform alone. Total `reproject()` time also includes resampling (bilinear/cubic interpolation), which adds roughly the same amount again. CRS pairs not in the table go through pyproj automatically with no accuracy or functionality loss.
249
+
| 512x512 | 11ms | 50ms |**4.5x**|
250
+
| 1024x1024 | 82ms | 125ms |**1.5x**|
251
+
| 2048x2048 | 347ms | 604ms |**1.7x**|
252
+
253
+
Same-CRS tiles skip reprojection entirely and are placed by direct coordinate alignment.
0 commit comments