-
Story
-
Resolution: Done
-
Undefined
-
None
-
None
-
None
-
sst_pt_llvm_rust_go
-
ssg_platform_tools
-
3
-
False
-
-
No
-
None
-
None
-
None
-
x86_64
-
None
Hello.
According to the Facebook Research Paper (https://research.facebook.com/publications/bolt-a-practical-binary-optimizer-for-data-centers-and-beyond/), LLVM BOLT (https://github.com/llvm/llvm-project/blob/main/bolt/README.md) helps with achieving better performance for various packages like compilers and interpreters. I think it would be a good idea to enable LLVM BOLT for some packages to deliver faster binaries for users.
Here I got some examples of how LLVM BOLT is already integrated into other projects:
- Rustc: https://github.com/rust-lang/rust/pull/116352
- CPython: https://github.com/python/cpython/pull/95908
- Pyston:
- https://github.com/pyston/pyston#building
- https://github.com/pyston/pyston/blob/pyston_main/Makefile#L200 - Clang: https://github.com/llvm/llvm-project/blob/main/clang/cmake/caches/BOLT.cmake
So at least for the projects above LLVM BOLT effects are tested and some preparations are already done in the upstream projects. In this case, it should be easier to enable BOLT for these packages.
For some projects right now there is ongoing work on integrating LLVM BOLT into the build scripts:
- Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=1163978
- Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1789087
- The same for Propeller (a LLVM BOLT alternative): https://bugzilla.mozilla.org/show_bug.cgi?id=1509314 - NodeJS: https://github.com/nodejs/node/issues/50379
- LDC: https://github.com/ldc-developers/ldc/issues/4228
- GCC: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112492
More about LLVM BOLT performance results for other projects can be found in:
- Rustc:
- https://github.com/rust-lang/rust/pull/116352
- https://www.reddit.com/r/rust/comments/y4w2kr/llvm_used_by_rustc_is_now_optimized_with_bolt_on/ - CPython: https://github.com/python/cpython/pull/95908
- YDB: https://github.com/ydb-platform/ydb/issues/140
- Clang:
- [Slides](https://llvm.org/devmtg/2022-11/slides/Lightning15-OptimizingClangWithBOLTUsingCMake.pdf)
- [Results on building Clang](https://github.com/ptr1337/llvm-bolt-scripts/blob/master/results.md)
- [Linaro results](https://android-review.linaro.org/plugins/gitiles/toolchain/llvm_android/+/f36c64eeddf531b7b1a144c40f61d6c9a78eee7a)
- [on AMD 7950X3D](https://github.com/llvm/llvm-project/issues/65010#issuecomment-1701255347) - LDC: https://github.com/ldc-developers/ldc/issues/4228#issuecomment-1334499428
- NodeJS: https://aaupov.github.io/blog/2020/10/08/bolt-nodejs
- Chromium: https://aaupov.github.io/blog/2022/11/12/bolt-chromium
- MySQL, MongoDB, memcached, Verilator: https://people.ucsc.edu/~hlitz/papers/ocolos.pdf
More information about the topic can be found here: https://github.com/zamazan4ik/awesome-pgo
I don't create an issue per project (like "Enable BOLT for Clang", "Enable BOLT for GCC", etc.) since I think first we need to discuss the approach. And if we agree with enabling BOLT, then we can create an additional issue (and use this issue as a BOLT meta issue).