Files
pytorch/benchmarks/cpp/tensorexpr/bench_fuser_overhead.cpp
Ailing Zhang 24c904951c Replace AutoNonVariableTypeMode with InferenceMode in fbcode. (#55114)
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/55114

Test Plan: CI

Reviewed By: ezyang, bhosmer

Differential Revision: D27472768

fbshipit-source-id: 76f17ef7de40f6e04e2968f8958027b5f93e1c0c
2021-04-02 11:45:53 -07:00

58 lines
1.2 KiB
C++

#include <benchmark/benchmark.h>
#include <torch/csrc/jit/codegen/fuser/interface.h>
#include <torch/torch.h>
#include <c10/core/InferenceMode.h>
using namespace torch::jit;
static const std::string two_adds = R"JIT(
def two_adds(self, x: Tensor, y: Tensor, z: Tensor) -> Tensor:
return x + y + z
)JIT";
static void FusedOverhead(benchmark::State& state) {
c10::InferenceMode mode;
overrideCanFuseOnCPU(true);
Module m("m");
m.define(two_adds);
auto x = torch::ones({1});
auto y = torch::ones({1});
auto z = torch::ones({1});
// Warmup.
for (int i = 0; i < 8; i++) {
m.run_method("two_adds", x, y, z);
}
for (auto _ : state) {
m.run_method("two_adds", x, y, z);
}
}
static void UnfusedOverhead(benchmark::State& state) {
torch::NoGradGuard ng;
torch::AutoNonVariableTypeMode nv;
overrideCanFuseOnCPU(false);
Module m("m");
m.define(two_adds);
auto x = torch::ones({1});
auto y = torch::ones({1});
auto z = torch::ones({1});
// Warmup.
for (int i = 0; i < 8; i++) {
m.run_method("two_adds", x, y, z);
}
for (auto _ : state) {
m.run_method("two_adds", x, y, z);
}
}
BENCHMARK(FusedOverhead);
BENCHMARK(UnfusedOverhead);