Problem
In the last cycle we tried to profile and apply different optimizations to the NVIDIA and AMD kernels for dycore however due to the indeterministic code generation we couldn't come up to definitive answers. Since the code generation with specific branches in GT4Py and DaCe works much better we can focus on these optimizations this cycle. The goal is to improve performane for global and local grids on NVIDIA GH200 and AMD MI300A GPU.
Appetite
Solution
The current ideas we have are:
- Do a sweep for thread block sizes in a bunch of GT4Py programs and try to figure out which of their kernels benefit from which thread block size. Based on their characteristics we could find ways to set certain thread block sizes to certain kernels depending on these characteristis.
- Try vertical and horizontal loop blocking especially on AMD but NVIDIA as well by applying the above logic as well
- See if limiting kernel fusion is beneficial since smaller kernels can better utilize the cache on AMD MI300A GPU
Rabbit holes
No-gos
Progress
As summarised at the review of 11.08.2026: benchmarked
vertically_implicit_solver_at_predictor_step and
compute_rho_theta_pgrad_and_update_vn for different thread block sizes on GH200
and collected runtimes for each kernel; tried to come up with heuristics to set
the thread block sizes based on the data read and written to each stencil and
whether they depend on the vertical dimension or not; didn't manage to see any
big difference on GH200 (~5% in total with R02B07 in JW experiment on 1 node) —
maybe the heuristic isn't general enough for all the stencils, need to continue
looking into this, and didn't have time to do the same for AMD.
Since the review
The NVIDIA side of the bet closed with #1446, the thread block configuration for
GH200, merged on 26.08.2026 and reviewed by edopao rather than by the Philip the
table put on this row. That is the day this bet landed, two weeks past the
cycle-37 review, and it is the end date above.
The AMD side did not fit the one week this was bet at. It carries on as
pitch-3b71d9 in cycle 38, around #1444.