为了账号安全,请及时绑定邮箱和手机立即绑定

什么是微基准测试?

什么是微基准测试?

偶然的你 2019-11-13 13:10:17
我听说过使用过这个术语,但是我不确定它的含义,因此:它是什么意思,不是什么意思?什么是IS和IS N'T微基准测试的一些示例?微基准测试有哪些危险,如何避免?(或者这是好事吗?)
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

没有微基准测试的定义,但是当我使用微基准测试时,它的意思是一个旨在测试某些特定硬件1或语言功能的性能的小型人工基准测试。相比之下,更好的基准是设计用于执行实际任务的真实程序。(在这两种情况之间划清界限是毫无意义的,IMO,我不会尝试。)

微观基准测试的危险在于,编写基准测试很容易得出完全误导的结果。Java微基准测试中的一些常见陷阱是:

  • 编写编译器可以推断出的代码是没有用的工作,因此会完全优化,

  • 没有考虑到Java内存管理的“笨拙”性质,并且

  • 不考虑JVM启动效果;例如,加载和JIT编译类所需的时间,以及(相反)一旦JIT编译了这些方法就会发生执行速度的提高。

但是,即使您解决了上述问题,仍然存在无法解决基准测试的系统性问题。基准测试的代码和行为通常与您真正关心的内容无关。即您的应用程序将如何执行。太多的“隐藏变量”使您无法从基准测试推广到典型程序,更不用说对程序了。

由于这些原因,我们定期建议人们不要浪费时间使用微基准测试。相反,最好编写简单自然的代码,并使用探查器来识别需要手动优化的区域。有趣的是,通常会发现,实际应用中最重要的性能问题是由于数据结构和算法(包括网络,数据库和与线程相关的瓶颈)的不良设计所致,而不是典型的微基准所试图解决的问题。测试。

@BalusC在Hotspot FAQ页面中提供了一个很好的指向该主题资料的链接。这是Brian Goetz的IBM白皮书的链接。


1-专家甚至不会尝试使用Java进行硬件基准测试。字节码和硬件之间发生太多“复杂的事情”,无法从原始结果中得出关于硬件的有效/有用的结论。您最好使用更接近硬件的语言。例如C甚至汇编代码。


查看完整回答
反对 回复 2019-11-13
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

它是什么意思,不是什么意思?

我要说的是,微基准测试只是意味着测量一些微小的东西。Tiny可能取决于上下文,但通常在单个系统调用或类似级别上。基准测试是指以上所有内容。


什么是IS和IS N'T微基准测试的一些示例?

本文列出了测量GETPID()系统调用的时间和使用的memcpy()测量的时间来复制存储器微基准测试的例子。


对算法实现等的任何衡量均不算作微基准测试。特别是结果报告列出了减少执行时间的任务,因此很少将其作为微基准测试。


微基准测试有哪些危险,如何避免?

明显的危险是它会诱使开发人员优化程序的错误部分。另一个危险是,精确地测量小物体非常困难。避免这种情况的最简单方法可能只是了解程序中花费最多时间的位置。


人们通常会说“不做微基准测试”,但是他们可能的意思是“不要基于微基准测试做出优化决策”。


(或者这是好事吗?)

它本身并不像这里的其他人那么坏,而且许多网页似乎都在暗示。它有地方。我从事程序重写和运行时方面的编织等工作。我们通常会发布所添加指令的微基准,而不是为了指导任何优化,而是确保我们的额外代码几乎不会影响重写程序的执行。


但是,这是一门艺术,


查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 1139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信