# [GT4Py] Compile time domains ###### tags: `cycle 30 07/25` <!-- Change to the current cycle number --> - Shaped by: Till Ehrengruber, Sara Faghih-Naini - Appetite (FTEs, weeks): - Developers: Sara ## Problem - Compile times due to excessively large domain expressions - Simplification of concat_where expressions beyond what we are currently able to do <!-- The raw idea, a use case, or something we’ve seen that motivates us to work on this --> ## Appetite <!-- Explain how much time we want to spend and how that constrains the solution --> ## Solution - Step 1: Merge [`get_domain` PR](https://github.com/GridTools/gt4py/pull/1893) - Remove implicit size args (simplify / remove `_process_args`, cleanup `CompileTimeArgs`) - Does this PR work DaCe? Talk to Edoardo - Step 2: Write a pass that transforms Example program: ```python @program def my_prog(inp, out): fo(inp, out=out) ``` Corresponding IR: ``` SetAt( target=out, expr=fo(inp), domain=unstructured_domain( Vertex, get_domain(out, Vertex)[0], get_domain(out, Vertex)[1], get_domain(out, K) ) ) ``` into: ``` SetAt( target=out, expr=fo(inp), domain=unstructured_domain( named_range(Vertex, 0, 50000), named_range(K, 0, 100) ) ) ``` Passes that have similar "mechanics": TraceShiftPass, Domain Inference, Type Inference - Step 3: Figure out how the pass gets the static sizes from the runtime fields and integrate the pass into `apply_common_transforms`. If no compile time sizes are given, use runtime sizes. Whether they are used could be configured as such: ```python @program(static_domain_sizes=True) def my_prog(inp, out): fo(inp, out=out) ``` <!-- The core elements we came up with, presented in a form that’s easy for people to immediately understand --> ## 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 -->