基准评测
衡量性能的最佳基准选择是真实的应用程序,例如第1.1节中提到的谷歌翻译。试图运行比实际应用简单得多的程序已经导致了性能上的缺陷。这方面的例子包括
内核,它是实际应用中的小的、关键的部分。
玩具程序,这是初级编程作业中的100行程序,例如Quicksort。
合成基准,这是发明的假程序,试图与真实应用程序的运行情况和行为相匹配,如Dhrystone。
今天,这三种方法都是不可靠的,通常是因为编译器作者和架构师可以合谋使计算机在这些替身程序上显得比在真实的应用程序上更快。遗憾的是,你们的作者--在本书第四版中放弃了关于使用合成基准来描述性能的谬论,因为我们认为所有的计算机架构师都认为这是不可靠的--合成程序Dhrystone在2017年仍然是嵌入式处理器最广泛引用的基准!
另一个问题是基准测试的运行条件。提高基准性能的一种方法是使用特定于基准的编译器标志;这些标志往往会引起在许多程序上不合法的转换,或者会减慢其他程序的性能。为了限制这一过程并提高结果的重要性,基准开发人员通常要求供应商对同一语言(如C++或C)的所有程序使用一个编译器和一组标志。除了编译器标志的问题外,另一个问题是是否允许修改源代码。有三种不同的方法来回答这个问题:
不允许修改源代码。
允许修改源代码,但基本上是不可能的。例如,数据库基准依赖于标准的数据库程序,这些程序有数千万行的代码。数据库公司极不可能为提高一台特定计算机的性能而进行修改。
允许修改源代码,只要修改后的版本产生相同的输出。
基准设计者在决定允许修改源代码时面临的关键问题是,这种修改是否会反映真实的实践并为用户提供有用的观察(insight),或者这些修改是否只是降低了基准作为真实性能预测器的准确性。正如我们将在第7章中看到的那样,特定领域架构的设计师在为定义明确的任务创建处理器时,常常遵循第三种选择。
为了克服把太多的鸡蛋放在一个篮子里的危险,基准应用程序的集合,称为基准套件,是衡量具有各种应用的处理器的性能的流行方法。当然,这样的集合只会和它的组成部分——单个基准一样好。尽管如此,这种套件的一个关键优势是,任何一个基准的弱点都会因为其他基准的存在而有所缓解。基准套件的目标是,它将描述两台计算机的实际相对性能,特别是对于客户可能运行的不在套件中的程序。
一个值得警惕的例子是《电子设计新闻》的嵌入式微处理器基准联盟(Electronic Design News Embedded Microprocessor Benchmark Consortium,EEMBC,发音为 "大使馆")的基准。
它是一套拥有41个内核(kernel)测试的基准,用于预测不同的嵌入式应用的性能:汽车/工业、消费、网络、办公自动化和电信。EEMBC报告了未经修改的性能和 "full fury "的性能,在这种情况下几乎什么(修改)都能做。由于这些基准使用小内核,并且由于报告选项,EEMBC并不具有很好的预测现场不同嵌入式计算机的相对性能的声誉。这种不成功是EEMBC试图取代的Dhrystone仍然被使用的原因,令人遗憾。
创建标准化基准应用套件的最成功的尝试之一是SPEC(标准性能评估公司),它起源于20世纪80年代末为工作站提供更好的基准的努力。正如计算机行业随着时间的推移而发展一样,对不同的基准套件的需求也是如此,现在有SPEC基准来覆盖许多应用类别。所有的SPEC基准套件和它们的报告结果都可以在http://www.spec.org。
尽管我们在下面的许多章节中集中讨论了SPEC基准,但许多基准也是为运行Windows操作系统的PC开发的。
Last updated