// Copyright 2021 Google LLC
//
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree.

#include <algorithm>
#include <cmath>
#include <functional>
#include <random>
#include <vector>

#include <benchmark/benchmark.h>
#include "bench/utils.h"

#include <xnnpack/AlignedAllocator.h>
#include <xnnpack/common.h>
#include <xnnpack/params.h>
#include <xnnpack/params-init.h>
#include <xnnpack/vmul.h>


static void qs8_vmulc(
  benchmark::State& state,
  xnn_qs8_vmul_minmax_ukernel_function vmulc,
  xnn_init_qs8_mul_minmax_params_fn init_params,
  benchmark::utils::IsaCheckFunction isa_check = nullptr)
{
  if (isa_check && !isa_check(state)) {
    return;
  }

  const size_t num_elements = state.range(0);

  std::random_device random_device;
  auto rng = std::mt19937(random_device());
  auto i8rng = std::bind(
    std::uniform_int_distribution<int32_t>(std::numeric_limits<int8_t>::min(), std::numeric_limits<int8_t>::max()),
    std::ref(rng));

  std::vector<int8_t, AlignedAllocator<int8_t, 64>> a(num_elements);
  std::vector<int8_t, AlignedAllocator<int8_t, 64>> product(num_elements);
  std::generate(a.begin(), a.end(), std::ref(i8rng));
  const int8_t b = i8rng();

  union xnn_qs8_mul_minmax_params params;
  init_params(&params,
    1 /* a zero point */, 1 /* b zero point */, 1 /* output zero point */,
    0.75f /* product-output scale */,
    std::numeric_limits<int8_t>::min() + 1, std::numeric_limits<int8_t>::max() - 1);
  for (auto _ : state) {
    vmulc(num_elements * sizeof(int8_t), a.data(), &b, product.data(), &params);
  }

  const uint64_t cpu_frequency = benchmark::utils::GetCurrentCpuFrequency();
  if (cpu_frequency != 0) {
    state.counters["cpufreq"] = cpu_frequency;
  }

  const size_t num_elements_per_iteration = num_elements;
  state.counters["num_elements"] =
    benchmark::Counter(uint64_t(state.iterations()) * num_elements_per_iteration, benchmark::Counter::kIsRate);

  const size_t bytes_per_iteration = 2 * num_elements * sizeof(int8_t);
  state.counters["bytes"] =
    benchmark::Counter(uint64_t(state.iterations()) * bytes_per_iteration, benchmark::Counter::kIsRate);
}

#if XNN_ARCH_ARM || XNN_ARCH_ARM64
  BENCHMARK_CAPTURE(qs8_vmulc, fp32__neonv8_ld64_x8,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__neonv8_ld64_x8,
                    xnn_init_qs8_mul_minmax_fp32_neonv8_params,
                    benchmark::utils::CheckNEONV8)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
  BENCHMARK_CAPTURE(qs8_vmulc, fp32__neonv8_ld64_x16,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__neonv8_ld64_x16,
                    xnn_init_qs8_mul_minmax_fp32_neonv8_params,
                    benchmark::utils::CheckNEONV8)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();

  BENCHMARK_CAPTURE(qs8_vmulc, fp32__neonv8_ld128_x16,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__neonv8_ld128_x16,
                    xnn_init_qs8_mul_minmax_fp32_neonv8_params,
                    benchmark::utils::CheckNEONV8)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();

  BENCHMARK_CAPTURE(qs8_vmulc, fp32__neon_ld64_x8,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__neon_ld64_x8,
                    xnn_init_qs8_mul_minmax_fp32_neon_params,
                    benchmark::utils::CheckNEON)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
  BENCHMARK_CAPTURE(qs8_vmulc, fp32__neon_ld64_x16,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__neon_ld64_x16,
                    xnn_init_qs8_mul_minmax_fp32_neon_params,
                    benchmark::utils::CheckNEON)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();

  BENCHMARK_CAPTURE(qs8_vmulc, fp32__neon_ld128_x16,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__neon_ld128_x16,
                    xnn_init_qs8_mul_minmax_fp32_neon_params,
                    benchmark::utils::CheckNEON)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();

  BENCHMARK_CAPTURE(qs8_vmulc, rndnu__neon_ld64_x8,
                    xnn_qs8_vmulc_minmax_rndnu_ukernel__neon_ld64_x8,
                    xnn_init_qs8_mul_minmax_rndnu_neon_params,
                    benchmark::utils::CheckNEON)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
  BENCHMARK_CAPTURE(qs8_vmulc, rndnu__neon_ld64_x16,
                    xnn_qs8_vmulc_minmax_rndnu_ukernel__neon_ld64_x16,
                    xnn_init_qs8_mul_minmax_rndnu_neon_params,
                    benchmark::utils::CheckNEON)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();

  BENCHMARK_CAPTURE(qs8_vmulc, rndnu__neon_ld128_x16,
                    xnn_qs8_vmulc_minmax_rndnu_ukernel__neon_ld128_x16,
                    xnn_init_qs8_mul_minmax_rndnu_neon_params,
                    benchmark::utils::CheckNEON)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64

#if XNN_ARCH_X86 || XNN_ARCH_X86_64
  BENCHMARK_CAPTURE(qs8_vmulc, avx_mul16_ld64_x8,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__avx_mul16_ld64_x8,
                    xnn_init_qs8_mul_minmax_fp32_sse4_params,
                    benchmark::utils::CheckAVX)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
  BENCHMARK_CAPTURE(qs8_vmulc, avx_mul16_ld64_x16,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__avx_mul16_ld64_x16,
                    xnn_init_qs8_mul_minmax_fp32_sse4_params,
                    benchmark::utils::CheckAVX)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();

  BENCHMARK_CAPTURE(qs8_vmulc, sse41_mul16_ld64_x8,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__sse41_mul16_ld64_x8,
                    xnn_init_qs8_mul_minmax_fp32_sse4_params,
                    benchmark::utils::CheckSSE41)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
  BENCHMARK_CAPTURE(qs8_vmulc, sse41_mul16_ld64_x16,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__sse41_mul16_ld64_x16,
                    xnn_init_qs8_mul_minmax_fp32_sse4_params,
                    benchmark::utils::CheckSSE41)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();

  BENCHMARK_CAPTURE(qs8_vmulc, sse2_mul16_ld64_x8,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__sse2_mul16_ld64_x8,
                    xnn_init_qs8_mul_minmax_fp32_sse2_params)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
  BENCHMARK_CAPTURE(qs8_vmulc, sse2_mul16_ld64_x16,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__sse2_mul16_ld64_x16,
                    xnn_init_qs8_mul_minmax_fp32_sse2_params)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
#endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64

#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
  BENCHMARK_CAPTURE(qs8_vmulc, wasmsimd_mul32_ld64_x8,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__wasmsimd_mul32_ld64_x8,
                    xnn_init_qs8_mul_minmax_fp32_wasmsimd_params)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
  BENCHMARK_CAPTURE(qs8_vmulc, wasmsimd_mul32_ld64_x16,
                    xnn_qs8_vmulc_minmax_fp32_ukernel__wasmsimd_mul32_ld64_x16,
                    xnn_init_qs8_mul_minmax_fp32_wasmsimd_params)
    ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
    ->UseRealTime();
#endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD

BENCHMARK_CAPTURE(qs8_vmulc, scalar_x1,
                  xnn_qs8_vmulc_minmax_fp32_ukernel__scalar_x1,
                  xnn_init_qs8_mul_minmax_fp32_scalar_params)
  ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
  ->UseRealTime();
BENCHMARK_CAPTURE(qs8_vmulc, scalar_x2,
                  xnn_qs8_vmulc_minmax_fp32_ukernel__scalar_x2,
                  xnn_init_qs8_mul_minmax_fp32_scalar_params)
  ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
  ->UseRealTime();
BENCHMARK_CAPTURE(qs8_vmulc, scalar_x4,
                  xnn_qs8_vmulc_minmax_fp32_ukernel__scalar_x4,
                  xnn_init_qs8_mul_minmax_fp32_scalar_params)
  ->Apply(benchmark::utils::UnaryElementwiseParameters<int8_t, int8_t>)
  ->UseRealTime();

#ifndef XNNPACK_BENCHMARK_NO_MAIN
BENCHMARK_MAIN();
#endif
