Skip to content

Commit 5d2b52d

Browse files
max-krasnyanskytrivikram-reddy1CISC
authored
hexagon: add support for basic and extended Op profiling (ggml-org#22269)
* hexagon: restore HTP_OPMASK_QUEUE * hexagon: honor OPMASK_SKIP_COMPUTE in hmx-matmul * hex-prof: restore op profiling * hex-prof: enable PMU * hexagon: simplify and improve op-queuing with full profiling support Add separate profile descriptors. * hexagon: remove opsync and rename opmask into opstage opsync is no longer needed since the profiler is fully async now. opmask name was confusing and opstage is more accurate. * hexagon: refactor opbatch queue handling * hexagon: add iface hooks for enabling profiler from the host Also move all the PMU setup stuff out of the hex-utils since it's not inteded for normal use. * hexagon: make profiler mode configurable On older devices getting PMU counters is expensive so it's now optional. * hexagon: add support for setting profiler pmu events from env * hexagon: simplify profiler output (no need to print buffs, etc) * hexagon: simplify pmu counter formating * hexagon: add a simple profile post-proc tool * hex-prof: add support for reading logs from stdin * hexagon: document GGML_HEXAGON_PROFILE * hex-prof: update default width for dims field * hex-prof: fix linter warnings and errors * Update ggml/src/ggml-hexagon/htp/htp-ops.h Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com> * Update scripts/snapdragon/ggml-hexagon-profile.py Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com> --------- Co-authored-by: Trivikram Reddy <tamarnat@qti.qualcomm.com> Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com>
1 parent 187a456 commit 5d2b52d

19 files changed

Lines changed: 669 additions & 243 deletions

docs/backend/snapdragon/README.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -249,18 +249,27 @@ build: 6a8cf8914 (6733)
249249
```
250250

251251
- `GGML_HEXAGON_PROFILE=1`
252-
Generates a host-side profile for the ggml-hexagon Ops.
252+
Enables Op profiling:
253253

254-
- `GGML_HEXAGON_OPMASK=0x0`
255-
Allows enabling specific stages of the processing pipeline:
254+
- `1` Basic profile with per-op `usecs` and `cycles` counters
255+
- `2` Extended profile with per-op `usecs`, `cycles` and default PMU counter data
256+
- `0x1,...,0x8` Extended profile with per-op `usecs`, `cycles` and custom PMU counter data
257+
258+
The logging output can be either saved into a file for post-processing or it can be piped directly into the post-processing tool to generate the report.
259+
Examples:
260+
261+
`GGML_HEXAGON_PROFILE=1 llama-completion ... |& ./scripts/snapdragon/ggml-hexagon-profile.py -`
262+
263+
- `GGML_HEXAGON_OPSTAGE=0x0`
264+
Allows enabling specific stages of the Op processing pipeline:
256265

257266
- `0x1` Enable Op Queue (i.e., queuing Ops into NPU)
258267
- `0x2` Enable Op Compute (MUL_MAT, etc.)
259268

260269
Examples:
261270

262-
`GGML_HEXAGON_OPMASK=0x1 llama-completion ...` - Ops are enqueued but NPU-side processing is stubbed out
263-
`GGML_HEXAGON_OPMASK=0x3 llama-completion ...` - Full queuing and processing of Ops (default)
271+
`GGML_HEXAGON_OPSTAGE=0x1 llama-completion ...` - Ops are enqueued to the NPU but dma & compute are disabled
272+
`GGML_HEXAGON_OPSTAGE=0x3 llama-completion ...` - Full queuing and processing of Ops (default)
264273

265274
- `GGML_HEXAGON_OPFILTER=regex`
266275
Allows filtering (disabling) Ops that match the regex pattern:

0 commit comments

Comments
 (0)