基准测试和性能分析之间的区别

吉姆·麦克亚当斯

我看到软件基准测试性能分析这两个术语有时可以互换使用,但据我所知存在细微的差别。

两者都按时间连接。但是,基准测试主要是要确定可以与其他应用程序进行比较的特定速度得分,而性能分析可以为您提供有关应用程序在大部分时间(或周期数)上花费的确切信息。

对我而言,总像是:集成测试是基准测试的对应部分,而将测试部分组合到性能分析中。但是微基准测试如何适应呢?

有人在这里

概要分析和基准测试是同一枚硬币的另一面,概要分析可帮助您缩小到最有用的优化范围,基准测试可让您轻松隔离优化并进行交叉比较。

另一个人在这里谈到了性能分析:

在不同的时间进行概要分析意味着不同的事情。有时,这意味着衡量性能。有时,这意味着诊断内存泄漏。有时,这意味着获得对多线程或其他低级别活动的可见性。

那么,这些技术在概念上是否有所不同,或者仅仅是黑白两色?

彼得·科德斯

基准测试可以衡量整个操作的时间。例如在某些工作负载下每秒的I / O操作。因此,结果通常是一个单一的数字,以秒或每秒的操作数表示或具有不同参数结果的数据集,因此您可以对其进行图形化处理。

您可以使用基准比较相同硬件不同的软件,或与基准进行交互的其他软件的不同版本。例如,使用不同的apache设置测试每秒最大连接数。


概要分析并非旨在比较不同的事物:它是关于了解程序行为的。配置文件结果可能是时间的表每功能拍摄,或者甚至每指令具有采样分析器您可以说这是一个配置文件而不是基准测试,因为说“该功能花费的时间最少,所以我们将保留该功能并停止使用其余功能”是没有意义的。

阅读维基百科文章以了解更多信息:https : //en.wikipedia.org/wiki/Profiling_(computer_programming)

您可以使用配置文件找出优化的地方。在程序中,将程序花费其时间的99%的速度提高10%比在其他任何功能中将速度提高100%更有价值。更好的是,您可以改进高级设计,从而减少昂贵的功能,并使其变得更快。


基准测试是基准测试的一种特定形式。这意味着您正在测试一项超级特定的东西,以孤立地衡量它,而不是真正有用的东西的整体性能。

微基准测试结果示例:

非微基准测试结果示例:

  • 使用7-zip(带有特定的选项和硬件)压缩此100MB的文件集需要23秒。
  • 在某些硬件/软件组合上,编译Linux内核花费了99秒。

另请参阅https://en.wikipedia.org/wiki/基准_(计算)#Types_of_benchmarks

微基准测试是基准测试的一种特殊情况。如果操作正确,它将告诉您哪些操作成本高昂,哪些操作成本低廉,这在尝试优化时会有所帮助。如果做错了,那么您甚至可能根本没有测量过要测量的东西。例如,您编写了一些C来测试循环和while循环,但是由于不同的原因,编译器编写了不同的代码,因此结果毫无意义。(使用现代优化编译器,表达相同逻辑的不同方法几乎无关紧要;不要在此浪费时间。)微基准测试很难。

表示它是微基准的另一种方法是,您通常需要查看编译器的asm输出,以确保它正在测试要测试的内容。(例如,它没有通过重复执行10M次循环而在循环中提升一些昂贵的东西,而这种东西本应重复整个操作足够的时间以提供可以精确测量的持续时间,)

微基准测试可能会使事情失真,因为它们使用高速缓存高速缓存和分支预测变量预备测试您的功能,并且在被测代码调用之间不运行任何其他代码。当作为真实程序的一部分,它将导致更多的高速缓存未命中时,这可以使巨大的循环展开看起来不错。同样,它使大的查找表看起来不错,因为整个查找表最终都存储在缓存中。完整的程序通常在调用函数之间使足够的高速缓存变得脏污,以至于查找表并不总是会在高速缓存中命中,因此,仅计算某些东西就便宜了。(大多数程序受内存限制。重新计算不太复杂的程序通常与查找程序一样快。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Julia中基准测试和时间宏之间的区别

分析与诊断之间的区别(性能计数器和监视)

Hive(在Tez上)和Spark之间针对我的特定用例进行的性能基准测试

Java:宏观和微观基准之间的区别

基准测试和工作负载概念之间有什么区别?

类的函数包装的性能基准测试与仅构造函数调用和HaveSameMap的性能基准测试

jVisualVM中采样与性能分析之间的区别

MATLAB性能基准测试

Bigtable 性能基准测试

Google Chrome中常规和性能分析器模式之间的区别

CUDA中的矩阵向量乘法:基准测试和性能

如何对Python和Clojure的性能进行基准测试(比较)?

基准测试RAM性能-UWP和C#

性能测试与性能分析

riscv 基准测试中与 vvadd 和 mt-vvadd 的区别

验收测试和功能测试之间的区别?

功能测试和集成测试之间的区别

Golang:在消息包和JSON之间解析基准测试

对Qt5和C ++ 17容器进行性能和内存使用的基准测试

cssSelector和Xpath之间有什么区别,并且在跨浏览器测试的性能方面哪个更好?

验收测试和验证之间的区别?

简单基准测试中怪异的性能提升

您将如何基准测试功能的性能?

Java BigInteger 源代码性能基准测试

如何使用pprof工具分析基准测试?

分析OnPrem和AWS环境之间的SQL查询性能

Optaplanner基准测试和微调

功能测试和端到端测试之间的区别

测试设计规范和测试设计文档之间的区别