Amir added a comment.

Hi Petr, thank you for your comments!

In D132975#3763264 <https://reviews.llvm.org/D132975#3763264>, @phosek wrote:

> This was already on my list of build system features I'd like to implement 
> and I'm glad someone else is already looking into it, thank you! I have two 
> high level comments about your approach.
>
> The first one is related to the use of Clang build as the training data. I 
> think that Clang build is both unnecessarily heavyweight, but also not 
> particularly representative of typical workloads (most Clang users don't use 
> it to build Clang). Ideally, we would give vendors the flexibility to supply 
> their own training data. I'd prefer reusing the existing perf-training 
> <https://github.com/llvm/llvm-project/tree/main/clang/utils/perf-training> 
> setup to do so. In fact, I'd imagine most vendors would likely use the same 
> training data for both PGO and BOLT and that use case should be supported.

Agree that perf-training might be useful for vendors. I'll try to enable it in 
a follow-up diff.

Please note that the target for profile collection is not hardcoded to clang, 
it's configurable via CLANG_BOLT_INSTRUMENT_PROJECTS and 
CLANG_BOLT_INSTRUMENT_TARGETS. Right now it's the llvm/not tool (the smallest 
possible). Also, that the

> The second one is related to applicability. I don't think this mechanism 
> should be limited only to Clang. Ideally, it should be possible to instrument 
> and optimize other tools in the toolchain distribution as well; LLD is likely 
> going to be the most common one after Clang.

I thought about it, and I think we can accommodate optimizing arbitrary targets 
is by providing an interface to instrument specified target(s) via 
`-DBOLT_INSTRUMENT_TARGETS`. For each of the target binaries, CMake would 
create targets like `bolt-instrument-$TARGET` and `bolt-optimize-$TARGET`. 
For `bolt-instrument-$TARGET`, BOLT would instrument the target binary, placing 
instrumented binary next to the original one (e.g. `target`-bolt.inst). End 
users would use those instrumented binaries on representative workloads to 
collect the profile. For `bolt-optimize-$TARGET`, BOLT would post-process the 
profiles and create optimized binary (`target`-bolt).

I appreciate your suggestions. Do you think we can move incrementally from this 
diff towards more general uses in follow-up diffs?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D132975/new/

https://reviews.llvm.org/D132975

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to