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

# Run native benchmarks to compare with WebAssembly.
#
# Sample usage (after generate_web_metrics.sh):
#   run_native_benchmarks.sh /tmp/iree/web_metrics/

set -euo pipefail

TARGET_DIR="$1"
if [[ -z "$TARGET_DIR" ]]; then
  >&2 echo "ERROR: Expected target directory (e.g. /tmp/iree/web_metrics/)"
  exit 1
fi
echo "Working in directory '$TARGET_DIR'"
mkdir -p "${TARGET_DIR}"
cd "${TARGET_DIR}"

###############################################################################
# Run benchmarks                                                              #
###############################################################################

# Either build from source (setting this path), or use from the python packages.
# IREE_BENCHMARK_MODULE_PATH=~/code/iree-build/tools/iree-benchmark-module
# IREE_BENCHMARK_MODULE_PATH="D:\dev\projects\iree-build\tools\iree-benchmark-module"
IREE_BENCHMARK_MODULE_PATH=iree-benchmark-module

echo "Benchmarking DeepLabV3..."
"${IREE_BENCHMARK_MODULE_PATH?}" \
    --module=./deeplabv3_native.vmfb \
    --device=local-task \
    --task_topology_group_count=1 \
    --function=main \
    --input=1x257x257x3xf32 \
    --benchmark_min_time=3s

echo ""
echo "Benchmarking MobileSSD..."
"${IREE_BENCHMARK_MODULE_PATH?}" \
    --module=./mobile_ssd_v2_float_coco_native.vmfb \
    --device=local-task \
    --task_topology_group_count=1 \
    --function=main \
    --input=1x320x320x3xf32 \
    --benchmark_min_time=3s

echo ""
echo "Benchmarking PoseNet..."
"${IREE_BENCHMARK_MODULE_PATH?}" \
    --module=./posenet_native.vmfb \
    --device=local-task \
    --task_topology_group_count=1 \
    --function=main \
    --input=1x353x257x3xf32 \
    --benchmark_min_time=3s

echo ""
echo "Benchmarking MobileBertSquad..."
"${IREE_BENCHMARK_MODULE_PATH?}" \
    --module=./mobilebertsquad_native.vmfb \
    --device=local-task \
    --task_topology_group_count=1 \
    --function=main \
    --input=1x384xi32 \
    --input=1x384xi32 \
    --input=1x384xi32 \
    --benchmark_min_time=10s

echo ""
echo "Benchmarking MobileNetV2..."
"${IREE_BENCHMARK_MODULE_PATH?}" \
    --module=./mobilenet_v2_1.0_224_native.vmfb \
    --device=local-task \
    --task_topology_group_count=1 \
    --function=main \
    --input=1x224x224x3xf32 \
    --benchmark_min_time=3s

echo ""
echo "Benchmarking MobileNetV3Small..."
"${IREE_BENCHMARK_MODULE_PATH?}" \
    --module=./MobileNetV3SmallStaticBatch_native.vmfb \
    --device=local-task \
    --task_topology_group_count=1 \
    --function=main \
    --input=1x224x224x3xf32 \
    --benchmark_min_time=3s
