blob: efc6cd74a7262e1ebf72b36dcf4054e703baedd5 [file] [log] [blame]
#!/bin/bash
# Copyright 2022 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
# Sets up `convperf` (https://github.com/nod-ai/convperf).
#
# `convperf` benchmarks convolution workloads on IREE and other backends such
# as libxsmm. IREE is included as a submodule.
#
# Currently x86 CPU is supported.
#
# Usage:
# ./build_and_run_convperf.sh \
# <convperf build dir> \
# <convperf results dir> \
# <iree commit branch or sha> \
# <convperf repo dir> (optional)
set -xeuo pipefail
export BUILD_DIR=$1
export RESULTS_DIR=$2
export IREE_COMMIT=${3:-"origin/main"}
export REPO_DIR=${4:-"${CONVPERF_REPO_DIR}"}
pushd ${REPO_DIR}
source convperf.venv/bin/activate
# Set all repos as a safe directory. Since this repo was created in the
# Dockerfile under `root`, git will not run commands on this repo as a
# non-root user unless it is marked safe.
for i in $(find "${REPO_DIR}" -name '.git' | xargs dirname); do
git config --global --add safe.directory $i
done
# Update IREE.
pushd external/iree
git fetch https://github.com/openxla/iree "${IREE_COMMIT}"
git checkout "${IREE_COMMIT}"
git submodule update --init --jobs 8 --depth 1
popd # external/iree
popd # ${REPO_DIR}
# Build ConvPerf.
cmake -GNinja \
-DCMAKE_C_COMPILER="${CC:-clang}" \
-DCMAKE_CXX_COMPILER="${CXX:-clang++}" \
-B "${BUILD_DIR}" "${REPO_DIR}"
cmake --build "${BUILD_DIR}"
# Run ConvPerf for several threading configurations.
declare -a threads=( 1 2 4 8 16 )
for i in "${threads[@]}"; do
python3 "${REPO_DIR}/convperf.py" \
--benchmark_tool "${BUILD_DIR}/tools/benchmark_conv" \
--runners iree,xsmm \
--benchmark_sizes \
"${REPO_DIR}/benchmark_sizes/resnet50.json" \
--num_threads="$i"
python "${REPO_DIR}/convperf.py" --visualize --runtimes_file runtimes.json
mv runtimes.json "${RESULTS_DIR}/resnet50_thread$i.json"
mv convs.png "${RESULTS_DIR}/resnet50_thread$i.png"
done