C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 使用googletest进行基准测试?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
背景(如果不感兴趣,请跳到下面的问题)

我有一个运行在三个状态的模拟器:

>单线程启动(I / O ok)
>多线程内存cpu限制仿真阶段(I / O不好)
>后仿真,后连接单线程阶段(I / O ok)

有没有搞错!在标准测试期间,cpu使用率从100%下降到20%,总运行时间比正常(130秒vs 4.2秒)大约30倍.

当Callgrind没有显示任何可疑的时候,我的头嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡…..,

沮丧的,我在一个运行期间走进了服务器房间,注意到讨厌的磨砂声,后来验证是由于写入到/proc/PID/fdMysqL套接字!原来,第二阶段深层的几层MysqL代码正在引起问题.

得到教训

>意外的I / O可能是致命的实时应用程序
>单元测试还不够:我也需要基准测试

修复我将在ReadAllowed()和WriteAllowed()上引入线程本地存储的IOSenTinels和asserts(),以确保第2阶段线程永远不会执行任何IO.

任何人都有运气与googletest附加/编写基准框架?

不幸的是,我所有的googletests都通过了这个时刻.如果我走了一会儿,回来,没有注意到运行时间,这将是一个灾难性的承诺,可能更难修复.

如果运行需要> 2或3次最后一个运行时,我希望googletest失败:最后一部分是棘手的,因为非常快速的运行,系统状态可能会导致一段时间,但仍然可以.但是对于长时间的模拟运行/测试,我并不希望运行时间会发生很大变化(> 50%是不寻常的).

我可以在这里提出建议,但是,如果系统突然变得缓慢,即使所有的输出似乎都可以,那么使用低维护检查可以使用自动化测试,这将是很明显的.

解决方法

不是那么简单
const clock_t t0 = clock(); // or gettimeofday or whatever
int res = yourFunction();
const clock_t t1 = clock();
const double elapsedSec = (t1 - t0) / (doublE)CLOCKS_PER_SEc;
EXPECT_EQ(EXPECTED,res);
EXPECT_GT(10.0,elapsedSec);

在这里,您需要根据您的任务手动更改10.0.

当然,你可以进一步去

double prev = -1;
{
  ifstream ifs("/var/tmp/time_record.txt");
  ifs >> prev;
}
if (prev < 0) prev = DEFAULT_VALUE;
...
EXPECT_GT(2 * prev,elapsedSec);
{
  ofstream ofs("/var/tmp/time_record.txt");
  ofs << elapsedSec << endl;
}

但是我想这个额外的复杂性真的可以证明是正当的…

大佬总结

以上是大佬教程为你收集整理的c – 使用googletest进行基准测试?全部内容,希望文章能够帮你解决c – 使用googletest进行基准测试?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。