介绍
本文介绍Tensorflow Op 级别的benchmark的用法以及代码调用
用法
|
|
代码分析
Benchmark文件
https://github.com/tensorflow/tensorflow/blob/e8598ce0454c440fca64e4ebc4aeedfa7afd5c97/tensorflow/core/kernels/image/non_max_suppression_op_benchmark_test.cc
封装构造testing::Benchmark
Step1:
BENCHMARK(BMCombinedNMS##DEVICE####B####BN####CN####Q);
Step2 注册benchmark 进入all_benchmark这个全局变量:
- TF_ATTRIBUTE_UNUSED attribute((unused)) 忽略GCC 告警: https://www.jianshu.com/p/21aef14340a8
- new ::tensorflow::testing::Benchmark(#n, (n)) 将这个函数注册到all_benchmark这个全局变量里面 里面 https://github.com/tensorflow/tensorflow/blob/e8598ce0454c440fca64e4ebc4aeedfa7afd5c97/tensorflow/core/platform/default/test_benchmark.cc#L39-L43
Step3 注册之后进入test_main执行benchmark
这一部分我理解应该是在bazel build的时候加到non_max_suppression_op_benchmark_test.cc 里面的
- test_main.cc:main
test_benchmark.cc:Benchmark::Run(const char* pattern)
遍历所有all_benchmark 一个一个去执行,并打印出每个的运行结果1b->Run(arg.first, arg.second, &iters, &seconds); #这个b就是具体的某个benchmarktest_benchmark.cc:Benchmark::Run(int arg1, int arg2, int run_count, double run_seconds)
1(\*fn0_)(iters);
这里就调用回到了执行这个函数
实际运行test::benchmark
|
|