| # Tint Profiling |
| |
| Profiling is always something of an art form due to the interactions between the compiler and the machine code. |
| Here is some guidance |
| * Profile fully optimized builds. This includes LTO (use_thin_lto = true in args.gn). |
| * Fix clock frequencies where possible (usually easier on external devices like ChromeOS/Android) |
| * Determinism (this is probably a given for running the tint compiler directly) |
| |
| See `benchmarking.md` for tint shader benchmarking setup and existing benchmarking shaders. |
| |
| ## Magic Trace |
| |
| Magic trace is tracing profiler that uses x64 architecture instrumentation (Intel PT) to get full traces without manual or compiler instrumentation (https://github.com/janestreet/magic-trace). It can be built from source or one can use the prebuilt binary directly (assuming a trusted party). |
| (https://magic-trace.org/) |
| |
| |
| ``` |
| sudo ~/magic_trace/magic-trace run -full-execution -multi-thread ./out/active/tint -- ./test/tint/benchmark/shadow-fragment.wgsl --format spirv |
| ``` |
| |
| The resulting trace (default file name 'trace.fxt') can be viewed in perfetto (https://ui.perfetto.dev/) |
| Example trace: |
| (https://ui.perfetto.dev/#!/?s=9c2017442ae51f9e7dc6dcf041bce7003ca2095a) |
| |
| |
| Magic trace can sometimes produce misleading traces due to the tracing mechanism. |
| * Missing trace data due to trace size limits |
| * Unrealistic (and incorrect) timing in the initial phase of tracing |
| * Broken or spliced traces due to internal errors that do not reflect the actual call history |