因为除了 github 自述文件之外我找不到真正好的资源或文档,我会在这里询问社区。
假设我有一个名为 的接口Base
和多个派生类型。
我想Foo
用相同的函数和传递给的相同参数对所有派生类型的虚函数进行基准测试Foo
。
对于每个派生类型,我想Foo
在单个基准测试中使用从std::vector<std::size_t>
.
我的一些派生类型的构造函数也需要额外的参数,我应该如何处理它?
在我看来,最简单的做法是使用模板化基准测试并传递给:
const std::vector<std::size_t> v {1, 2, 4, 8, 16};
BENCHMARK_TEMPLATE(func, Derived1, v);
BENCHMARK_TEMPLATE(func, Derived2, v);
BENCHMARK_TEMPLATE(func, Derived3, v);
...
我觉得这不是正确的方法,因为对于每个具有不同构造函数签名的派生类型,我需要具有与前一个几乎相同的不同基准函数。
对此进行基准测试的正确方法是什么?
**更新*:我解决这个问题的方法如下:
std::unique_ptr<Base> GetObj(const std::size_t index)
{
switch(index)
{
case 0:
return std::make_unique<Derived1>(...);
case 1:
return std::make_unique<Derived2>(...);
...
}
}
void func(benchmark::State& state)
{
auto r = state.range();
auto object = GetObj(r);
for (auto _ : state)
{
...
}
}
BENCHMARK(func)->DenseRange(0,5);
但我不喜欢的是基准测试的名称是模式func/0-5
,我希望它是func/Derived1
,func/Derived2
等等..有什么想法可以实现吗?