---
# System prepended metadata

title: ADAC GT4Py+DaCe Abstract

---

# Abstract

## Introduction to GT4Py

GT4Py is a Python framework for weather and climate applications simplifying the development and maintenance of high-performance codes in prototyping and production environments.

GT4Py separates model development from hardware architecture dependent optimizations, instead of intermixing both together in source code, as regularly done in lower-level languages like Fortran or C. Domain scientists focus solely on numerical modeling using a declarative embedded domain specific language supporting common computational patterns of dynamical cores and physical parametrizations. An optimizing toolchain then transforms this high-level representation into a finely-tuned implementation for the target hardware architecture. This separation of concerns allows performance engineers to implement new optimizations or support new hardware architectures without requiring changes to the application, increasing productivity for domain scientists and performance engineers alike.

In the first presentation, we will motivate GT4Py and give a brief overview of the models implemented with GT4Py, we will give an overview of its internals and conclude with upcoming new features.

## GT4Py with DaCe

DaCe is a framework for high-performance parallel programming that uses a data-centric intermediate representation (IR) based on Stateful DataFlow multiGraphs (SDFG). The DaCe IR allows to analyze parallel computing patterns exposed by data parallelism and enables transformations to the computation schedule in order to improve data locality.

In the second presentation, we will show how we incorporate DaCe as a new backend into GT4Py. We use DaCe's Python frontend to translate the driving code of the simulation to C -performing full program optimization, also known as DaCe Orchestration-, thus reducing the overhead caused by switching between Python and C.
We showcase this in ICON4Py (a weather and climate application), where benefiting from DaCe orchestration, we implemented a pass that is responsible for placing automatically the halo exchanges (therefore, generating MPI-aware code for multi-node execution).

Finally, we will briefly introduce JaCe, a DaCe frontend that can interact with the popular JAX DSL.


# Topics

1. GT4Py
2. DaCe Intro
3. Lowering
4. Optimizations
5. DaCe Orchestration & Automatic Halo Exchange placement 
6. JaCe (?)
