Skip to content

Graph CI results on GitHub pages - #223

Merged
andrej merged 8 commits into
develfrom
ci-graph
Sep 29, 2026
Merged

andrej merged 8 commits into
develfrom
ci-graph

Conversation

@andrej

@andrej andrej commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Inspired by Xilinx/mlir-aie#3698, this adds a visualization to the CI results that we generate. Without a visualization, I wasn't really looking at the numbers, so we regressed on llama with my previous commit. This should help that not happening again. In addition, the action now should no longer answer to PRs with the long table of benchmark results (that I rarely looked at), but instead only flags performance results for those operators that were either added or dropped, or any operator whose change in performance is 5%+ (and the mean moves more than two standard deviations, to avoid noise).

Previous results also included highly-noisy small tests that were primarily dominated by dispatch overhead. This adds an new pytest bench marker and annotates only sufficiently large test parametrizations with it, so the results aren't polluted with meaningless small measurements.

Lastly, drop results from all.csv that are older than a year. A follow-on, if we start to have a huge repository because of benchmark results, might be to squash and force-rewrite the history of the ci branch if it ever becomes needed, as suggested by @hunhoffe.

Tested locally but will probably need some online testing on devel so expect a follow-on PR (or multiple).

image

Add a `bench` pytest marker and record it in the results CSV. Reports and
charts cover the marked parametrizations. Every operator carries at least one
marker, on the largest input it runs. The choice comes from five months of
results on the `ci` branch: an operator whose every parametrization finishes
near the dispatch overhead gets the least noisy one.

build_pages.py renders the marked results as one chart per operator and
publish-pages.yml deploys them. The repository needs Pages enabled with
"GitHub Actions" as its source.

pretty_trends.py reports the operators a run adds or drops, and the benched
metrics that move by 5% or more. A percentage gate alone reports mostly noise.
Over one window of the results branch, 633 of 1179 consecutive latency pairs
crossed 5%, and 17 of those also crossed the spread the runs measured. A change
has to clear both gates. pr_comment.py assembles these reports into the pull
request comment, which drops the pass/fail tables.

merge_all.py deletes results older than a year. Its per-test limit grouped rows
by parametrization name alone. Operators share those names, so their histories
overwrote each other. The key carries the test path.
The `github-pages` environment admits `devel`. A run that starts from `main`
reaches the deploy step and GitHub rejects it, which leaves a failed run behind
every push to `main`.
One chart per architecture, sharing the metric selector. A krackan latency and
a phoenix latency differ by enough that one pair of axes hides the smaller one.
Each parametrization holds its colour across the two charts.

The x axis carries the commit SHA of each run, and the tooltip carries its
date. The y axis starts at zero.
@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

CI Test Results

72976ed (2026_09_28_22_28_15)

IRON - CI Summary

Examples

iron/applications/llama_3.2_1b
Test Krackan Status Krackan Phoenix Status Phoenix
test_llama_3_2_1b[llama_3.2_1b_prompt_1024_tokens_1] ✅ - - -
test_llama_3_2_1b[llama_3.2_1b_prompt_1024_tokens_40] ✅ - - -
test_llama_3_2_1b[llama_3.2_1b_prompt_13_tokens_1] ✅ - - -
test_llama_3_2_1b[llama_3.2_1b_prompt_13_tokens_40] ✅ - - -

Small

iron/operators/axpy
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_axpy[input_length_2048-num_aie_columns_1-tile_size_2048-scalar_factor_3.0] ✅ 187.34 ✅ 372.98
test_axpy[input_length_2048-num_aie_columns_2-tile_size_1024-scalar_factor_3.0] ✅ 174.06 ✅ 440.42
test_axpy[input_length_2048-num_aie_columns_4-tile_size_512-scalar_factor_3.0] ✅ 166.26 ✅ 458.68
test_axpy[input_length_2048-num_aie_columns_8-tile_size_256-scalar_factor_3.0] ✅ 173.32 - -
iron/operators/dequant
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_dequant[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-group_size_32] ✅ 174.02 ✅ 311.52
test_dequant[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-group_size_32] ✅ 156.26 ✅ 355.18
test_dequant[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-group_size_32] ✅ 158.52 ✅ 343.36
test_dequant[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-group_size_32] ✅ 174.80 ✅ 325.72
test_dequant[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-group_size_32] ✅ 171.10 ✅ 277.06
test_dequant[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-group_size_32] ✅ 161.36 ✅ 440.40
test_dequant[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256-group_size_32] ✅ 196.94 - -
test_dequant[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128-group_size_32] ✅ 224.26 - -
iron/operators/elementwise_add
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_elementwise_add[input_length_2048-num_aie_columns_1-tile_size_2048] ✅ 157.56 ✅ 472.72
test_elementwise_add[input_length_2048-num_aie_columns_2-tile_size_1024] ✅ 168.60 ✅ 347.88
test_elementwise_add[input_length_2048-num_aie_columns_4-tile_size_512] ✅ 176.10 ✅ 444.40
test_elementwise_add[input_length_2048-num_aie_columns_8-tile_size_256] ✅ 206.26 - -
iron/operators/elementwise_mul
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_elementwise_mul[input_length_2048-num_aie_columns_1-tile_size_2048] ✅ 193.36 ✅ 428.52
test_elementwise_mul[input_length_2048-num_aie_columns_2-tile_size_1024] ✅ 186.66 ✅ 967.56
test_elementwise_mul[input_length_2048-num_aie_columns_4-tile_size_512] ✅ 196.02 ✅ 390.54
test_elementwise_mul[input_length_2048-num_aie_columns_8-tile_size_256] ✅ 193.52 - -
iron/operators/flm/dequant
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_gate_up_interleaved_blob[iter0] ✅ - - -
test_gate_up_interleaved_blob[iter1] ✅ - - -
test_gate_up_interleaved_blob[iter2] ✅ - - -
test_gate_up_interleaved_blob[iter3] ✅ - - -
test_gate_up_interleaved_blob[iter4] ✅ - - -
test_large_k_shapes[K_4096-N_1536] ✅ - - -
test_large_k_shapes[K_6144-N_1536] ✅ - - -
test_matches_reference[K_1024-N_128] ✅ - - -
test_matches_reference[K_1024-N_512] ✅ - - -
test_matches_reference[K_1536-N_640] ✅ - - -
test_matches_reference[K_2048-N_256] ✅ - - -
test_one_xclbin_serves_every_shape[iter0] ✅ - - -
test_one_xclbin_serves_every_shape[iter1] ✅ - - -
test_one_xclbin_serves_every_shape[iter2] ✅ - - -
test_one_xclbin_serves_every_shape[iter3] ✅ - - -
test_one_xclbin_serves_every_shape[iter4] ✅ - - -
test_output_feeds_gemm_unchanged[iter0] ✅ - - -
test_output_feeds_gemm_unchanged[iter1] ✅ - - -
test_output_feeds_gemm_unchanged[iter2] ✅ - - -
test_output_feeds_gemm_unchanged[iter3] ✅ - - -
test_output_feeds_gemm_unchanged[iter4] ✅ - - -
test_rejects_unservable_shapes[K_1000-N_128-exc_<class 'ValueError'>-match_multiple of] ✅ - ✅ -
test_rejects_unservable_shapes[K_1024-N_100-exc_<class 'ValueError'>-match_multiple of] ✅ - ✅ -
test_rejects_unservable_shapes[K_512-N_128-exc_<class 'NotImplementedError'>-match_tile_n] ✅ - - -
iron/operators/flm/gemm
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_artifact_stem_differs_from_generic_gemm[M_256-K_512-N_1024] ✅ - ✅ -
test_artifact_stem_differs_from_generic_gemm[M_512-K_1024-N_2048] ✅ - ✅ -
test_gemm[M_256-K_512-N_1024-epilogue_gelu-clamp_None-rounding_conv_even] ✅ 423.40 - -
test_gemm[M_256-K_512-N_1024-epilogue_none-clamp_(-2.0, 2.0)-rounding_conv_even] ✅ 368.16 - -
test_gemm[M_256-K_512-N_1024-epilogue_none-clamp_None-rounding_conv_even] ✅ 321.86 - -
test_gemm[M_256-K_512-N_1024-epilogue_none-clamp_None-rounding_floor] ✅ 309.66 - -
test_gemm[M_256-K_512-N_1024-epilogue_silu-clamp_None-rounding_conv_even] ✅ 407.90 - -
test_gemm[M_256-K_512-N_128-epilogue_none-clamp_None-rounding_conv_even] ✅ 338.82 ✅ 775.38
test_gemm[M_256-K_512-N_1536-epilogue_none-clamp_None-rounding_conv_even] ✅ 343.74 - -
test_gemm[M_256-K_512-N_256-epilogue_none-clamp_None-rounding_conv_even] - - ✅ 649.60
test_gemm[M_256-K_512-N_320-epilogue_none-clamp_None-rounding_conv_even] - - ✅ 684.02
test_gemm[M_256-K_512-N_512-epilogue_gelu-clamp_None-rounding_conv_even] - - ✅ 889.26
test_gemm[M_256-K_512-N_512-epilogue_none-clamp_(-2.0, 2.0)-rounding_conv_even] - - ✅ 671.24
test_gemm[M_256-K_512-N_512-epilogue_none-clamp_None-rounding_floor] - - ✅ 712.54
test_gemm[M_256-K_512-N_512-epilogue_silu-clamp_None-rounding_conv_even] - - ✅ 1061.32
test_gemm[M_256-K_512-N_64-epilogue_none-clamp_None-rounding_conv_even] - - ✅ 1265.26
test_gemm[M_512-K_1024-N_2048-epilogue_none-clamp_None-rounding_conv_even] ✅ 399.96 - -
test_gemm[M_512-K_1024-N_512-epilogue_none-clamp_None-rounding_conv_even] - - ✅ 1998.44
test_gemm_split_leg_bounds[iter0] ✅ - ✅ -
test_gemm_split_leg_bounds[iter1] ✅ - ✅ -
test_gemm_split_leg_bounds[iter2] ✅ - ✅ -
test_gemm_split_leg_bounds[iter3] ✅ - ✅ -
test_gemm_split_leg_bounds[iter4] ✅ - ✅ -
test_gemm_split_leg_bounds_runs[iter0] ✅ - ✅ -
test_gemm_split_leg_bounds_runs[iter1] ✅ - ✅ -
test_gemm_split_leg_bounds_runs[iter2] ✅ - ✅ -
test_gemm_split_leg_bounds_runs[iter3] ✅ - ✅ -
test_gemm_split_leg_bounds_runs[iter4] ✅ - ✅ -
test_gemm_tile_options[tn128-ma32-default] - - ✅ -
test_gemm_tile_options[tn128-ma64-default] ✅ - - -
test_gemm_tile_options[tn16-ma64-default] ✅ - ✅ -
test_gemm_tile_options[tn32-ma64-default] ✅ - ✅ -
test_gemm_tile_options[tn64-ma32-default] ✅ - ✅ -
test_one_xclbin_serves_every_clamp_bound[iter0] ✅ - ✅ -
test_one_xclbin_serves_every_clamp_bound[iter1] ✅ - ✅ -
test_one_xclbin_serves_every_clamp_bound[iter2] ✅ - ✅ -
test_one_xclbin_serves_every_clamp_bound[iter3] ✅ - ✅ -
test_one_xclbin_serves_every_clamp_bound[iter4] ✅ - ✅ -
test_one_xclbin_serves_every_shape[iter0] ✅ - ✅ -
test_one_xclbin_serves_every_shape[iter1] ✅ - ✅ -
test_one_xclbin_serves_every_shape[iter2] ✅ - ✅ -
test_one_xclbin_serves_every_shape[iter3] ✅ - ✅ -
test_one_xclbin_serves_every_shape[iter4] ✅ - ✅ -
iron/operators/gelu
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_gelu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048] ✅ 184.80 ✅ 600.34
test_gelu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024] ✅ 152.74 ✅ 453.26
test_gelu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024] ✅ 169.98 ✅ 381.92
test_gelu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512] ✅ 171.28 ✅ 393.72
test_gelu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512] ✅ 174.28 ✅ 416.06
test_gelu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256] ✅ 190.08 ✅ 471.36
test_gelu[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256] ✅ 211.64 - -
test_gelu[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128] ✅ 214.10 - -
iron/operators/gemm
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_gemm[M_1792-K_896-N_1152-num_aie_columns_8-b_col_maj_False-c_col_maj_True-m_64-k_32-n_48-trace_size_0-partition_N_1] ✅ 2278.26 - -
test_gemm[M_192-K_384-N_64-num_aie_columns_4-b_col_maj_False-c_col_maj_False-m_48-k_96-n_16-trace_size_0-partition_N_1] ✅ 228.22 ✅ 536.28
test_gemm[M_192-K_384-N_64-num_aie_columns_4-b_col_maj_True-c_col_maj_True-m_48-k_96-n_16-trace_size_0-partition_N_1] ✅ 230.94 ✅ 737.30
test_gemm[M_2048-K_2048-N_2048-num_aie_columns_1-b_col_maj_False-c_col_maj_False-m_64-k_64-n_64-trace_size_0-partition_N_1] ✅ 47837.86 ✅ 82296.34
test_gemm[M_2048-K_2048-N_2048-num_aie_columns_2-b_col_maj_True-c_col_maj_False-m_64-k_64-n_64-trace_size_0-partition_N_1] ✅ 27865.48 ✅ 22197.58
test_gemm[M_2048-K_2048-N_2048-num_aie_columns_8-b_col_maj_True-c_col_maj_True-m_64-k_64-n_64-trace_size_0-partition_N_1] ✅ 7821.62 - -
test_gemm[M_384-K_1536-N_1792-num_aie_columns_4-b_col_maj_True-c_col_maj_False-m_32-k_48-n_64-trace_size_0-partition_N_1] ✅ 2310.80 ✅ 5318.72
test_gemm[M_64-K_512-N_256-num_aie_columns_4-b_col_maj_True-c_col_maj_False-m_16-k_64-n_64-trace_size_0-partition_N_4] ✅ 3791.72 ✅ 7461.78
test_gemm[M_896-K_1792-N_640-num_aie_columns_8-b_col_maj_False-c_col_maj_True-m_32-k_64-n_80-trace_size_0-partition_N_1] ✅ 1496.08 - -
iron/operators/gemv
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_gemv[M_128-K_128-num_aie_columns_1-tile_size_input_32-tile_size_output_128] ✅ 0.20 ✅ 0.11
test_gemv[M_2048-K_8192-num_aie_columns_1-tile_size_input_1-tile_size_output_2048] ✅ 11.79 ✅ 3.67
test_gemv[M_2048-K_8192-num_aie_columns_2-tile_size_input_1-tile_size_output_1024] ✅ 23.59 ✅ 5.76
test_gemv[M_2048-K_8192-num_aie_columns_4-tile_size_input_1-tile_size_output_512] ✅ 38.65 ✅ 9.30
test_gemv[M_2048-K_8192-num_aie_columns_8-tile_size_input_1-tile_size_output_256] ✅ 43.19 - -
test_gemv[M_8192-K_2048-num_aie_columns_1-tile_size_input_4-tile_size_output_1024] ✅ 13.34 ✅ 3.63
test_gemv[M_8192-K_2048-num_aie_columns_2-tile_size_input_4-tile_size_output_1024] ✅ 24.07 ✅ 6.27
test_gemv[M_8192-K_2048-num_aie_columns_4-tile_size_input_4-tile_size_output_1024] ✅ 40.58 ✅ 8.43
test_gemv[M_8192-K_2048-num_aie_columns_8-tile_size_input_4-tile_size_output_1024] ✅ 43.59 - -
test_gemv_batched[M_1024-K_1024-num_aie_columns_1-tile_size_input_1-tile_size_output_64-num_batches_2] ✅ 8.70 ✅ 2.65
test_gemv_batched[M_1026-K_64-num_aie_columns_1-tile_size_input_1-tile_size_output_2-num_batches_2] ✅ 0.85 ✅ 0.25
test_gemv_batched[M_256-K_128-num_aie_columns_1-tile_size_input_1-tile_size_output_256-num_batches_4] ✅ 1.05 ✅ 0.51
test_gemv_batched[M_256-K_128-num_aie_columns_8-tile_size_input_1-tile_size_output_32-num_batches_100] ✅ 15.71 - -
test_gemv_batched[M_448-K_64-num_aie_columns_8-tile_size_input_1-tile_size_output_56-num_batches_192] ✅ 12.10 - -
test_gemv_batched[M_512-K_64-num_aie_columns_8-tile_size_input_4-tile_size_output_64-num_batches_32] ✅ 6.90 - -
test_gemv_batched[M_64-K_1536-num_aie_columns_1-tile_size_input_1-tile_size_output_64-num_batches_8] ✅ 5.71 ✅ 1.62
test_gemv_gelu[M_128-K_128-num_aie_columns_1-tile_size_input_32-tile_size_output_128] ✅ 0.21 ❌ -
test_gemv_gelu[M_2048-K_8192-num_aie_columns_1-tile_size_input_1-tile_size_output_2048] ✅ 12.31 ❌ -
test_gemv_gelu[M_8192-K_2048-num_aie_columns_1-tile_size_input_4-tile_size_output_1024] ✅ 11.69 ❌ -
iron/operators/layer_norm
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_layer_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048] ✅ 174.50 ✅ 465.96
test_layer_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024] ✅ 215.42 ✅ 433.42
test_layer_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024] ✅ 179.80 ✅ 364.18
test_layer_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512] ✅ 177.72 ✅ 387.78
test_layer_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512] ✅ 183.22 ✅ 390.60
test_layer_norm[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256] ✅ 216.52 ✅ 434.56
test_layer_norm[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256] ✅ 203.84 - -
test_layer_norm[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128] ✅ 230.24 - -
iron/operators/leaky_relu
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.01] ✅ 166.10 ✅ 313.50
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.1] ✅ 165.12 ✅ 317.10
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.25] ✅ 160.28 ✅ 313.18
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-alpha_0.01] ✅ 158.56 ✅ 346.70
test_leaky_relu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-alpha_0.01] ✅ 165.42 ✅ 432.52
test_leaky_relu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-alpha_0.01] ✅ 219.08 ✅ 675.50
test_leaky_relu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-alpha_0.01] ✅ 159.14 ✅ 377.62
test_leaky_relu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-alpha_0.01] ✅ 191.42 ✅ 476.94
test_leaky_relu[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256-alpha_0.01] ✅ 201.48 - -
test_leaky_relu[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128-alpha_0.01] ✅ 232.40 - -
iron/operators/mem_copy
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_mem_copy[input_length_2048-num_cores_1-num_channels_1-bypass_False-tile_size_2048] ✅ 157.38 ✅ 340.24
test_mem_copy[input_length_2048-num_cores_16-num_channels_2-bypass_False-tile_size_128] ✅ 226.46 - -
test_mem_copy[input_length_2048-num_cores_2-num_channels_1-bypass_False-tile_size_1024] ✅ 150.90 ✅ 432.36
test_mem_copy[input_length_2048-num_cores_2-num_channels_2-bypass_False-tile_size_1024] ✅ 153.64 ✅ 524.74
test_mem_copy[input_length_2048-num_cores_4-num_channels_1-bypass_False-tile_size_512] ✅ 179.86 ✅ 493.54
test_mem_copy[input_length_2048-num_cores_4-num_channels_2-bypass_False-tile_size_512] ✅ 170.28 ✅ 405.46
test_mem_copy[input_length_2048-num_cores_8-num_channels_1-bypass_False-tile_size_256] ✅ 205.20 - -
test_mem_copy[input_length_2048-num_cores_8-num_channels_2-bypass_False-tile_size_256] ✅ 173.34 ✅ 567.06
iron/operators/mha
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_arg_spec_matches_design_shapes[seq_len_16384-dim_64-num_heads_1-num_pipelines_8-num_kv_heads_0] ✅ - ✅ -
test_arg_spec_matches_design_shapes[seq_len_16384-dim_64-num_heads_8-num_pipelines_8-num_kv_heads_2] ✅ - ✅ -
test_mha[seq_len_16384-dim_64-num_heads_1-num_pipelines_8-num_kv_heads_0] ✅ 52433.40 - -
iron/operators/relu
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048] ✅ 172.20 ✅ 315.50
test_relu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024] ✅ 222.32 ✅ 390.22
test_relu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024] ✅ 181.38 ✅ 373.74
test_relu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512] ✅ 180.14 ✅ 421.04
test_relu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512] ✅ 172.36 ✅ 430.70
test_relu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256] ✅ 163.58 ✅ 534.50
test_relu[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256] ✅ 170.14 - -
test_relu[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128] ✅ 227.14 - -
iron/operators/repeat
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_cols_without_a_legal_split_is_rejected[cols_1031-why_prime > 1023: the only divisors are 1 and cols, neither legal] ✅ - ✅ -
test_cols_without_a_legal_split_is_rejected[cols_2062-why_2 x 1031: the only word-aligned chunk leaves a 1031-wide chunk count] ✅ - ✅ -
test_cols_without_a_legal_split_is_rejected[cols_513-why_odd: every divisor is odd, so no chunk is a whole 32-bit word] ✅ - ✅ -
test_repeat[rows_4-cols_1024-repeat_2-transfer_size_None] ✅ 201.20 ✅ 298.08
test_repeat[rows_8-cols_512-repeat_4-transfer_size_64] ✅ 174.78 ✅ 269.90
test_repeat[rows_8-cols_64-repeat_4-transfer_size_None] ✅ 159.50 ✅ 334.64
iron/operators/rms_norm
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-weighted_False] ✅ 144.88 ✅ 274.00
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-weighted_True] ✅ 163.22 ✅ 766.34
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-weighted_False] ✅ 153.04 ✅ 459.76
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-weighted_True] ✅ 167.58 ✅ 407.20
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-weighted_False] ✅ 155.82 ✅ 440.24
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-weighted_True] ✅ 159.58 ✅ 387.58
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-weighted_False] ✅ 161.02 ✅ 790.08
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-weighted_True] ✅ 191.02 ✅ 809.42
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-weighted_False] ✅ 161.18 ✅ 438.50
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-weighted_True] ✅ 164.04 ✅ 392.74
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-weighted_False] ✅ 203.36 ✅ 410.92
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-weighted_True] ✅ 205.56 - -
test_rms_norm[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256-weighted_False] ✅ 181.80 - -
test_rms_norm[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256-weighted_True] ✅ 188.74 - -
test_rms_norm[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128-weighted_False] ✅ 210.18 - -
iron/operators/rope
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_1-method_type_0] ✅ 184.60 ✅ 356.02
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_2-method_type_0] ✅ 185.20 ✅ 399.64
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_4-method_type_0] ✅ 198.36 ✅ 508.88
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_8-method_type_0] ✅ 175.30 - -
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_1-method_type_0] ✅ 183.20 ✅ 316.56
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_2-method_type_0] ✅ 193.54 ✅ 301.40
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_4-method_type_0] ✅ 188.14 ✅ 567.18
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_8-method_type_0] ✅ 195.22 - -
iron/operators/sigmoid
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_sigmoid[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048] ✅ 168.06 ✅ 425.98
test_sigmoid[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024] ✅ 159.44 ✅ 349.16
test_sigmoid[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024] ✅ 159.18 ✅ 407.06
test_sigmoid[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512] ✅ 161.02 ✅ 462.34
test_sigmoid[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512] ✅ 167.70 ✅ 358.62
test_sigmoid[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256] ✅ 174.10 ✅ 464.60
test_sigmoid[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256] ✅ 165.56 - -
test_sigmoid[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128] ✅ 210.38 - -
iron/operators/silu
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_silu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048] ✅ 177.32 ✅ 300.02
test_silu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024] ✅ 162.48 ✅ 372.26
test_silu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512] ✅ 190.42 ✅ 334.90
test_silu[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256] ✅ 199.98 - -
iron/operators/softmax
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_1024] ✅ 190.42 ✅ 513.78
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_2048] ✅ 193.78 ✅ 371.02
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_512] ✅ 174.48 ✅ 559.60
iron/operators/strided_copy
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_strided_copy[chunked_transfer] ✅ 194.12 ✅ 438.38
test_strided_copy[contiguous] ✅ 179.28 ✅ 369.36
test_strided_copy[four_channels] ✅ 181.96 ✅ 426.70
test_strided_copy[kv_slot0] ✅ 172.84 ✅ 435.02
test_strided_copy[kv_slot5] ✅ 169.76 ✅ 277.22
test_strided_copy[kv_slot5_four_channels] ✅ 159.38 ✅ 437.02
test_strided_copy[kv_slot5_two_channels] ✅ 175.08 ✅ 385.48
test_strided_copy[kv_slot_last] ✅ 183.28 ✅ 280.16
test_strided_copy[two_channels] ✅ 167.34 ✅ 363.96
test_strided_copy[two_channels_chunked] ✅ 162.90 ✅ 432.26
test_strided_copy_cache_offset_parameter[iter0] ✅ - - -
test_strided_copy_cache_offset_parameter[iter1] ✅ - - -
test_strided_copy_cache_offset_parameter[iter2] ✅ - - -
test_strided_copy_cache_offset_parameter[iter3] ✅ - - -
test_strided_copy_cache_offset_parameter[iter4] ✅ - - -
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter0] ✅ - ✅ -
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter1] ✅ - ✅ -
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter2] ✅ - ✅ -
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter3] ✅ - ✅ -
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter4] ✅ - ✅ -
iron/operators/swiglu_decode
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_swiglu_decode[embedding_dim_1024-hidden_dim_3584] ✅ 973.19 ✅ 14018.25
test_swiglu_decode[embedding_dim_2048-hidden_dim_2048] ✅ 1012.54 ✅ 11370.28
iron/operators/swiglu_prefill
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_swiglu_prefill[seq_len_256-embedding_dim_2048-hidden_dim_2048-prio_accuracy_False-b_col_maj_False] ✅ 2189.98 ✅ 24569.03
test_swiglu_prefill[seq_len_256-embedding_dim_2048-hidden_dim_2048-prio_accuracy_False-b_col_maj_True] ✅ 2360.43 ✅ 21028.43
test_weight_layout_reaches_both_gemms[b_col_maj_False] ✅ - ✅ -
test_weight_layout_reaches_both_gemms[b_col_maj_True] ✅ - ✅ -
iron/operators/tanh
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_tanh[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048] ✅ 150.76 ✅ 327.86
test_tanh[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024] ✅ 166.24 ✅ 337.28
test_tanh[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024] ✅ 160.82 ✅ 308.16
test_tanh[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512] ✅ 173.10 ✅ 734.98
test_tanh[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512] ✅ 175.40 ✅ 286.64
test_tanh[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256] ✅ 201.24 ✅ 397.12
test_tanh[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256] ✅ 164.74 - -
test_tanh[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128] ✅ 217.10 - -
iron/operators/transpose
Test Krackan Status Krackan Latency (mean) Phoenix Status Phoenix Latency (mean)
test_a_dimension_that_floors_to_zero_is_refused_by_name[M_2048-N_128-aie_columns_8-channels_1-m_256-n_32-bad_num_aie_columns] ✅ - ✅ -
test_a_dimension_that_floors_to_zero_is_refused_by_name[M_256-N_2048-aie_columns_1-channels_2-m_256-n_32-bad_num_channels] ✅ - ✅ -
test_a_tiling_that_fits_is_still_accepted[aie_columns_1] ✅ - ✅ -
test_a_tiling_that_fits_is_still_accepted[aie_columns_2] ✅ - ✅ -
test_a_tiling_that_fits_is_still_accepted[aie_columns_4] ✅ - ✅ -
test_transpose[M_2048-N_64-aie_columns_1-channels_1-m_64-n_64-s_8-num_batches_1] ✅ 910.02 ✅ 895.50
test_transpose[M_2048-N_64-aie_columns_1-channels_1-m_64-n_64-s_8-num_batches_2] ✅ 1768.32 ✅ 2583.24
test_transpose[M_2048-N_64-aie_columns_1-channels_2-m_64-n_64-s_8-num_batches_1] ✅ 559.38 ✅ 449.32
Krackan - Small

IRON

Tested on 2026_09_28_22_28_15 at commit 72976ed.

iron/operators/axpy
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_axpy[input_length_2048-num_aie_columns_1-tile_size_2048-scalar_factor_3.0]✅ 5/5187.340.08n/a
test_axpy[input_length_2048-num_aie_columns_2-tile_size_1024-scalar_factor_3.0]✅ 5/5174.060.07n/a
test_axpy[input_length_2048-num_aie_columns_4-tile_size_512-scalar_factor_3.0]✅ 5/5166.260.08n/a
test_axpy[input_length_2048-num_aie_columns_8-tile_size_256-scalar_factor_3.0]✅ 5/5173.320.08n/a
iron/operators/dequant
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_dequant[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-group_size_32]✅ 5/5174.020.03n/a
test_dequant[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-group_size_32]✅ 5/5156.260.03n/a
test_dequant[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-group_size_32]✅ 5/5158.520.03n/a
test_dequant[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-group_size_32]✅ 5/5174.800.03n/a
test_dequant[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-group_size_32]✅ 5/5171.100.03n/a
test_dequant[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-group_size_32]✅ 5/5161.360.03n/a
test_dequant[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256-group_size_32]✅ 5/5196.940.03n/a
test_dequant[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128-group_size_32]✅ 5/5224.260.02n/a
iron/operators/elementwise_add
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_elementwise_add[input_length_2048-num_aie_columns_1-tile_size_2048]✅ 5/5157.560.08n/a
test_elementwise_add[input_length_2048-num_aie_columns_2-tile_size_1024]✅ 5/5168.600.07n/a
test_elementwise_add[input_length_2048-num_aie_columns_4-tile_size_512]✅ 5/5176.100.07n/a
test_elementwise_add[input_length_2048-num_aie_columns_8-tile_size_256]✅ 5/5206.260.06n/a
iron/operators/elementwise_mul
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_elementwise_mul[input_length_2048-num_aie_columns_1-tile_size_2048]✅ 5/5193.360.06n/a
test_elementwise_mul[input_length_2048-num_aie_columns_2-tile_size_1024]✅ 5/5186.660.07n/a
test_elementwise_mul[input_length_2048-num_aie_columns_4-tile_size_512]✅ 5/5196.020.06n/a
test_elementwise_mul[input_length_2048-num_aie_columns_8-tile_size_256]✅ 5/5193.520.07n/a
iron/operators/flm/dequant
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_gate_up_interleaved_blob[iter0]✅ 1/1n/an/an/a
test_gate_up_interleaved_blob[iter1]✅ 1/1n/an/an/a
test_gate_up_interleaved_blob[iter2]✅ 1/1n/an/an/a
test_gate_up_interleaved_blob[iter3]✅ 1/1n/an/an/a
test_gate_up_interleaved_blob[iter4]✅ 1/1n/an/an/a
test_large_k_shapes[K_4096-N_1536]✅ 5/5n/an/an/a
test_large_k_shapes[K_6144-N_1536]✅ 5/5n/an/an/a
test_matches_reference[K_1024-N_128]✅ 5/5n/an/an/a
test_matches_reference[K_1024-N_512]✅ 5/5n/an/an/a
test_matches_reference[K_1536-N_640]✅ 5/5n/an/an/a
test_matches_reference[K_2048-N_256]✅ 5/5n/an/an/a
test_one_xclbin_serves_every_shape[iter0]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter1]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter2]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter3]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter4]✅ 1/1n/an/an/a
test_output_feeds_gemm_unchanged[iter0]✅ 1/1n/an/an/a
test_output_feeds_gemm_unchanged[iter1]✅ 1/1n/an/an/a
test_output_feeds_gemm_unchanged[iter2]✅ 1/1n/an/an/a
test_output_feeds_gemm_unchanged[iter3]✅ 1/1n/an/an/a
test_output_feeds_gemm_unchanged[iter4]✅ 1/1n/an/an/a
test_rejects_unservable_shapes[K_1000-N_128-exc_-match_multiple of]✅ 5/5n/an/an/a
test_rejects_unservable_shapes[K_1024-N_100-exc_-match_multiple of]✅ 5/5n/an/an/a
test_rejects_unservable_shapes[K_512-N_128-exc_-match_tile_n]✅ 5/5n/an/an/a
iron/operators/flm/gemm
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_artifact_stem_differs_from_generic_gemm[M_256-K_512-N_1024]✅ 5/5n/an/an/a
test_artifact_stem_differs_from_generic_gemm[M_512-K_1024-N_2048]✅ 5/5n/an/an/a
test_gemm[M_256-K_512-N_1024-epilogue_gelu-clamp_None-rounding_conv_even]✅ 5/5423.403.36655.88
test_gemm[M_256-K_512-N_1024-epilogue_none-clamp_(-2.0, 2.0)-rounding_conv_even]✅ 5/5368.163.80741.48
test_gemm[M_256-K_512-N_1024-epilogue_none-clamp_None-rounding_conv_even]✅ 5/5321.864.47871.53
test_gemm[M_256-K_512-N_1024-epilogue_none-clamp_None-rounding_floor]✅ 5/5309.664.52881.29
test_gemm[M_256-K_512-N_1024-epilogue_silu-clamp_None-rounding_conv_even]✅ 5/5407.903.53688.41
test_gemm[M_256-K_512-N_128-epilogue_none-clamp_None-rounding_conv_even]✅ 5/5338.821.26105.67
test_gemm[M_256-K_512-N_1536-epilogue_none-clamp_None-rounding_conv_even]✅ 5/5343.745.761200.34
test_gemm[M_512-K_1024-N_2048-epilogue_none-clamp_None-rounding_conv_even]✅ 5/5399.9614.005459.49
test_gemm_split_leg_bounds[iter0]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds[iter1]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds[iter2]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds[iter3]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds[iter4]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter0]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter1]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter2]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter3]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter4]✅ 1/1n/an/an/a
test_gemm_tile_options[tn128-ma64-default]✅ 5/5n/an/an/a
test_gemm_tile_options[tn16-ma64-default]✅ 5/5n/an/an/a
test_gemm_tile_options[tn32-ma64-default]✅ 5/5n/an/an/a
test_gemm_tile_options[tn64-ma32-default]✅ 5/5n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter0]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter1]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter2]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter3]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter4]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter0]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter1]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter2]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter3]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter4]✅ 1/1n/an/an/a
iron/operators/gelu
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_gelu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5184.800.04n/a
test_gelu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5152.740.06n/a
test_gelu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5169.980.05n/a
test_gelu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5171.280.05n/a
test_gelu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5174.280.05n/a
test_gelu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5190.080.04n/a
test_gelu[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256]✅ 5/5211.640.04n/a
test_gelu[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128]✅ 5/5214.100.04n/a
iron/operators/gemm
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_gemm[M_1792-K_896-N_1152-num_aie_columns_8-b_col_maj_False-c_col_maj_True-m_64-k_32-n_48-trace_size_0-partition_N_1]✅ 5/52278.264.181645.07
test_gemm[M_192-K_384-N_64-num_aie_columns_4-b_col_maj_False-c_col_maj_False-m_48-k_96-n_16-trace_size_0-partition_N_1]✅ 5/5228.221.0343.92
test_gemm[M_192-K_384-N_64-num_aie_columns_4-b_col_maj_True-c_col_maj_True-m_48-k_96-n_16-trace_size_0-partition_N_1]✅ 5/5230.940.9942.35
test_gemm[M_2048-K_2048-N_2048-num_aie_columns_1-b_col_maj_False-c_col_maj_False-m_64-k_64-n_64-trace_size_0-partition_N_1]✅ 5/547837.860.53359.13
test_gemm[M_2048-K_2048-N_2048-num_aie_columns_2-b_col_maj_True-c_col_maj_False-m_64-k_64-n_64-trace_size_0-partition_N_1]✅ 5/527865.480.90616.54
test_gemm[M_2048-K_2048-N_2048-num_aie_columns_8-b_col_maj_True-c_col_maj_True-m_64-k_64-n_64-trace_size_0-partition_N_1]✅ 5/57821.623.222197.37
test_gemm[M_384-K_1536-N_1792-num_aie_columns_4-b_col_maj_True-c_col_maj_False-m_32-k_48-n_64-trace_size_0-partition_N_1]✅ 5/52310.803.56932.83
test_gemm[M_64-K_512-N_256-num_aie_columns_4-b_col_maj_True-c_col_maj_False-m_16-k_64-n_64-trace_size_0-partition_N_4]✅ 5/53791.720.3518.70
test_gemm[M_896-K_1792-N_640-num_aie_columns_8-b_col_maj_False-c_col_maj_True-m_32-k_64-n_80-trace_size_0-partition_N_1]✅ 5/51496.084.611425.15
iron/operators/gemv
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_gemv[M_128-K_128-num_aie_columns_1-tile_size_input_32-tile_size_output_128]✅ 5/5n/a0.200.20
test_gemv[M_2048-K_8192-num_aie_columns_1-tile_size_input_1-tile_size_output_2048]✅ 5/5n/a11.7911.79
test_gemv[M_2048-K_8192-num_aie_columns_2-tile_size_input_1-tile_size_output_1024]✅ 5/5n/a23.5923.58
test_gemv[M_2048-K_8192-num_aie_columns_4-tile_size_input_1-tile_size_output_512]✅ 5/5n/a38.6538.62
test_gemv[M_2048-K_8192-num_aie_columns_8-tile_size_input_1-tile_size_output_256]✅ 5/5n/a43.1943.16
test_gemv[M_8192-K_2048-num_aie_columns_1-tile_size_input_4-tile_size_output_1024]✅ 5/5n/a13.3413.34
test_gemv[M_8192-K_2048-num_aie_columns_2-tile_size_input_4-tile_size_output_1024]✅ 5/5n/a24.0724.05
test_gemv[M_8192-K_2048-num_aie_columns_4-tile_size_input_4-tile_size_output_1024]✅ 5/5n/a40.5840.55
test_gemv[M_8192-K_2048-num_aie_columns_8-tile_size_input_4-tile_size_output_1024]✅ 5/5n/a43.5943.56
test_gemv_batched[M_1024-K_1024-num_aie_columns_1-tile_size_input_1-tile_size_output_64-num_batches_2]✅ 5/5n/a8.708.68
test_gemv_batched[M_1026-K_64-num_aie_columns_1-tile_size_input_1-tile_size_output_2-num_batches_2]✅ 5/5n/a0.850.83
test_gemv_batched[M_256-K_128-num_aie_columns_1-tile_size_input_1-tile_size_output_256-num_batches_4]✅ 5/5n/a1.051.04
test_gemv_batched[M_256-K_128-num_aie_columns_8-tile_size_input_1-tile_size_output_32-num_batches_100]✅ 5/5n/a15.7115.53
test_gemv_batched[M_448-K_64-num_aie_columns_8-tile_size_input_1-tile_size_output_56-num_batches_192]✅ 5/5n/a12.1011.89
test_gemv_batched[M_512-K_64-num_aie_columns_8-tile_size_input_4-tile_size_output_64-num_batches_32]✅ 5/5n/a6.906.79
test_gemv_batched[M_64-K_1536-num_aie_columns_1-tile_size_input_1-tile_size_output_64-num_batches_8]✅ 5/5n/a5.715.62
test_gemv_gelu[M_128-K_128-num_aie_columns_1-tile_size_input_32-tile_size_output_128]✅ 5/5n/a0.210.21
test_gemv_gelu[M_2048-K_8192-num_aie_columns_1-tile_size_input_1-tile_size_output_2048]✅ 5/5n/a12.3112.31
test_gemv_gelu[M_8192-K_2048-num_aie_columns_1-tile_size_input_4-tile_size_output_1024]✅ 5/5n/a11.6911.68
iron/operators/layer_norm
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_layer_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5174.500.05n/a
test_layer_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5215.420.04n/a
test_layer_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5179.800.05n/a
test_layer_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5177.720.05n/a
test_layer_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5183.220.05n/a
test_layer_norm[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5216.520.04n/a
test_layer_norm[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256]✅ 5/5203.840.04n/a
test_layer_norm[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128]✅ 5/5230.240.04n/a
iron/operators/leaky_relu
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.01]✅ 5/5166.100.05n/a
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.1]✅ 5/5165.120.05n/a
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.25]✅ 5/5160.280.05n/a
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-alpha_0.01]✅ 5/5158.560.05n/a
test_leaky_relu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-alpha_0.01]✅ 5/5165.420.05n/a
test_leaky_relu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-alpha_0.01]✅ 5/5219.080.04n/a
test_leaky_relu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-alpha_0.01]✅ 5/5159.140.05n/a
test_leaky_relu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-alpha_0.01]✅ 5/5191.420.04n/a
test_leaky_relu[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256-alpha_0.01]✅ 5/5201.480.04n/a
test_leaky_relu[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128-alpha_0.01]✅ 5/5232.400.04n/a
iron/operators/mem_copy
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_mem_copy[input_length_2048-num_cores_1-num_channels_1-bypass_False-tile_size_2048]✅ 5/5157.380.05n/a
test_mem_copy[input_length_2048-num_cores_16-num_channels_2-bypass_False-tile_size_128]✅ 5/5226.460.04n/a
test_mem_copy[input_length_2048-num_cores_2-num_channels_1-bypass_False-tile_size_1024]✅ 5/5150.900.06n/a
test_mem_copy[input_length_2048-num_cores_2-num_channels_2-bypass_False-tile_size_1024]✅ 5/5153.640.06n/a
test_mem_copy[input_length_2048-num_cores_4-num_channels_1-bypass_False-tile_size_512]✅ 5/5179.860.05n/a
test_mem_copy[input_length_2048-num_cores_4-num_channels_2-bypass_False-tile_size_512]✅ 5/5170.280.05n/a
test_mem_copy[input_length_2048-num_cores_8-num_channels_1-bypass_False-tile_size_256]✅ 5/5205.200.04n/a
test_mem_copy[input_length_2048-num_cores_8-num_channels_2-bypass_False-tile_size_256]✅ 5/5173.340.05n/a
iron/operators/mha
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_arg_spec_matches_design_shapes[seq_len_16384-dim_64-num_heads_1-num_pipelines_8-num_kv_heads_0]✅ 5/5n/an/an/a
test_arg_spec_matches_design_shapes[seq_len_16384-dim_64-num_heads_8-num_pipelines_8-num_kv_heads_2]✅ 5/5n/an/an/a
test_mha[seq_len_16384-dim_64-num_heads_1-num_pipelines_8-num_kv_heads_0]✅ 5/552433.400.16n/a
iron/operators/relu
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5172.200.05n/a
test_relu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5222.320.04n/a
test_relu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5181.380.05n/a
test_relu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5180.140.05n/a
test_relu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5172.360.05n/a
test_relu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5163.580.05n/a
test_relu[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256]✅ 5/5170.140.05n/a
test_relu[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128]✅ 5/5227.140.04n/a
iron/operators/repeat
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_cols_without_a_legal_split_is_rejected[cols_1031-why_prime > 1023: the only divisors are 1 and cols, neither legal]✅ 5/5n/an/an/a
test_cols_without_a_legal_split_is_rejected[cols_2062-why_2 x 1031: the only word-aligned chunk leaves a 1031-wide chunk count]✅ 5/5n/an/an/a
test_cols_without_a_legal_split_is_rejected[cols_513-why_odd: every divisor is odd, so no chunk is a whole 32-bit word]✅ 5/5n/an/an/a
test_repeat[rows_4-cols_1024-repeat_2-transfer_size_None]✅ 5/5201.200.13n/a
test_repeat[rows_8-cols_512-repeat_4-transfer_size_64]✅ 5/5174.780.24n/a
test_repeat[rows_8-cols_64-repeat_4-transfer_size_None]✅ 5/5159.500.03n/a
iron/operators/rms_norm
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-weighted_False]✅ 5/5144.880.06n/a
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-weighted_True]✅ 5/5163.220.08n/a
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-weighted_False]✅ 5/5153.040.06n/a
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-weighted_True]✅ 5/5167.580.06n/a
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-weighted_False]✅ 5/5155.820.05n/a
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-weighted_True]✅ 5/5159.580.07n/a
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-weighted_False]✅ 5/5161.020.05n/a
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-weighted_True]✅ 5/5191.020.05n/a
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-weighted_False]✅ 5/5161.180.05n/a
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-weighted_True]✅ 5/5164.040.06n/a
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-weighted_False]✅ 5/5203.360.04n/a
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-weighted_True]✅ 5/5205.560.04n/a
test_rms_norm[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256-weighted_False]✅ 5/5181.800.05n/a
test_rms_norm[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256-weighted_True]✅ 5/5188.740.05n/a
test_rms_norm[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128-weighted_False]✅ 5/5210.180.04n/a
iron/operators/rope
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_1-method_type_0]✅ 5/5184.600.54n/a
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_2-method_type_0]✅ 5/5185.200.54n/a
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_4-method_type_0]✅ 5/5198.360.52n/a
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_8-method_type_0]✅ 5/5175.300.58n/a
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_1-method_type_0]✅ 5/5183.200.40n/a
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_2-method_type_0]✅ 5/5193.540.39n/a
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_4-method_type_0]✅ 5/5188.140.40n/a
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_8-method_type_0]✅ 5/5195.220.38n/a
iron/operators/sigmoid
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_sigmoid[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5168.060.05n/a
test_sigmoid[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5159.440.05n/a
test_sigmoid[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5159.180.05n/a
test_sigmoid[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5161.020.05n/a
test_sigmoid[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5167.700.05n/a
test_sigmoid[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5174.100.05n/a
test_sigmoid[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256]✅ 5/5165.560.05n/a
test_sigmoid[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128]✅ 5/5210.380.04n/a
iron/operators/silu
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_silu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5177.320.05n/a
test_silu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5162.480.05n/a
test_silu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5190.420.04n/a
test_silu[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256]✅ 5/5199.980.04n/a
iron/operators/softmax
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_1024]✅ 5/5190.420.72n/a
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_2048]✅ 5/5193.780.68n/a
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5174.480.78n/a
iron/operators/strided_copy
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_strided_copy[chunked_transfer]✅ 5/5194.120.02n/a
test_strided_copy[contiguous]✅ 5/5179.280.02n/a
test_strided_copy[four_channels]✅ 5/5181.960.02n/a
test_strided_copy[kv_slot0]✅ 5/5172.840.77n/a
test_strided_copy[kv_slot5]✅ 5/5169.760.79n/a
test_strided_copy[kv_slot5_four_channels]✅ 5/5159.380.85n/a
test_strided_copy[kv_slot5_two_channels]✅ 5/5175.080.76n/a
test_strided_copy[kv_slot_last]✅ 5/5183.280.74n/a
test_strided_copy[two_channels]✅ 5/5167.340.02n/a
test_strided_copy[two_channels_chunked]✅ 5/5162.900.03n/a
test_strided_copy_cache_offset_parameter[iter0]✅ 1/1n/an/an/a
test_strided_copy_cache_offset_parameter[iter1]✅ 1/1n/an/an/a
test_strided_copy_cache_offset_parameter[iter2]✅ 1/1n/an/an/a
test_strided_copy_cache_offset_parameter[iter3]✅ 1/1n/an/an/a
test_strided_copy_cache_offset_parameter[iter4]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter0]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter1]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter2]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter3]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter4]✅ 1/1n/an/an/a
iron/operators/swiglu_decode
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_swiglu_decode[embedding_dim_1024-hidden_dim_3584]✅ 5/5973.190.00n/a
test_swiglu_decode[embedding_dim_2048-hidden_dim_2048]✅ 5/51012.540.01n/a
iron/operators/swiglu_prefill
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_swiglu_prefill[seq_len_256-embedding_dim_2048-hidden_dim_2048-prio_accuracy_False-b_col_maj_False]✅ 5/52189.980.96n/a
test_swiglu_prefill[seq_len_256-embedding_dim_2048-hidden_dim_2048-prio_accuracy_False-b_col_maj_True]✅ 5/52360.430.89n/a
test_weight_layout_reaches_both_gemms[b_col_maj_False]✅ 5/5n/an/an/a
test_weight_layout_reaches_both_gemms[b_col_maj_True]✅ 5/5n/an/an/a
iron/operators/tanh
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_tanh[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5150.760.06n/a
test_tanh[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5166.240.05n/a
test_tanh[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5160.820.05n/a
test_tanh[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5173.100.05n/a
test_tanh[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5175.400.05n/a
test_tanh[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5201.240.04n/a
test_tanh[input_length_2048-num_aie_columns_8-num_channels_1-tile_size_256]✅ 5/5164.740.05n/a
test_tanh[input_length_2048-num_aie_columns_8-num_channels_2-tile_size_128]✅ 5/5217.100.04n/a
iron/operators/transpose
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_a_dimension_that_floors_to_zero_is_refused_by_name[M_2048-N_128-aie_columns_8-channels_1-m_256-n_32-bad_num_aie_columns]✅ 5/5n/an/an/a
test_a_dimension_that_floors_to_zero_is_refused_by_name[M_256-N_2048-aie_columns_1-channels_2-m_256-n_32-bad_num_channels]✅ 5/5n/an/an/a
test_a_tiling_that_fits_is_still_accepted[aie_columns_1]✅ 5/5n/an/an/a
test_a_tiling_that_fits_is_still_accepted[aie_columns_2]✅ 5/5n/an/an/a
test_a_tiling_that_fits_is_still_accepted[aie_columns_4]✅ 5/5n/an/an/a
test_transpose[M_2048-N_64-aie_columns_1-channels_1-m_64-n_64-s_8-num_batches_1]✅ 5/5910.020.58n/a
test_transpose[M_2048-N_64-aie_columns_1-channels_1-m_64-n_64-s_8-num_batches_2]✅ 5/51768.320.60n/a
test_transpose[M_2048-N_64-aie_columns_1-channels_2-m_64-n_64-s_8-num_batches_1]✅ 5/5559.380.94n/a

Trends:

Performance trends

Operators dropped: swiglu_prefill_stream

Krackan - Examples

IRON

Tested on 2026_09_28_22_36_30 at commit 72976ed.

iron/applications/llama_3.2_1b
TestChecksTTFT (mean)TPS (mean)
test_llama_3_2_1b[llama_3.2_1b_prompt_1024_tokens_1]✅ 5/52.09n/a
test_llama_3_2_1b[llama_3.2_1b_prompt_1024_tokens_40]✅ 5/52.123.16
test_llama_3_2_1b[llama_3.2_1b_prompt_13_tokens_1]✅ 5/52.05n/a
test_llama_3_2_1b[llama_3.2_1b_prompt_13_tokens_40]✅ 5/52.043.13

Trends:

Performance trends

No benchmark moved by 5% and by more than 2x the spread the runs measured.

Phoenix - Small

IRON

Tested on 2026_09_28_22_23_15 at commit 72976ed.

iron/operators/axpy
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_axpy[input_length_2048-num_aie_columns_1-tile_size_2048-scalar_factor_3.0]✅ 5/5372.980.03n/a
test_axpy[input_length_2048-num_aie_columns_2-tile_size_1024-scalar_factor_3.0]✅ 5/5440.420.03n/a
test_axpy[input_length_2048-num_aie_columns_4-tile_size_512-scalar_factor_3.0]✅ 5/5458.680.03n/a
iron/operators/dequant
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_dequant[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-group_size_32]✅ 5/5311.520.02n/a
test_dequant[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-group_size_32]✅ 5/5355.180.02n/a
test_dequant[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-group_size_32]✅ 5/5343.360.02n/a
test_dequant[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-group_size_32]✅ 5/5325.720.02n/a
test_dequant[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-group_size_32]✅ 5/5277.060.02n/a
test_dequant[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-group_size_32]✅ 5/5440.400.01n/a
iron/operators/elementwise_add
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_elementwise_add[input_length_2048-num_aie_columns_1-tile_size_2048]✅ 5/5472.720.03n/a
test_elementwise_add[input_length_2048-num_aie_columns_2-tile_size_1024]✅ 5/5347.880.04n/a
test_elementwise_add[input_length_2048-num_aie_columns_4-tile_size_512]✅ 5/5444.400.03n/a
iron/operators/elementwise_mul
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_elementwise_mul[input_length_2048-num_aie_columns_1-tile_size_2048]✅ 5/5428.520.03n/a
test_elementwise_mul[input_length_2048-num_aie_columns_2-tile_size_1024]✅ 5/5967.560.03n/a
test_elementwise_mul[input_length_2048-num_aie_columns_4-tile_size_512]✅ 5/5390.540.03n/a
iron/operators/flm/dequant
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_rejects_unservable_shapes[K_1000-N_128-exc_-match_multiple of]✅ 5/5n/an/an/a
test_rejects_unservable_shapes[K_1024-N_100-exc_-match_multiple of]✅ 5/5n/an/an/a
iron/operators/flm/gemm
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_artifact_stem_differs_from_generic_gemm[M_256-K_512-N_1024]✅ 5/5n/an/an/a
test_artifact_stem_differs_from_generic_gemm[M_512-K_1024-N_2048]✅ 5/5n/an/an/a
test_gemm[M_256-K_512-N_128-epilogue_none-clamp_None-rounding_conv_even]✅ 5/5775.380.6345.95
test_gemm[M_256-K_512-N_256-epilogue_none-clamp_None-rounding_conv_even]✅ 5/5649.601.03105.27
test_gemm[M_256-K_512-N_320-epilogue_none-clamp_None-rounding_conv_even]✅ 5/5684.021.12125.00
test_gemm[M_256-K_512-N_512-epilogue_gelu-clamp_None-rounding_conv_even]✅ 5/5889.261.23157.28
test_gemm[M_256-K_512-N_512-epilogue_none-clamp_(-2.0, 2.0)-rounding_conv_even]✅ 5/5671.241.59203.73
test_gemm[M_256-K_512-N_512-epilogue_none-clamp_None-rounding_floor]✅ 5/5712.541.52194.12
test_gemm[M_256-K_512-N_512-epilogue_silu-clamp_None-rounding_conv_even]✅ 5/51061.321.24159.22
test_gemm[M_256-K_512-N_64-epilogue_none-clamp_None-rounding_conv_even]✅ 5/51265.260.4621.45
test_gemm[M_512-K_1024-N_512-epilogue_none-clamp_None-rounding_conv_even]✅ 5/51998.441.50307.37
test_gemm_split_leg_bounds[iter0]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds[iter1]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds[iter2]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds[iter3]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds[iter4]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter0]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter1]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter2]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter3]✅ 1/1n/an/an/a
test_gemm_split_leg_bounds_runs[iter4]✅ 1/1n/an/an/a
test_gemm_tile_options[tn128-ma32-default]✅ 5/5n/an/an/a
test_gemm_tile_options[tn16-ma64-default]✅ 5/5n/an/an/a
test_gemm_tile_options[tn32-ma64-default]✅ 5/5n/an/an/a
test_gemm_tile_options[tn64-ma32-default]✅ 5/5n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter0]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter1]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter2]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter3]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_clamp_bound[iter4]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter0]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter1]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter2]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter3]✅ 1/1n/an/an/a
test_one_xclbin_serves_every_shape[iter4]✅ 1/1n/an/an/a
iron/operators/gelu
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_gelu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5600.340.02n/a
test_gelu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5453.260.02n/a
test_gelu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5381.920.02n/a
test_gelu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5393.720.02n/a
test_gelu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5416.060.02n/a
test_gelu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5471.360.02n/a
iron/operators/gemm
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_gemm[M_192-K_384-N_64-num_aie_columns_4-b_col_maj_False-c_col_maj_False-m_48-k_96-n_16-trace_size_0-partition_N_1]✅ 5/5536.280.4318.19
test_gemm[M_192-K_384-N_64-num_aie_columns_4-b_col_maj_True-c_col_maj_True-m_48-k_96-n_16-trace_size_0-partition_N_1]✅ 5/5737.300.4318.14
test_gemm[M_2048-K_2048-N_2048-num_aie_columns_1-b_col_maj_False-c_col_maj_False-m_64-k_64-n_64-trace_size_0-partition_N_1]✅ 5/582296.340.31208.77
test_gemm[M_2048-K_2048-N_2048-num_aie_columns_2-b_col_maj_True-c_col_maj_False-m_64-k_64-n_64-trace_size_0-partition_N_1]✅ 5/522197.581.13774.11
test_gemm[M_384-K_1536-N_1792-num_aie_columns_4-b_col_maj_True-c_col_maj_False-m_32-k_48-n_64-trace_size_0-partition_N_1]✅ 5/55318.721.86486.89
test_gemm[M_64-K_512-N_256-num_aie_columns_4-b_col_maj_True-c_col_maj_False-m_16-k_64-n_64-trace_size_0-partition_N_4]✅ 5/57461.780.179.38
iron/operators/gemv
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_gemv[M_128-K_128-num_aie_columns_1-tile_size_input_32-tile_size_output_128]✅ 5/5n/a0.110.11
test_gemv[M_2048-K_8192-num_aie_columns_1-tile_size_input_1-tile_size_output_2048]✅ 5/5n/a3.673.67
test_gemv[M_2048-K_8192-num_aie_columns_2-tile_size_input_1-tile_size_output_1024]✅ 5/5n/a5.765.76
test_gemv[M_2048-K_8192-num_aie_columns_4-tile_size_input_1-tile_size_output_512]✅ 5/5n/a9.309.29
test_gemv[M_8192-K_2048-num_aie_columns_1-tile_size_input_4-tile_size_output_1024]✅ 5/5n/a3.633.63
test_gemv[M_8192-K_2048-num_aie_columns_2-tile_size_input_4-tile_size_output_1024]✅ 5/5n/a6.276.27
test_gemv[M_8192-K_2048-num_aie_columns_4-tile_size_input_4-tile_size_output_1024]✅ 5/5n/a8.438.43
test_gemv_batched[M_1024-K_1024-num_aie_columns_1-tile_size_input_1-tile_size_output_64-num_batches_2]✅ 5/5n/a2.652.65
test_gemv_batched[M_1026-K_64-num_aie_columns_1-tile_size_input_1-tile_size_output_2-num_batches_2]✅ 5/5n/a0.250.24
test_gemv_batched[M_256-K_128-num_aie_columns_1-tile_size_input_1-tile_size_output_256-num_batches_4]✅ 5/5n/a0.510.50
test_gemv_batched[M_64-K_1536-num_aie_columns_1-tile_size_input_1-tile_size_output_64-num_batches_8]✅ 5/5n/a1.621.59
test_gemv_gelu[M_128-K_128-num_aie_columns_1-tile_size_input_32-tile_size_output_128]❌ 0/5n/an/an/a
test_gemv_gelu[M_2048-K_8192-num_aie_columns_1-tile_size_input_1-tile_size_output_2048]❌ 0/5n/an/an/a
test_gemv_gelu[M_8192-K_2048-num_aie_columns_1-tile_size_input_4-tile_size_output_1024]❌ 0/5n/an/an/a
iron/operators/layer_norm
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_layer_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5465.960.02n/a
test_layer_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5433.420.02n/a
test_layer_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5364.180.02n/a
test_layer_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5387.780.02n/a
test_layer_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5390.600.02n/a
test_layer_norm[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5434.560.02n/a
iron/operators/leaky_relu
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.01]✅ 5/5313.500.03n/a
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.1]✅ 5/5317.100.03n/a
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-alpha_0.25]✅ 5/5313.180.03n/a
test_leaky_relu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-alpha_0.01]✅ 5/5346.700.03n/a
test_leaky_relu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-alpha_0.01]✅ 5/5432.520.02n/a
test_leaky_relu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-alpha_0.01]✅ 5/5675.500.01n/a
test_leaky_relu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-alpha_0.01]✅ 5/5377.620.02n/a
test_leaky_relu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-alpha_0.01]✅ 5/5476.940.02n/a
iron/operators/mem_copy
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_mem_copy[input_length_2048-num_cores_1-num_channels_1-bypass_False-tile_size_2048]✅ 5/5340.240.03n/a
test_mem_copy[input_length_2048-num_cores_2-num_channels_1-bypass_False-tile_size_1024]✅ 5/5432.360.02n/a
test_mem_copy[input_length_2048-num_cores_2-num_channels_2-bypass_False-tile_size_1024]✅ 5/5524.740.02n/a
test_mem_copy[input_length_2048-num_cores_4-num_channels_1-bypass_False-tile_size_512]✅ 5/5493.540.02n/a
test_mem_copy[input_length_2048-num_cores_4-num_channels_2-bypass_False-tile_size_512]✅ 5/5405.460.02n/a
test_mem_copy[input_length_2048-num_cores_8-num_channels_2-bypass_False-tile_size_256]✅ 5/5567.060.02n/a
iron/operators/mha
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_arg_spec_matches_design_shapes[seq_len_16384-dim_64-num_heads_1-num_pipelines_8-num_kv_heads_0]✅ 5/5n/an/an/a
test_arg_spec_matches_design_shapes[seq_len_16384-dim_64-num_heads_8-num_pipelines_8-num_kv_heads_2]✅ 5/5n/an/an/a
iron/operators/relu
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_relu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5315.500.03n/a
test_relu[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5390.220.02n/a
test_relu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5373.740.02n/a
test_relu[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5421.040.02n/a
test_relu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5430.700.02n/a
test_relu[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5534.500.02n/a
iron/operators/repeat
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_cols_without_a_legal_split_is_rejected[cols_1031-why_prime > 1023: the only divisors are 1 and cols, neither legal]✅ 5/5n/an/an/a
test_cols_without_a_legal_split_is_rejected[cols_2062-why_2 x 1031: the only word-aligned chunk leaves a 1031-wide chunk count]✅ 5/5n/an/an/a
test_cols_without_a_legal_split_is_rejected[cols_513-why_odd: every divisor is odd, so no chunk is a whole 32-bit word]✅ 5/5n/an/an/a
test_repeat[rows_4-cols_1024-repeat_2-transfer_size_None]✅ 5/5298.080.09n/a
test_repeat[rows_8-cols_512-repeat_4-transfer_size_64]✅ 5/5269.900.15n/a
test_repeat[rows_8-cols_64-repeat_4-transfer_size_None]✅ 5/5334.640.02n/a
iron/operators/rms_norm
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-weighted_False]✅ 5/5274.000.03n/a
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048-weighted_True]✅ 5/5766.340.02n/a
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-weighted_False]✅ 5/5459.760.02n/a
test_rms_norm[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024-weighted_True]✅ 5/5407.200.03n/a
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-weighted_False]✅ 5/5440.240.02n/a
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024-weighted_True]✅ 5/5387.580.03n/a
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-weighted_False]✅ 5/5790.080.02n/a
test_rms_norm[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512-weighted_True]✅ 5/5809.420.02n/a
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-weighted_False]✅ 5/5438.500.02n/a
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512-weighted_True]✅ 5/5392.740.02n/a
test_rms_norm[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256-weighted_False]✅ 5/5410.920.02n/a
iron/operators/rope
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_1-method_type_0]✅ 5/5356.020.32n/a
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_2-method_type_0]✅ 5/5399.640.27n/a
test_rope[rows_32-cols_512-angle_rows_32-aie_columns_4-method_type_0]✅ 5/5508.880.20n/a
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_1-method_type_0]✅ 5/5316.560.25n/a
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_2-method_type_0]✅ 5/5301.400.27n/a
test_rope[rows_32-cols_512-angle_rows_8-aie_columns_4-method_type_0]✅ 5/5567.180.13n/a
iron/operators/sigmoid
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_sigmoid[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5425.980.02n/a
test_sigmoid[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5349.160.03n/a
test_sigmoid[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5407.060.02n/a
test_sigmoid[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5462.340.02n/a
test_sigmoid[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5358.620.03n/a
test_sigmoid[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5464.600.02n/a
iron/operators/silu
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_silu[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5300.020.03n/a
test_silu[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5372.260.02n/a
test_silu[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5334.900.03n/a
iron/operators/softmax
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_1024]✅ 5/5513.780.27n/a
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_2048]✅ 5/5371.020.39n/a
test_softmax[input_length_32768-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5559.600.27n/a
iron/operators/strided_copy
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_strided_copy[chunked_transfer]✅ 5/5438.380.01n/a
test_strided_copy[contiguous]✅ 5/5369.360.01n/a
test_strided_copy[four_channels]✅ 5/5426.700.01n/a
test_strided_copy[kv_slot0]✅ 5/5435.020.32n/a
test_strided_copy[kv_slot5]✅ 5/5277.220.49n/a
test_strided_copy[kv_slot5_four_channels]✅ 5/5437.020.32n/a
test_strided_copy[kv_slot5_two_channels]✅ 5/5385.480.36n/a
test_strided_copy[kv_slot_last]✅ 5/5280.160.47n/a
test_strided_copy[two_channels]✅ 5/5363.960.01n/a
test_strided_copy[two_channels_chunked]✅ 5/5432.260.01n/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter0]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter1]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter2]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter3]✅ 1/1n/an/an/a
test_transfer_size_not_dividing_per_channel_share_is_rejected[iter4]✅ 1/1n/an/an/a
iron/operators/swiglu_decode
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_swiglu_decode[embedding_dim_1024-hidden_dim_3584]✅ 5/514018.250.00n/a
test_swiglu_decode[embedding_dim_2048-hidden_dim_2048]✅ 5/511370.280.00n/a
iron/operators/swiglu_prefill
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_swiglu_prefill[seq_len_256-embedding_dim_2048-hidden_dim_2048-prio_accuracy_False-b_col_maj_False]✅ 5/524569.030.09n/a
test_swiglu_prefill[seq_len_256-embedding_dim_2048-hidden_dim_2048-prio_accuracy_False-b_col_maj_True]✅ 5/521028.430.10n/a
test_weight_layout_reaches_both_gemms[b_col_maj_False]✅ 5/5n/an/an/a
test_weight_layout_reaches_both_gemms[b_col_maj_True]✅ 5/5n/an/an/a
iron/operators/tanh
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_tanh[input_length_2048-num_aie_columns_1-num_channels_1-tile_size_2048]✅ 5/5327.860.03n/a
test_tanh[input_length_2048-num_aie_columns_1-num_channels_2-tile_size_1024]✅ 5/5337.280.03n/a
test_tanh[input_length_2048-num_aie_columns_2-num_channels_1-tile_size_1024]✅ 5/5308.160.03n/a
test_tanh[input_length_2048-num_aie_columns_2-num_channels_2-tile_size_512]✅ 5/5734.980.02n/a
test_tanh[input_length_2048-num_aie_columns_4-num_channels_1-tile_size_512]✅ 5/5286.640.03n/a
test_tanh[input_length_2048-num_aie_columns_4-num_channels_2-tile_size_256]✅ 5/5397.120.02n/a
iron/operators/transpose
TestChecksLatency (mean)Bandwidth (mean)Throughput (mean)
test_a_dimension_that_floors_to_zero_is_refused_by_name[M_2048-N_128-aie_columns_8-channels_1-m_256-n_32-bad_num_aie_columns]✅ 5/5n/an/an/a
test_a_dimension_that_floors_to_zero_is_refused_by_name[M_256-N_2048-aie_columns_1-channels_2-m_256-n_32-bad_num_channels]✅ 5/5n/an/an/a
test_a_tiling_that_fits_is_still_accepted[aie_columns_1]✅ 5/5n/an/an/a
test_a_tiling_that_fits_is_still_accepted[aie_columns_2]✅ 5/5n/an/an/a
test_a_tiling_that_fits_is_still_accepted[aie_columns_4]✅ 5/5n/an/an/a
test_transpose[M_2048-N_64-aie_columns_1-channels_1-m_64-n_64-s_8-num_batches_1]✅ 5/5895.500.95n/a
test_transpose[M_2048-N_64-aie_columns_1-channels_1-m_64-n_64-s_8-num_batches_2]✅ 5/52583.240.53n/a
test_transpose[M_2048-N_64-aie_columns_1-channels_2-m_64-n_64-s_8-num_batches_1]✅ 5/5449.321.37n/a

Trends:

Performance trends

No benchmark moved by 5% and by more than 2x the spread the runs measured.

Phoenix - Examples

IRON

Tested on 2026_09_28_22_25_38 at commit 72976ed.

Trends:

Performance trends

No results.

Comment thread ci/scripts/build_pages.py Outdated
"""Build the benchmark history site from the CSVs on the results branch.

Reads every ``{arch}/{suite}/all.csv`` under a results root and writes a single
self-contained ``index.html``: one chart per operator, one line per

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's no longer one chart -- it's one per architecture (phoenix, krackan).

Comment thread ci/scripts/pr_comment.py Outdated
Comment on lines +19 to +24
SUITES = [
("krackan/small", "Krackan - Operators"),
("krackan/examples", "Krackan - Applications"),
("phoenix/small", "Phoenix - Operators"),
("phoenix/examples", "Phoenix - Applications"),
]

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move out into a common file

Comment thread ci/scripts/build_pages.py Outdated
Comment on lines +29 to +30
SUITES = ["small", "extensive", "examples"]
ARCHS = ["krackan", "phoenix"]

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move into a common file

Comment thread ci/scripts/pr_comment.py Outdated
Comment on lines +79 to +80
if args.pages_url:
lines += [f"[Full benchmark history]({args.pages_url})", ""]

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the link is super relevant since the results off of a branch (for which this PR comment exists) won't show up (right?) on that page.

Can we somehow get the results for branches published on a github page like .html that gets deleted after the branch gets merged so we could actually link something relevant here?

If not, I think we should remove the link.

A pull request from a fork controls its own jobs, so it controls every byte of
the artifact they upload. The commenting job holds a write token and read the
commit, the pull request number and the date out of that artifact, then
interpolated them into a shell command and into JavaScript source. A value of
`"; command; #` ran.

The commit and the pull request number now come from the API. The date comes
from the workflow run. The job extracts one member per artifact, `latest.csv`,
passes its arguments through the environment, and renders the report with the
code in its own checkout against `all.csv` on the results branch. Every test
name it prints passes through a function that cuts it to length and removes the
characters that end a table cell.

A suite that reported nothing is now named. A crashed suite read the same as a
suite that moved no benchmark.
The extensive workflow runs the default suite's tests too, so one commit
carries two measurements of every benched parametrization. Grouping by
architecture alone drew both on one axis under one commit label: 28 of the
Krackan identifiers and 8 of the Phoenix ones appear in both suites.

Each suite gets its own chart, with its own runs along the x axis.
A dispatch costs about 160 us. Seventeen of the marked shapes ran in under
250 us, so their 2-sigma spread reached 25% to 48% and no trend survived it.
Each operator now benchmarks a shape sized for its own limits: 2**23 elements
for the elementwise operators, 4096x512 for rope and softmax, 8192x512 for
transpose, 4Mi elements for strided_copy. flm/gemm keeps only its
milliseconds-long shapes. Every benched shape measured on NPU2 now runs for at
least 491 us.

GEMV printed "Latency: N us" where its pattern reads "Latency (us): N", so all
216 of its rows carried an empty latency and its charts showed bandwidth and
throughput alone. It prints what the other 24 test modules print.

A pattern that matches nothing leaves a column empty, and an empty column
disappears from a chart without failing anything. The session now names any
benched metric that a passing test declared and never printed.
Name one architecture and suite list in pretty_common, which build_pages.py and
pr_comment.py both read. The site's docstring now says one chart per
architecture and suite.

Drop the benchmark history link from the pull request comment. The site renders
the results branch, which only a push to a trunk branch writes, so a pull
request's own results never reach it.

Benchmark every llama parametrization.
@andrej
andrej marked this pull request as ready for review September 29, 2026 02:18
@andrej
andrej added this pull request to the merge queue Sep 29, 2026
Merged via the queue into devel with commit ba923db Sep 29, 2026
6 checks passed
@andrej
andrej deleted the ci-graph branch September 29, 2026 03:19
hunhoffe added a commit that referenced this pull request Oct 1, 2026
Brings in #220's remaining content (e93ecac), #223's bench marker and CI
pages/trend scripts, and #224's flm GEMM k tile. iron-next's operator layout
wins wherever devel edited files it had removed or collapsed:

- conftest.py keeps iron-next's collection and adds devel's Bench column
  and the report of benched tests that passed without a metric.
- flm/gemm takes k_tile as a param(array=True) on the collapsed op.py; it
  reaches the configuration and kernel-object names, -DMM_FUSED_TILE_K,
  the L2 tiles, the A taps and pack_b. Shipped pins it at 512. The bench
  shapes select on the device's architecture, since iron-next's get_params
  has no dev_name; test_gemm_k_tile runs K=256 and K=768 at k_tile=256.
- The per-operator test.py files, llama_3.2_1b and the old iron/common
  modules devel touched stay deleted; relative_build_dir.py goes with the
  AIEContext it tests.
- requirements.txt, README.md and AGENTS.md keep iron-next's side; AGENTS.md
  takes devel's CI and benchmark sections.

Co-Authored-By: Claude <noreply@anthropic.com>
hunhoffe added a commit that referenced this pull request Oct 1, 2026
devel's #223 tracks the parametrizations marked bench and names each by its
test directory. Here the operators share one test, catalog.py, so CI read
them all as one "catalog" operator. operator_name now takes a catalog row's
operator from its parametrization id, and a module under iron/lm or a flat
iron/operators file by its path.

Case gains bench=, which catalog.py turns into pytest.mark.bench. Sweep adds
one default-suite case of BENCH_ELEMENTS (2^23) at the widest grid and most
channels, devel's elementwise choice. The rest take devel's shapes: GEMM
2048^3, GEMV at every column with M*K >= 2048*8192, MHA at 16384, RoPE
4096x512, Softmax 4096x512, Transpose 8192x512, Copy 4 Mi, Repeat 2048*64,
and the Llama shapes of GQAContext and Sample. Emit finishes near the
dispatch cost at any size, so it is tracked on one case, as devel does for
such operators. Every Llama generation test is benched.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant