---
# System prepended metadata

title: '[GT4Py/ICON4Py] Research: Greenline performance'
tags: [cycle 26 - 11/24]

---

# [GT4Py/ICON4Py] Research: Greenline performance

<!-- Add the tag for the current cycle number in the top bar -->

- Shaped by: Hannes
- Appetite (FTEs, weeks):
- Developers: <!-- Filled in at the betting table unless someone is specifically required here -->

## Problem

In the previous cycle we established a baseline for the Greenline performance using the R2B7 JW experiment. With this project we propose to deepen our understanding of the dycore performance.

## Appetite
<!-- Explain how much time we want to spend and how that constrains the solution -->

## Solution

### Hardening the performance comparison

Run the R2B7 JW with the icon NWP branch (or MCH production if that makes a difference) for "comparison against production openACC code".

### Analysis of GT4Py programs in the ICON4Py dycore and tuning

Add per program performance counters
- on the C++/CUDA side for measurement of individual kernels
- on the Python side for measuring the call overhead

Analysis of the GT4Py programs to get an understanding of block sizes / k-blocking and other performance tuning available in GT4Py.

For performance tuning, we consider integrating meta data than can be forwarded to the GT4Py pipeline in order to apply specific optimizations ("performance engineering").

### ICON4Py optimizations

Study the impact of improving the icon4py code:
- K/Khalf split programs
- Restructuring to domain science style

### Define projects for GT4Py improvements

For improving performance we might play with tweaks in GT4Py that have to be brought back to main, e.g. stride-1 handling. Primary goal of this project is to develop a plan how to implement these features. If possible implement in this project.

### Verification

Setup a datatest that covers the JW case.


## Rabbit holes
<!-- Details about the solution worth calling out to avoid problems -->

## No-gos
<!-- Anything specifically excluded from the concept: functionality or use cases we intentionally aren’t covering to fit the ## appetite or make the problem tractable -->

## Progress
<!-- Don't fill during shaping. This area is for collecting TODOs during building. As first task during building add a preliminary list of coarse-grained tasks for the project and refine them with finer-grained items when it makes sense as you work on them. -->

- [x] Task 1 ([PR#xxxx](https://github.com/GridTools/gt4py/pulls))
    - [x] Subtask A
    - [x] Subtask X
- [ ] Task 2
    - [x] Subtask H
    - [ ] Subtask J
- [ ] Discovered Task 3
    - [ ] Subtask L
    - [ ] Subtask S
- [ ] Task 4

