Summary
The TOPMODEL runoff generation kernel (exponential transmissivity + saturation deficit) can run on GPU with one thread per catchment. At the NWM's 2.7M catchments, this achieves 31.3x speedup with max relative error 5.87e-07 (FP32 precision).
Benchmark (RTX 3060)
| Catchments |
CPU |
GPU |
Speedup |
Max rel error |
| 100K |
7 ms |
0.40 ms |
17.7x |
4.76e-07 |
| 1M |
69 ms |
2.36 ms |
29.2x |
5.30e-07 |
| 2.7M (NWM) |
184 ms |
5.87 ms |
31.3x |
5.87e-07 |
Zero NaN, zero failures. The GPU uses CUDA __expf() for the transmissivity exponential which gives slightly different rounding than CPU expf() — both are within FP32 precision.
Code
https://github.com/consigcody94/parallel-prefix-rt/blob/master/benchmarks/cuda/owp_extended_kernels.cu
Summary
The TOPMODEL runoff generation kernel (exponential transmissivity + saturation deficit) can run on GPU with one thread per catchment. At the NWM's 2.7M catchments, this achieves 31.3x speedup with max relative error 5.87e-07 (FP32 precision).
Benchmark (RTX 3060)
Zero NaN, zero failures. The GPU uses CUDA
__expf()for the transmissivity exponential which gives slightly different rounding than CPUexpf()— both are within FP32 precision.Code
https://github.com/consigcody94/parallel-prefix-rt/blob/master/benchmarks/cuda/owp_extended_kernels.cu