-
Notifications
You must be signed in to change notification settings - Fork 640
Open
Description
Hi!
Recently I checked Profile-Guided Optimization (PGO) improvements on multiple projects. The results are available here. I also have several examples of applying PGO to the software like ctags:
- LLVM-based tooling (like Clangd): link
- Clangd benchmarks with PGO from Jetbrains: JetBrains blog
- Rust Analyzer: GitHub comment
That's why I think trying to optimize ctags with PGO can be a good idea.
I can suggest the following action points:
- Perform PGO benchmarks on ctags. And if it shows improvements - add a note to the documentation about possible improvements in ctags performance with PGO.
- Providing an easier way (e.g. an additional build option) to build scripts with PGO can be helpful for the end-users and maintainers since they will be able to optimize ctags according to their workloads.
- Optimize pre-built binaries (if it's possible to prepare a good training workload)
Testing Post-Link Optimization techniques (like LLVM BOLT) would be interesting too (Clang and Rustc already use BOLT as an addition to PGO) but I recommend starting from the usual PGO.
Here are some examples of how PGO optimization is integrated in other projects:
- Rustc: a CI script for the multi-stage build
- GCC:
- Clang: Docs
- Python:
- Go: Bash script
- V8: Bazel flag
- ChakraCore: Scripts
- Chromium: Script
- Firefox: Docs
- Thunderbird has PGO support too
- PHP - Makefile command and old Centminmod scripts
- MySQL: CMake script
- YugabyteDB: GitHub commit
- FoundationDB: Script
- Zstd: Makefile
- Foot: Scripts
- Windows Terminal: GitHub PR
- Pydantic-core: GitHub PR
- file.d: GitHub PR
- OceanBase: CMake flag
Metadata
Metadata
Assignees
Labels
No labels