blob: 1039fa5233a607ec48a2892585f7d6d663e7635a [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
#
# Builds `mmperf` (https://github.com/mmperf/mmperf).
#
# `mmperf` benchmarks matrix-multiply workloads on IREE and other backends such
# as RUY, TVM, Halide, CuBLAS, etc. Some backends are included as submodules
# in the `mmperf` repo and built from source, and other backends are expected
# to already be installed.
#
# Please refer to `build_tools/docker/dockerfiles/mmperf.Dockerfile` for commands on
# installing various backends.
#
# Currently x86 CPU and CUDA are supported.
#
# Usage:
# ./build_mmperf.sh \
# <mmperf build dir> \
# <backend> e.g. "cpu", "cuda". \
# <iree sha> (optional) \
# <mmperf repo dir> (optional)
set -xeuo pipefail
export BUILD_DIR=$1
# Either `cpu` or `cuda`.
export BACKEND=$2
export IREE_SHA=${3:-"origin/main"}
export REPO_DIR=${4:-${MMPERF_REPO_DIR}}
pushd ${REPO_DIR}
source mmperf.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_SHA}"
git checkout "${IREE_SHA}"
git submodule update --init --jobs 8 --depth 1
popd # external/iree
popd # ${REPO_DIR}
# Build mmperf.
declare -a args=(
-GNinja
-DCMAKE_CXX_COMPILER=/usr/bin/clang++
-DCMAKE_C_COMPILER=/usr/bin/clang
-DUSE_IREE=ON
)
if [[ ${BACKEND} == "cuda" ]]; then
args+=(
-DIREE_CUDA=ON
-DUSE_CUBLAS=ON
)
cmake "${args[@]}" -B ${BUILD_DIR} ${REPO_DIR}
elif [[ ${BACKEND} == "cpu" ]]; then
args+=(
-DMKL_DIR=/opt/intel/mkl
-DBLIS_DIR=/opt/blis
-DUSE_MKL=ON
-DUSE_RUY=ON
-DIREE_LLVMCPU=ON
-DUSE_HALIDE=ON
-DUSE_OPENBLAS=ON
-DUSE_BLIS=ON
-DUSE_TVM=ON
)
MKL_DIR=${MKL_DIR} BLIS_DIR=${BLIS_DIR} cmake "${args[@]}" -B ${BUILD_DIR} ${REPO_DIR}
else
echo "Error: Unsupported backend."
exit 1
fi
cmake --build ${BUILD_DIR} --verbose