LLVM PGO (Profile-Guided Optimization) allows the compiler to better optimize code
for how it actually runs. This PR implements the AOT static PGO, and is tested on
Linux x86-64 and x86-32. The basic steps are:
1. Use `wamrc --enable-llvm-pgo -o <aot_file_of_pgo> <wasm_file>`
to generate an instrumented aot file.
2. Compile iwasm with `cmake -DWAMR_BUILD_STATIC_PGO=1` and run
`iwasm --gen-prof-file=<raw_profile_file> <aot_file_of_pgo>`
to generate the raw profile file.
3. Run `llvm-profdata merge -output=<profile_file> <raw_profile_file>`
to merge the raw profile file into the profile file.
4. Run `wamrc --use-prof-file=<profile_file> -o <aot_file> <wasm_file>`
to generate the optimized aot file.
5. Run the optimized aot_file: `iwasm <aot_file>`.
The test scripts are also added for each benchmark, run `test_pgo.sh` under
each benchmark's folder to test the AOT static pgo.
|
||
|---|---|---|
| .. | ||
| build.sh | ||
| README.md | ||
| run_aot.sh | ||
| run_interp.sh | ||
| test_pgo.sh | ||
Introduction
PolyBench is a benchmark suite of 30 numerical computations with static control flow, extracted from operations in various application domains (linear algebra computations, image processing, physics simulation, dynamic programming, statistics, etc.).
Source: https://github.com/MatthiasJReisinger/PolyBenchC-4.2.1
Building
Please build iwasm and wamrc, refer to:
And install WASI SDK, please download the wasi-sdk release and extract the archive to default path /opt/wasi-sdk.
And then run ./build.sh to build the source code, the folder out will be created and files will be generated under it.
Running
Run ./run_aot.sh to test the benchmark, the native mode and iwasm aot mode will be tested for each workload, and the file report.txt will be generated.
Run ./run_interp.sh to test the benchmark, the native mode and iwasm interpreter mode will be tested for each workload, and the file report.txt will be generated.