)]}'
{
  "commit": "08f0f579d57d7f86cd60aacf920b29e02eef61cd",
  "tree": "ecf54fdfc80348692c8ffc1c6d4cdd7556663763",
  "parents": [
    "de54be69d1d357c4395bf78db6b468d0d3ca4158"
  ],
  "author": {
    "name": "maxbartel",
    "email": "bartel@roofline.ai",
    "time": "Fri Oct 09 09:38:09 2026 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Oct 09 09:38:09 2026 +0200"
  },
  "message": "[iree-benchmark-module] Add dispatch timing rows (#24987)\n\nAdd `--dispatch_statistics` to report a per-function breakdown of\ndispatch time beneath each `iree-benchmark-module` benchmark. Rows\ninclude calls per model iteration and each function\u0027s share of total\ndispatch time, across participating devices and benchmark repetitions.\nThey appear in console, JSON, and CSV output, including\n`--benchmark_out` files and the Python wrapper\u0027s results.\n\nAfter each measured repetition, Google Benchmark reruns the registered\nbenchmark outside the measured interval with a HAL statistics session on\nevery device. Profiling uses the same function ABI, batch accounting,\nand asynchronous concurrency as measurement. These extra invocations can\nadvance model state. Output processing retains the measured pass\u0027s\noutputs, including snapshots of buffers that subsequent invocations can\noverwrite.\n\nConflicting device profiling, capture, and replay flags are rejected\nbefore sessions start or replay output is opened. The tooling profiling\nsession API accepts explicit options, and benchmark-module device\nprofiling covers all participating devices.\n\nExample with the included dispatch-statistics fixture:\n\n```sh\niree-compile \\\n  --iree-hal-target-device\u003dlocal \\\n  --iree-hal-local-target-device-backends\u003dllvm-cpu \\\n  tools/test/iree-benchmark-module-dispatch-statistics.mlir \\\n  -o /tmp/dispatch-statistics.vmfb\n\niree-benchmark-module \\\n  --module\u003d/tmp/dispatch-statistics.vmfb \\\n  --device\u003dlocal-task --task_topology_group_count\u003d2 \\\n  --function\u003dmain \\\n  --input\u003d64x64xf32\u003d1 --input\u003d64x64xf32\u003d1 --input\u003d64x32xf32\u003d1 \\\n  --benchmark_min_time\u003d0.1s --time_unit\u003dus --dispatch_statistics\n```\n\n\nExample output from a macOS arm64 run with two `local-task` workers\n(timings vary):\n\n```text\n------------------------------------------------------------------------------------------------------\nBenchmark                                            Time             CPU   Iterations UserCounters...\n------------------------------------------------------------------------------------------------------\nBM_main/process_time/real_time                    23.1 us         35.3 us         6181 items_per_second\u003d43.226k/s\nBM_main/main_dispatch_0_matmul_64x64x64_f32       8.17 us         12.1 us         6181 calls\u003d2 percent\u003d82.6871\nBM_main/main_dispatch_2_matmul_64x32x64_f32       1.71 us         3.21 us         6181 calls\u003d1 percent\u003d17.3129\n```\n\nThe 64×64 dispatch runs twice per model iteration, so its `Time`\nincludes both calls. `percent` is the share of total dispatch time; the\nfirst row reports end-to-end model latency. On this CPU backend, the\ndispatch rows\u0027 `CPU` column sums worker time across dispatch tiles.\n\nAssisted by AI.\n\n---------\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ae78f69c3d4562f10065911f58e9d9d20c140d07",
      "old_mode": 33188,
      "old_path": "docs/website/docs/developers/performance/benchmarking.md",
      "new_id": "6158a8b7ef6eaf31575e80eafb199266c0afaa07",
      "new_mode": 33188,
      "new_path": "docs/website/docs/developers/performance/benchmarking.md"
    },
    {
      "type": "modify",
      "old_id": "6b12b113d2dbdda62f582fdea6df9207ab9c3b47",
      "old_mode": 33188,
      "old_path": "runtime/bindings/python/tests/benchmark_lifecycle_test.py",
      "new_id": "dc6bc2f56fd1b36041d59502e581079eaa6f19a6",
      "new_mode": 33188,
      "new_path": "runtime/bindings/python/tests/benchmark_lifecycle_test.py"
    },
    {
      "type": "modify",
      "old_id": "a2b4fcec7576d677a27687b01ffc462790b2ba19",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/BUILD.bazel",
      "new_id": "578f46f77405dcb787e11bcc62516fc5838a4eb8",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "e0420a0e743f26ca1762a496e5b8a5b7406e8f00",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/CMakeLists.txt",
      "new_id": "3275a2ebf53b872447502c92670a9c39a9fd6dbd",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "4e10ab72ecd35934b3c14f9278190fb8af4ec5aa",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/context_util.c",
      "new_id": "c4170e7af7d2b7a13c592c1d589fd2933c33819b",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/context_util.c"
    },
    {
      "type": "modify",
      "old_id": "6dd186d4340feb9129b597b2fc30cc4552fb3979",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/context_util.h",
      "new_id": "640d47afdee151ec05f682073df1747e178fa0cc",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/context_util.h"
    },
    {
      "type": "modify",
      "old_id": "78c411ec389630d6d07b15eb76bca1f49b122c43",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/device_util.c",
      "new_id": "006298b09775d80fc20e525ca387fe3e3fac0b4b",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/device_util.c"
    },
    {
      "type": "modify",
      "old_id": "390ecf2e7ddbabf1e76d0bf68d62aa5371be7376",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/device_util.h",
      "new_id": "a6df8bd80e1b668d0f783567005d10fa4efe5275",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/device_util.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "504d34b5c6f098fe7622d25006d71c38c1acd209",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/device_util_test.cc"
    },
    {
      "type": "modify",
      "old_id": "20ddbc2384a2741009b4e97006fd309b9db26263",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/tooling/run_module.c",
      "new_id": "7209031dce8a8e0131c1041da1d9a24687ef6474",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/tooling/run_module.c"
    },
    {
      "type": "modify",
      "old_id": "7fe724ea6e42d98799c90a5917e229006f2c2625",
      "old_mode": 33188,
      "old_path": "tools/BUILD.bazel",
      "new_id": "078a07f9293e78a8f4f548525b893c224a61b153",
      "new_mode": 33188,
      "new_path": "tools/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "662ba56eaad71b721ef7b28c68092cabceb36218",
      "old_mode": 33188,
      "old_path": "tools/CMakeLists.txt",
      "new_id": "21cc7bd0f1338b054b3cbf2948f579d7593ed30e",
      "new_mode": 33188,
      "new_path": "tools/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "59ef0167f7131f4a1bfc2beca6246e193230c7e0",
      "old_mode": 33188,
      "old_path": "tools/iree-benchmark-executable-main.c",
      "new_id": "6a709e67d10d03a943d2aaefdf2164693e59100d",
      "new_mode": 33188,
      "new_path": "tools/iree-benchmark-executable-main.c"
    },
    {
      "type": "modify",
      "old_id": "c34cd0ea6626673f969a8532c0d1b33caf45df28",
      "old_mode": 33188,
      "old_path": "tools/iree-benchmark-module-main.cc",
      "new_id": "17d9ffff79ff78c932b5e2696855b616783060e7",
      "new_mode": 33188,
      "new_path": "tools/iree-benchmark-module-main.cc"
    },
    {
      "type": "modify",
      "old_id": "3ce91277b2c51b18229662f68232594a9b223f44",
      "old_mode": 33188,
      "old_path": "tools/iree-benchmark-replay-main.cc",
      "new_id": "6301a8e2a6da85fecf5fc33be1cf346910c260e7",
      "new_mode": 33188,
      "new_path": "tools/iree-benchmark-replay-main.cc"
    },
    {
      "type": "modify",
      "old_id": "88f194ba0282c781aed11ed647d43a6e0422b600",
      "old_mode": 33188,
      "old_path": "tools/iree-check-module-main.cc",
      "new_id": "d5a9f778e7eaf1a7523eb16cc117021ed6e5392a",
      "new_mode": 33188,
      "new_path": "tools/iree-check-module-main.cc"
    },
    {
      "type": "modify",
      "old_id": "941a46e7ff6526232e7aef5f35b3d9bd28b77e15",
      "old_mode": 33188,
      "old_path": "tools/iree-run-replay-main.c",
      "new_id": "78d673b104077e3fe471904b1c45800f12607bbb",
      "new_mode": 33188,
      "new_path": "tools/iree-run-replay-main.c"
    },
    {
      "type": "modify",
      "old_id": "ed42d7b5ac0ae3835c02940659bd10e8441aa2fa",
      "old_mode": 33188,
      "old_path": "tools/test/BUILD.bazel",
      "new_id": "a63b92f770c7d6e990f5a2442c717507087398af",
      "new_mode": 33188,
      "new_path": "tools/test/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "effeaf4835026594f1358e0bc4520c01b2038f5c",
      "old_mode": 33188,
      "old_path": "tools/test/CMakeLists.txt",
      "new_id": "834e5d802b3f7be1f7837354abf2db8c532c003d",
      "new_mode": 33188,
      "new_path": "tools/test/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2bf45763d8cbe9e2f979fe6d44249f1141a1702a",
      "new_mode": 33188,
      "new_path": "tools/test/iree-benchmark-module-dispatch-statistics.mlir"
    },
    {
      "type": "modify",
      "old_id": "a4c08020deb9082c0819889901a6c2f95b576a86",
      "old_mode": 33188,
      "old_path": "tools/testing/e2e/test_utils.c",
      "new_id": "980426648878ecff7f8f820b40daad8d27a67836",
      "new_mode": 33188,
      "new_path": "tools/testing/e2e/test_utils.c"
    }
  ]
}
