diff --git a/scripts/benchmark/README.md b/scripts/benchmark/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e9ed2ec7274a7637ec46c6c012161f921dfa4ffe --- /dev/null +++ b/scripts/benchmark/README.md @@ -0,0 +1,32 @@ + + +# Experimental benchmarking scripts to compare KleidiCV to vanilla OpenCV performance on Android + +Use at your own risk. + +First, you need a Linux x86 machine to build this. +Next, to build for Android, you'll need [Android NDK](https://developer.android.com/ndk/). + +Let's assume you are building on a machine that has the phone attached to via USB. +Let's assume your CWD is this directory. +Stay in this directory. + +``` +KLEIDICV_PATH=../.. ./build.sh +``` +Then push the test binaries to the phone (replace 9A9A9A9A with your actual device ID, or skip it if you have only one phone attached): +``` +ADB=adb ANDROID_SERIAL=9A9A9A9A ./push.sh +``` +Now you can run the benchmark set: +``` +adb -s 9A9A9A9A shell /data/local/tmp/run_benchmarks_FHD.sh >your_phone_benchmarks_FHD.tsv +adb -s 9A9A9A9A shell /data/local/tmp/run_benchmarks_4K.sh >your_phone_benchmarks_4K.tsv +``` +To run on another core than BIG (CPU=7), set CPU and THERMAL to the desired value. +To find the correct thermal zone id, it's best to log /sys/devices/virtual/thermal/thermal_zone0/type and see what's dumped. +E.g. it can be BIG for 0, MID for 1 and LITTLE for 2, but it can be different for another phone. diff --git a/scripts/benchmark/build.sh b/scripts/benchmark/build.sh new file mode 100755 index 0000000000000000000000000000000000000000..dd5579f229c8c1ddbb512f746b702a3470a5e7ad --- /dev/null +++ b/scripts/benchmark/build.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +# SPDX-FileCopyrightText: 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 + +set -exu + +if [[ -z "${KLEIDICV_PATH}" ]]; then + echo "Please specify the local path to a checked out (cloned) KleidiCV repo in the KLEIDICV_PATH env variable" + exit 1 +fi + +if [[ -z "${OPENCV_PATH}" ]]; then + echo "Please specify the local path to a checked out (cloned) OpenCV repo in the OPENCV_PATH env variable" + exit 1 +fi + +if [ ! -f "${NDK_TOOLCHAIN_FILE:-}" ]; then + echo "Please specify the path of the Android NDK toolchain file (e.g. android-ndk-r26d/build/cmake/android.toolchain.cmake) in the NDK_TOOLCHAIN_FILE env variable" + exit 1 +fi + +OPENCV_PATCH=$(realpath "${KLEIDICV_PATH}")/adapters/opencv/opencv-4.9.patch + +pushd ${OPENCV_PATH} +if [ "patch --forward -p1<${OPENCV_PATCH}" -gt 1 ]; then + echo patch failed! + exit 2 +fi +popd + +cmake -S ${OPENCV_PATH} \ + -B build/vanilla \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=14 \ + -DBUILD_ANDROID_EXAMPLES=OFF \ + -DBUILD_TESTS=OFF \ + -DBUILD_PERF_TESTS=ON \ + -DOPENCV_DISABLE_THREAD_SUPPORT=ON \ + -DCMAKE_TOOLCHAIN_FILE=$(readlink -f "${NDK_TOOLCHAIN_FILE}") \ + -DANDROID_ABI=arm64-v8a \ + -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON \ + -DWITH_KLEIDICV=OFF + +ninja -C build/vanilla opencv_perf_imgproc opencv_perf_core + +cmake -S ${OPENCV_PATH} \ + -B build/kleidicv \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=14 \ + -DBUILD_ANDROID_EXAMPLES=OFF \ + -DBUILD_TESTS=OFF \ + -DBUILD_PERF_TESTS=ON \ + -DOPENCV_DISABLE_THREAD_SUPPORT=ON \ + -DCMAKE_TOOLCHAIN_FILE=$(readlink -f "${NDK_TOOLCHAIN_FILE}") \ + -DANDROID_ABI=arm64-v8a \ + -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON \ + -DWITH_KLEIDICV=ON \ + -DKLEIDICV_SOURCE_PATH=$(realpath "${KLEIDICV_PATH}") + +ninja -C build/kleidicv opencv_perf_imgproc opencv_perf_core + +if [[ -z "${CUSTOM_CMAKE_OPTIONS}" ]]; then + exit 0; +fi + +cmake -S ${OPENCV_PATH} \ + -B build/kleidicv_custom \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=14 \ + -DBUILD_ANDROID_EXAMPLES=OFF \ + -DBUILD_TESTS=OFF \ + -DBUILD_PERF_TESTS=ON \ + -DOPENCV_DISABLE_THREAD_SUPPORT=ON \ + -DCMAKE_TOOLCHAIN_FILE=$(readlink -f "${NDK_TOOLCHAIN_FILE}") \ + -DANDROID_ABI=arm64-v8a \ + -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON \ + -DWITH_KLEIDICV=ON \ + -DKLEIDICV_SOURCE_PATH=$(realpath "${KLEIDICV_PATH}") \ + ${CUSTOM_CMAKE_OPTIONS} + +ninja -C build/kleidicv_custom opencv_perf_imgproc opencv_perf_core diff --git a/scripts/benchmark/perf_test_op.sh b/scripts/benchmark/perf_test_op.sh new file mode 100755 index 0000000000000000000000000000000000000000..a06f68b7b98c893d8b79f1fb601f773f4fc6e0c1 --- /dev/null +++ b/scripts/benchmark/perf_test_op.sh @@ -0,0 +1,74 @@ +#!/bin/sh + +# SPDX-FileCopyrightText: 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 + +set -eu + +CPU_NUMBER=$1 +THERMAL_ZONE_ID=$2 +DISP_NAME=$3 +PERF_TEST_BINARY_BASENAME=$4 +GTEST_FILTER=$5 +GTEST_PARAM_FILTER=$6 + +DEV_DIR=/data/local/tmp + +CPU_MASK=$(echo "obase=16;2^${CPU_NUMBER}" | bc) + +PREV_FREQ_GOVERNOR=$(cat /sys/devices/system/cpu/cpu${CPU_NUMBER}/cpufreq/scaling_governor) +echo performance > /sys/devices/system/cpu/cpu${CPU_NUMBER}/cpufreq/scaling_governor + +CDEV_TRANSITION_COUNT=$(cat /sys/devices/virtual/thermal/thermal_zone${THERMAL_ZONE_ID}/cdev0/stats/total_trans) + +wait_for_cooldown() { + while [[ $(cat /sys/devices/virtual/thermal/thermal_zone${THERMAL_ZONE_ID}/temp) > 40000 ]]; do + sleep 0.2 + done +} + +FNAME=$$ + +wait_for_cooldown +>&2 taskset ${CPU_MASK} ${DEV_DIR}/"${PERF_TEST_BINARY_BASENAME}"_vanilla --perf_min_samples=100 --gtest_output=json:${DEV_DIR}/${FNAME}_vanilla --gtest_filter="${GTEST_FILTER}" --gtest_param_filter="${GTEST_PARAM_FILTER}" + +wait_for_cooldown +>&2 taskset ${CPU_MASK} ${DEV_DIR}/"${PERF_TEST_BINARY_BASENAME}"_kleidicv --perf_min_samples=100 --gtest_output=json:${DEV_DIR}/${FNAME}_kleidicv --gtest_filter="${GTEST_FILTER}" --gtest_param_filter="${GTEST_PARAM_FILTER}" + +if [ -f ${DEV_DIR}/"${PERF_TEST_BINARY_BASENAME}"_custom ]; then + wait_for_cooldown + >&2 taskset ${CPU_MASK} ${DEV_DIR}/"${PERF_TEST_BINARY_BASENAME}"_custom --perf_min_samples=100 --gtest_output=json:${DEV_DIR}/${FNAME}_custom --gtest_filter="${GTEST_FILTER}" --gtest_param_filter="${GTEST_PARAM_FILTER}" +fi + +echo ${PREV_FREQ_GOVERNOR} > /sys/devices/system/cpu/cpu${CPU_NUMBER}/cpufreq/scaling_governor + +if [[ ${CDEV_TRANSITION_COUNT} != $(cat /sys/devices/virtual/thermal/thermal_zone${THERMAL_ZONE_ID}/cdev0/stats/total_trans) ]]; then + >&2 echo CPU throttling happened, exiting... + exit 1 +fi + +if ! grep -q "\"tests\": 1," ${DEV_DIR}/${FNAME}_vanilla; then + >&2 echo More than one test case was triggered, exiting + exit 1 +fi + +get_mean() { + sed -n s/\"mean\"://p ${1} | tr -d \" | tr -d ',' | tr -d ' ' +} + +get_gstddev() { + sed -n s/\"gstddev\"://p ${1} | tr -d \" | tr -d ',' | tr -d ' ' +} + +RES="${DISP_NAME}\t$(get_mean ${DEV_DIR}/${FNAME}_vanilla)\t$(get_gstddev ${DEV_DIR}/${FNAME}_vanilla)" +rm ${DEV_DIR}/${FNAME}_vanilla +RES="${RES}\t$(get_mean ${DEV_DIR}/${FNAME}_kleidicv)\t$(get_gstddev ${DEV_DIR}/${FNAME}_kleidicv)" +rm ${DEV_DIR}/${FNAME}_kleidicv + +if [ -f ${DEV_DIR}/${FNAME}_custom ]; then + RES="${RES}\t$(get_mean ${DEV_DIR}/${FNAME}_custom)\t$(get_gstddev ${DEV_DIR}/${FNAME}_custom)" + rm ${DEV_DIR}/${FNAME}_custom +fi + +printf "${RES}" diff --git a/scripts/benchmark/push.sh b/scripts/benchmark/push.sh new file mode 100755 index 0000000000000000000000000000000000000000..8eb97eba9ff9c14907038b35e441c113396b698c --- /dev/null +++ b/scripts/benchmark/push.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# SPDX-FileCopyrightText: 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 + +# Environment variables used: +# ADB: adb executable. Must be set. +# ANDROID_SERIAL: Passed to adb it selects a device by its serial number. This is optional. +# DEVICE_HOST: Passed to adb it sets the host where the device is found. This is optional. +# DEVICE_PORT: Passed to adb it sets the port where the device is found. This is optional. + +set -exu + +run_adb_command() { + local args=() + if [[ -n "${DEVICE_HOST+x}" ]]; then + args+=( "-H" "${DEVICE_HOST}" ) + fi + if [[ -n "${DEVICE_PORT+x}" ]]; then + args+=( "-P" "${DEVICE_PORT}" ) + fi + if [[ -n "${ANDROID_SERIAL+x}" ]]; then + args+=( "-s" "${ANDROID_SERIAL}" ) + fi + + "${ADB}" "${args[@]}" "$@" +} + +if [[ -z "${ADB}" ]]; then + echo "Required variable 'ADB' is not set. Please set it to point to adb command." + exit 1 +fi + +SCRIPT_PATH="$(realpath "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")" + +DEV_DIR=/data/local/tmp + +run_adb_command push build/vanilla/bin/opencv_perf_core ${DEV_DIR}/opencv_perf_core_vanilla +run_adb_command push build/vanilla/bin/opencv_perf_imgproc ${DEV_DIR}/opencv_perf_imgproc_vanilla + +run_adb_command push build/kleidicv/bin/opencv_perf_core ${DEV_DIR}/opencv_perf_core_kleidicv +run_adb_command push build/kleidicv/bin/opencv_perf_imgproc ${DEV_DIR}/opencv_perf_imgproc_kleidicv + +if [ -f build/kleidicv_custom/bin/opencv_perf_core ] && [ -f build/kleidicv_custom/bin/opencv_perf_imgproc ]; then + run_adb_command push build/kleidicv_custom/bin/opencv_perf_core ${DEV_DIR}/opencv_perf_core_custom + run_adb_command push build/kleidicv_custom/bin/opencv_perf_imgproc ${DEV_DIR}/opencv_perf_imgproc_custom +fi + +run_adb_command push ${SCRIPT_PATH}/perf_test_op.sh ${DEV_DIR}/ +run_adb_command push ${SCRIPT_PATH}/run_benchmarks_FHD.sh ${DEV_DIR}/ +run_adb_command push ${SCRIPT_PATH}/run_benchmarks_4K.sh ${DEV_DIR}/ diff --git a/scripts/benchmark/run_benchmarks_4K.sh b/scripts/benchmark/run_benchmarks_4K.sh new file mode 100755 index 0000000000000000000000000000000000000000..e44b3ebf03add398b887b3be869d483b32e9e99f --- /dev/null +++ b/scripts/benchmark/run_benchmarks_4K.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# SPDX-FileCopyrightText: 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 + +set -eu + +DEV_DIR=/data/local/tmp +CPU=7 +THERMAL=0 +RES=$(printf 'Operation\tOpenCV\tstd\tKleidiCV\tstd\tKleidiCV_custom\tstd') + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL GRAY2BGR opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_GRAY2BGR)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL GRAY2BGRA opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_GRAY2BGRA)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGR2RGB opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_BGR2RGB)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGRA2RGBA opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_BGRA2RGBA)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGR2RGBA opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_BGR2RGBA)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGR2BGRA opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_BGR2BGRA)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL RGBA2BGR opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_RGBA2BGR)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGRA2BGR opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_BGRA2BGR)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL YUVSP2BGR opencv_perf_imgproc '*CvtMode2*' '(3840x2160, COLOR_YUV2BGR_NV12)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL YUVSP2BGRA opencv_perf_imgproc '*CvtMode2*' '(3840x2160, COLOR_YUV2BGRA_NV12)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL YUVSP2RGB opencv_perf_imgproc '*CvtMode2*' '(3840x2160, COLOR_YUV2RGB_NV12)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL YUVSP2RGBA opencv_perf_imgproc '*CvtMode2*' '(3840x2160, COLOR_YUV2RGBA_NV12)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL RGB2YUV opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_RGB2YUV)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGR2YUV opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, COLOR_BGR2YUV)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL RGBA2YUV opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, CX_RGBA2YUV)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGRA2YUV opencv_perf_imgproc '*cvtColor8u*' '(3840x2160, CX_BGRA2YUV)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BinaryThreshold opencv_perf_imgproc '*ThreshFixture_Threshold*' '(3840x2160, 8UC1, THRESH_BINARY)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL GaussianBlur3x3 opencv_perf_imgproc '*gaussianBlur3x3*' '(3840x2160, 8UC1, BORDER_REPLICATE)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL GaussianBlur5x5 opencv_perf_imgproc '*gaussianBlur5x5*' '(3840x2160, 8UC1, BORDER_REPLICATE)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Sobel_Gx opencv_perf_imgproc '*Border3x3_sobelFilter*' '(3840x2160, 16SC1, (1, 0), BORDER_REPLICATE)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Sobel_Gy opencv_perf_imgproc '*Border3x3_sobelFilter*' '(3840x2160, 16SC1, (0, 1), BORDER_REPLICATE)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Dilate3x3 opencv_perf_imgproc '*Dilate_big*' '(3840x2160, 8UC1, 3)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Dilate5x5 opencv_perf_imgproc '*Dilate_big*' '(3840x2160, 8UC1, 5)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Dilate17x17 opencv_perf_imgproc '*Dilate_big*' '(3840x2160, 8UC1, 17)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Erode3x3 opencv_perf_imgproc '*Erode_big*' '(3840x2160, 8UC1, 3)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Erode5x5 opencv_perf_imgproc '*Erode_big*' '(3840x2160, 8UC1, 5)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Erode17x17 opencv_perf_imgproc '*Erode_big*' '(3840x2160, 8UC1, 17)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Resize2x2_8b opencv_perf_imgproc '*resizeUpLinearNonExact*' '(8UC1, (1920x1080, 3840x2160))')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Resize2x2_float opencv_perf_imgproc '*resizeUpLinearNonExact*' '(32FC1, (1920x1080, 3840x2160))')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Resize4x4_8b opencv_perf_imgproc '*resizeUpLinearNonExact*' '(8UC1, (960x540, 3840x2160))')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Resize4x4_float opencv_perf_imgproc '*resizeUpLinearNonExact*' '(32FC1, (960x540, 3840x2160))')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Scale opencv_perf_core '*convertTo*' '(3840x2160, 8UC1, 8UC1, 1, 1.234, 4.567)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL TransposeInplace_8b opencv_perf_core '*Transpose_InPlace*' '(3840x2160, 8UC1)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL TransposeInplace_16b opencv_perf_core '*Transpose_InPlace*' '(3840x2160, 16UC1)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL TransposeCopy_8b opencv_perf_core '*Transpose_Copy*' '(3840x2160, 8UC1)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL TransposeCopy_16b opencv_perf_core '*Transpose_Copy*' '(3840x2160, 16UC1)')") + +echo "$RES" diff --git a/scripts/benchmark/run_benchmarks_FHD.sh b/scripts/benchmark/run_benchmarks_FHD.sh new file mode 100755 index 0000000000000000000000000000000000000000..9a9aa5f46e49031a9d17d6ba639880fd609cacd7 --- /dev/null +++ b/scripts/benchmark/run_benchmarks_FHD.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# SPDX-FileCopyrightText: 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 + +set -eu + +DEV_DIR=/data/local/tmp +CPU=7 +THERMAL=0 +RES=$(printf 'Operation\tOpenCV\tstd\tKleidiCV\tstd\tKleidiCV_custom\tstd') + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL GRAY2BGR opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_GRAY2BGR)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL GRAY2BGRA opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_GRAY2BGRA)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGR2RGB opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_BGR2RGB)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGRA2RGBA opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_BGRA2RGBA)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGR2RGBA opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_BGR2RGBA)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGR2BGRA opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_BGR2BGRA)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL RGBA2BGR opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_RGBA2BGR)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGRA2BGR opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_BGRA2BGR)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL YUVSP2BGR opencv_perf_imgproc '*CvtMode2*' '(1920x1080, COLOR_YUV2BGR_NV12)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL YUVSP2BGRA opencv_perf_imgproc '*CvtMode2*' '(1920x1080, COLOR_YUV2BGRA_NV12)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL YUVSP2RGB opencv_perf_imgproc '*CvtMode2*' '(1920x1080, COLOR_YUV2RGB_NV12)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL YUVSP2RGBA opencv_perf_imgproc '*CvtMode2*' '(1920x1080, COLOR_YUV2RGBA_NV12)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL RGB2YUV opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_RGB2YUV)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGR2YUV opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, COLOR_BGR2YUV)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL RGBA2YUV opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, CX_RGBA2YUV)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BGRA2YUV opencv_perf_imgproc '*cvtColor8u*' '(1920x1080, CX_BGRA2YUV)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL BinaryThreshold opencv_perf_imgproc '*ThreshFixture_Threshold*' '(1920x1080, 8UC1, THRESH_BINARY)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL GaussianBlur3x3 opencv_perf_imgproc '*gaussianBlur3x3*' '(1920x1080, 8UC1, BORDER_REPLICATE)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL GaussianBlur5x5 opencv_perf_imgproc '*gaussianBlur5x5*' '(1920x1080, 8UC1, BORDER_REPLICATE)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Sobel_Gx opencv_perf_imgproc '*Border3x3_sobelFilter*' '(1920x1080, 16SC1, (1, 0), BORDER_REPLICATE)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Sobel_Gy opencv_perf_imgproc '*Border3x3_sobelFilter*' '(1920x1080, 16SC1, (0, 1), BORDER_REPLICATE)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Dilate3x3 opencv_perf_imgproc '*Dilate_big*' '(1920x1080, 8UC1, 3)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Dilate5x5 opencv_perf_imgproc '*Dilate_big*' '(1920x1080, 8UC1, 5)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Dilate17x17 opencv_perf_imgproc '*Dilate_big*' '(1920x1080, 8UC1, 17)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Erode3x3 opencv_perf_imgproc '*Erode_big*' '(1920x1080, 8UC1, 3)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Erode5x5 opencv_perf_imgproc '*Erode_big*' '(1920x1080, 8UC1, 5)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Erode17x17 opencv_perf_imgproc '*Erode_big*' '(1920x1080, 8UC1, 17)')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Resize2x2_8b opencv_perf_imgproc '*resizeUpLinearNonExact*' '(8UC1, (960x540, 1920x1080))')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Resize2x2_float opencv_perf_imgproc '*resizeUpLinearNonExact*' '(32FC1, (960x540, 1920x1080))')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Resize4x4_8b opencv_perf_imgproc '*resizeUpLinearNonExact*' '(8UC1, (480x270, 1920x1080))')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Resize4x4_float opencv_perf_imgproc '*resizeUpLinearNonExact*' '(32FC1, (480x270, 1920x1080))')") + +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL Scale opencv_perf_core '*convertTo*' '(1920x1080, 8UC1, 8UC1, 1, 1.234, 4.567)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL TransposeInplace_8b opencv_perf_core '*Transpose_InPlace*' '(1920x1080, 8UC1)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL TransposeInplace_16b opencv_perf_core '*Transpose_InPlace*' '(1920x1080, 16UC1)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL TransposeCopy_8b opencv_perf_core '*Transpose_Copy*' '(1920x1080, 8UC1)')") +RES=$(printf "${RES}\n$(${DEV_DIR}/perf_test_op.sh $CPU $THERMAL TransposeCopy_16b opencv_perf_core '*Transpose_Copy*' '(1920x1080, 16UC1)')") + +echo "$RES"