Implement AOT static PGO (#2243)
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.
This commit is contained in:
@ -17,3 +17,5 @@ And then run `./build.sh` to build the source code, file `coremark.exe`, `corema
|
||||
# Running
|
||||
|
||||
Run `./run.sh` to test the benchmark, the native mode, iwasm aot mode and iwasm interpreter mode will be tested respectively.
|
||||
|
||||
Run `./test_pgo.sh` to test the benchmark with AOT static PGO (Profile-Guided Optimization) enabled, please refer [here](../README.md#install-llvm-profdata) to install tool `llvm-profdata` and build `iwasm` with `cmake -DWAMR_BUILD_STATIC_PGO=1`.
|
||||
|
||||
50
tests/benchmarks/coremark/test_pgo.sh
Executable file
50
tests/benchmarks/coremark/test_pgo.sh
Executable file
@ -0,0 +1,50 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
PLATFORM=$(uname -s | tr A-Z a-z)
|
||||
|
||||
IWASM="../../../product-mini/platforms/${PLATFORM}/build/iwasm"
|
||||
WAMRC="../../../wamr-compiler/build/wamrc"
|
||||
|
||||
if [ ! -e "coremark.wasm" ]; then
|
||||
echo "coremark.wasm doesn't exist, please run build.sh first"
|
||||
exit
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Compile coremark.wasm to coremark.aot .."
|
||||
${WAMRC} -o coremark.aot coremark.wasm
|
||||
|
||||
echo ""
|
||||
echo "Compile coremark.wasm to coremark_pgo.aot .."
|
||||
${WAMRC} --enable-llvm-pgo -o coremark_pgo.aot coremark.wasm
|
||||
|
||||
echo ""
|
||||
echo "Run coremark_pgo.aot to generate the raw profile data .."
|
||||
${IWASM} --gen-prof-file=coremark.profraw coremark_pgo.aot
|
||||
|
||||
echo ""
|
||||
echo "Merge the raw profile data to coremark.profdata .."
|
||||
rm -f coremark.profdata && llvm-profdata merge -output=coremark.profdata coremark.profraw
|
||||
|
||||
echo ""
|
||||
echo "Compile coremark.wasm to coremark_opt.aot with the profile data .."
|
||||
${WAMRC} --use-prof-file=coremark.profdata -o coremark_opt.aot coremark.wasm
|
||||
|
||||
echo ""
|
||||
echo "Run the coremark native"
|
||||
./coremark.exe
|
||||
|
||||
echo ""
|
||||
echo "Run the original aot file coremark.aot"
|
||||
${IWASM} coremark.aot
|
||||
|
||||
echo ""
|
||||
echo "Run the PGO optimized aot file coremark_opt.aot"
|
||||
${IWASM} coremark_opt.aot
|
||||
|
||||
# Show the profile data:
|
||||
# llvm-profdata show --all-functions --detailed-summary --binary-ids --counts \
|
||||
# --hot-func-list --memop-sizes --show-prof-sym-list coremark.profraw
|
||||
Reference in New Issue
Block a user