# how long does `seq` take to count to 100,000,000/usr/bin/time seq 100000000 > /dev/null
输出:
1.16user 0.06system 0:01.23elapsed 100%cpu (0avgtext+0avgdata 1944maxresIDent)k0inputs+0outputs (0major+80minor)pagefaults 0swaps
…但返回的数字总是依赖于系统,从某种意义上说,它也衡量用户的硬件.
是否有一些非相对基准测试方法或命令行工具会在任何系统上(或至少是一个相当大的系统子集)返回大致相同的虚拟时序数?就像grep -m1 bogo / proc / cpuinfo返回a roughly approximate but stable unit一样,这样的基准也应该返回一个类似的持续时间单位.
假设对普通命令进行基准测试,我们有一个神奇的工具bogobench(其中“bogo”是一个形容词,表示“有点虚假状态”,但不一定与BogoMIPs有共同的算法):
bogobench foo bar.data
我们在两个物理上独立的系统上运行它:
> 1996年的奔腾II
> 2015 Xeon
期望的输出将是这样的:
21 bogo-seconds
因此,在两种情况下,bogobench应该返回大约相同的数字,即使它可能在第二个系统上完成的时间要少得多.
像qemu这样的硬件模拟器可能是一种方法,但不一定是唯一的方法:
>将代码插入到基准测试脚本bogo.sh中
>将bogo.sh复制到可引导的linux磁盘映像bootimage.iso,在bogo.sh将自动运行的目录中,然后立即关闭模拟器.在此期间,它输出某种形式的计时数据以解析为bogo-seconds.
>使用qemu的minimal -machine选项之一运行bootimage.iso:
qemu-system-i386 -machine type=isapc bootimage.iso
但我不确定如何使qemu使用虚拟时钟,而不是主机cpu的时钟,而qemu本身似乎是一个看似简单的任务的重工具. (对于这样的任务,真的是MAME或MESS将是比qemu更多才多艺的模拟器 – 但是我不熟练使用MAME,尽管MAME currently has some capacity for 80486 PC emulation.)
在线我们有时会将机器X上基于时间的基准测试与机器Y上的基准测试进行比较和对比.而我希望用户X和Y能够在虚拟机Z上进行基准测试,并为模拟X提供奖励积分或Y(如MAME),如果需要,除了不考虑X或Y的实际运行时间(与MAME不同,仿真通常可以播放).通过这种方式,用户可以报告程序在有趣情况下的执行情况,而程序员不必担心结果会因用户硬件的特性(例如cpu怪癖,占用资源的后台进程等)而产生偏差.
实际上,即使在用户自己的硬件上,基于时间的基准测试也可能不可靠,因为用户通常无法确定某些后台进程(或错误或硬件错误,如坏扇区或病毒)可能不会降级表现的某些方面.而更虚拟的基准应该不那么容易受到这种影响.
解决方法 我认为实现这一目标的唯一理智方法是使用周期精确的模拟器来进行某种硬件设计.AFAIK,没有适用于现代x86硬件的公开可用的周期精确模拟器,因为它非常复杂,尽管有很多关于x86微体系结构内部的东西(Agner Fog的东西,英特尔和AMD自己的优化指南,以及x86标签中的其他内容) wiki),足够的行为仍然是一个充满cpu设计商业秘密的黑盒子,它最多可以模拟类似的东西. (例如,分支预测绝对是最秘密但非常重要的部分之一).
虽然应该可以接近模拟英特尔SandybrIDge或Haswell的实际管道和无序核心/ ROB / RS(远远低于实时),但我没有人做过它.
但确实存在用于其他硬件设计的周期精确模拟器:Donald Knuth’s MMIX architecture是一种干净的RISC设计,实际上可以用硅片构建,但目前只存在于纸上.
从该链接:
Of particular interest is the MMMIX Meta-simulator,which is able to do dynamic scheduling of a complex pipeline,allowing superscalar execution with any number of functional units and with many varIEtIEs of caching and branch prediction,etc.,including a detailed implementation of both hard and soft interrupts.
所以你可以使用它作为参考机器,让每个人都可以运行他们的基准测试,每个人都可以获得可比较的结果,告诉你在MMIX上运行的速度有多快(在使用gcc编译MMIX之后).但不是它在x86上运行的速度有多快(大概也是用gcc编译),即使对于以不同方式执行相同工作的两个程序,这可能会有很大差异.
对于编程难题和Code Golf网站@orlp created the GOLF architecture with a simulator that prints timing results的[最快代码]挑战,正是为此目的而设计的.这是一个玩具架构,通过存储到0xffffffffffffffff来打印到stdout,所以它不一定会告诉你任何关于某些东西在任何真实硬件上运行的速度.
GolF,AFAIK没有完整的C实现,所以你只能用手写的asm来实现它.这与MMIX有很大不同,MMIX是优化编译器的目标.
总结以上是内存溢出为你收集整理的linux – 是否有标准的常量* nix基准,如果没有,如何制作`bogobench`?全部内容,希望文章能够帮你解决linux – 是否有标准的常量* nix基准,如果没有,如何制作`bogobench`?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)