【发布时间】:2013-08-20 22:14:51
【问题描述】:
有没有一种快速/简单的方法来做到这一点(至少粗略估计)?
我正在对算法进行基准测试,我认为知道我的计算机执行指令的绝对速度并将其与我的渐近分析进行比较会很酷。
【问题讨论】:
-
不,真的没有(一种简单的方法)。问题相当简单:您的计算机可以执行的指令数量(很大程度上)取决于这些指令的混合和顺序。获得一个意味着任何事情的结果通常涉及一些知名基准的结果——但有意义的基准通常相当复杂。即便如此,您也必须小心——这些数字通常意味着比预期的要少。
-
@DanielKO Whetstone 基准测试最初是用 Algol 编写的,基于大约 1970 年从英国国家物理实验室收集的统计数据,但仅使用四元素数组来测试数组访问。然后将其翻译成 Fortran。 Dhrystone 基于类似的原理,用不同的语言,用 Ada 编写,但翻译成 C。大约 30 年前,当我第一次研究 Whetstone 时,我认为它已经过时且不切实际。
-
@DanielKO 关键是四个元素数组和访问它们的循环可以以不适用于更大数组的方式进行优化,而四个是Whetstone中唯一的数组大小。虽然我查阅了维基百科的日期,但早在维基百科出现之前,我就知道了 Whetstone 的历史。
-
'这个有 30 年历史的基准仍然被广泛使用,因此它是最接近“粗略估计”的基准'。我是否错过了使 结论看起来合乎逻辑的重要信息? :)
-
如果你使用原始的 Dhrystone 基准并用 gcc -O3 编译它(几年前),你会得到幻想的数字,因为(至少)其中一个循环变成了虚无,因此花费零时间。每秒指令数是指令数/时间 -> 无限数。但是总的基准不是零,时间,所以你最终会得到一些幻想数字在 100-1000 倍的处理器的理论值。您可以采取一些技巧来使编译器相信您需要循环内的代码,但这不再是原始来源。此外,Drhystone 基于 VAX 指令。
标签: c++ c algorithm sorting benchmarking