wasm-micro-runtime/tests/benchmarks/dhrystone/test_pgo.sh
Wenyong Huang 8d88471c46
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.
2023-06-05 09:17:39 +08:00

51 lines
1.4 KiB
Bash
Executable File

#!/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 "dhrystone.wasm" ]; then
echo "dhrystone.wasm doesn't exist, please run build.sh first"
exit
fi
echo ""
echo "Compile dhrystone.wasm to dhrystone.aot .."
${WAMRC} -o dhrystone.aot dhrystone.wasm
echo ""
echo "Compile dhrystone.wasm to dhrystone_pgo.aot .."
${WAMRC} --enable-llvm-pgo -o dhrystone_pgo.aot dhrystone.wasm
echo ""
echo "Run dhrystone_pgo.aot to generate the raw profile data .."
${IWASM} --gen-prof-file=dhrystone.profraw dhrystone_pgo.aot
echo ""
echo "Merge the raw profile data to dhrystone.profdata .."
rm -f dhrystone.profdata && llvm-profdata merge -output=dhrystone.profdata dhrystone.profraw
echo ""
echo "Compile dhrystone.wasm to dhrystone_opt.aot with the profile data .."
${WAMRC} --use-prof-file=dhrystone.profdata -o dhrystone_opt.aot dhrystone.wasm
echo ""
echo "Run the dhrystone native"
./dhrystone_native
echo ""
echo "Run the original aot file dhrystone.aot"
${IWASM} dhrystone.aot
echo ""
echo "Run the PGO optimized aot file dhrystone_opt.aot"
${IWASM} dhrystone_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 dhrystone.profraw