Adl*_*l A 5 c++ benchmarking function
这可能是一个更高级的问题.如果你有两个返回值的函数
int F(int input1, int input2)
{
int output;
//some algorithm that assigns value to output//
return output;
}
int D(int input1, int input2)
{
int output;
//another algorithm that assigns value to output//
return output;
}
Run Code Online (Sandbox Code Playgroud)
条件是F(a,b)== D(a,b)(对于相同的输入都返回相同的值).
如果你想对他们的表现进行基准测试,你会怎么做?更准确地说,你会如何孤立它需要执行时间F(A,B)或d(A,B)等,它并不能反映它花费的时间等在基准设置二次操作?
谷歌基准测试是最好的开源解决方案之一.您必须围绕要进行基准测试的代码创建简单的包装器,并静态或动态地与基准库lib链接.使用代码编写这样的微基准测试通常很有用.获得灵感,请参阅精彩的演示文稿.
static void BM_F(benchmark::State& state) {
const auto input1 = state.range_x();
const auto input2 = state.range_y();
while (state.KeepRunning()) F(input1, input2);
}
static void BM_D(benchmark::State& state) {
const auto input1 = state.range_x();
const auto input2 = state.range_y();
while (state.KeepRunning()) D(input1, input2);
}
BENCHMARK(BM_F)
->ArgPair(1, 10)
->ArgPair(10, 100)
->ArgPair(100, 1000);
BENCHMARK(BM_D)
->ArgPair(1, 10)
->ArgPair(10, 100)
->ArgPair(100, 1000);
Run Code Online (Sandbox Code Playgroud)
如果要测量原始CPU周期,那么您唯一的选择是使用直接CPU指令.对于x86,您可以使用时间戳计数器.但是你应该知道,这样的测量不会抵抗OS执行的任何上下文切换或跳过CPU.在这种情况下你唯一的选择是使用algo单一执行流程,在进入测试功能之前记住CPU的ID和TSC值,并在测试功能后检查CPU的ID.然后计算TSC值之间的差异.您还可以为进程设置CPU关联,以将进程粘贴到特定CPU.
另一种Linux特定的基准功能方法是使用perf工具.
但无论如何,任何措施都会为结果增加一些错误级别.