| #!/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 |