addn_benchmark.cc 1.6 KB
Newer Older
李寅 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//
// Copyright (c) 2017 XiaoMi All rights reserved.
//

#include <string>
#include "mace/core/operator.h"
#include "mace/core/testing/test_benchmark.h"
#include "mace/ops/ops_test_util.h"

namespace mace {
template <DeviceType D, typename T>
static void AddNBenchmark(int iters, int n, int size) {
  mace::testing::StopTiming();

  OpsTestNet net;
  OpDefBuilder op_def_builder("AddN", "AddNBM");
  for (int i = 0; i < n; ++i) {
    op_def_builder.Input(internal::MakeString("Input", i).c_str());
  }
20
  op_def_builder.Output("Output").Finalize(net.NewOperatorDef());
李寅 已提交
21 22 23

  // Add input data
  for (int i = 0; i < n; ++i) {
24
    net.AddRandomInput<DeviceType::CPU, float>(internal::MakeString("Input", i).c_str(), {size});
李寅 已提交
25 26 27 28 29 30 31 32
  }

  // Warm-up
  for (int i = 0; i < 5; ++i) {
    net.RunOp(D);
  }

  mace::testing::StartTiming();
L
Liangliang He 已提交
33
  while (iters--) {
李寅 已提交
34 35 36 37
    net.RunOp(D);
  }
}

L
Liangliang He 已提交
38 39 40 41
#define BM_ADDN_MACRO(N, SIZE, TYPE, DEVICE)                        \
  static void BM_ADDN_##N##_##SIZE##_##TYPE##_##DEVICE(int iters) { \
    const int64_t tot = static_cast<int64_t>(iters) * N * SIZE;     \
    mace::testing::ItemsProcessed(tot);                             \
L
Liangliang He 已提交
42
    mace::testing::BytesProcessed(tot *(sizeof(TYPE)));             \
L
Liangliang He 已提交
43 44
    AddNBenchmark<DEVICE, TYPE>(iters, N, SIZE);                    \
  }                                                                 \
李寅 已提交
45 46
  BENCHMARK(BM_ADDN_##N##_##SIZE##_##TYPE##_##DEVICE)

L
Liangliang He 已提交
47 48
#define BM_ADDN(N, SIZE, TYPE)       \
  BM_ADDN_MACRO(N, SIZE, TYPE, CPU); \
李寅 已提交
49 50 51 52 53 54
  BM_ADDN_MACRO(N, SIZE, TYPE, NEON);

BM_ADDN(10, 1000, float);
BM_ADDN(10, 10000, float);
BM_ADDN(100, 1000, float);
BM_ADDN(100, 10000, float);
L
Liangliang He 已提交
55
}  //  namespace mace