CPU这东西,大家除了关注工艺、主频、核心数量等规格信息之外,更在意的应该就是性能表现了。反应CPU性能的测试可谓是相当多样,但要说起最权威的,那就不得不提SPEC CPU测试了。
SPEC的全称是Standard Performance Evaluation Corporation,翻译过来是标准性能评估组织,它是一个全球性的第三方非营利性组织,由计算机厂商、系统集成商、大学、研究机构、咨询等多家公司组成,目标是建立、维护一套用于评估计算机系统的标准。
在CPU性能测试上,SPEC CPU 2006是SPEC组织推出的最新版的软件(上一个版本SPEC CPU 2000已经基本没有人用了),同时也是最受行业认可的测试软件。SPEC CPU 2006包括了CINT2006和CFP2006两个子项目,前者用于测量和对比整数性能,而后者则用于测量和对比浮点性能。在各种处理器的SPEC CPU 2006测试结果上,我们往往会看到ICC或是GCC的字样,那么ICC和GCC又分别代表什么呢?
ICC:
全称Intel C++ Compiler,是Intel开发的C/C++/Fortran编译器套装,适用于Linux、Microsoft和Mac OS X操作系统,没有非IA指令集版本(就是说仅供x86架构CPU使用)。ICC广泛应用于高性能计算、分布式计算等商业计算领域,其向量化和并行化性能是业界的标杆,能够充分发挥现代处理器的特性。
▲ICC编译器套装提供两个版本,针对高性能计算机测试采用前者,而后者面向嵌入式及移动设备。
GCC:
全称GNU Compiler Collection,GNU编译器套装,是广泛应用的Linux系统的默认编译器(特别是用于编译Linux内核)。GCC能够支持多种架构的处理器,跨平台特性相对出色。不过,GNU组织要求全部的代码由自己完成(防止版权问题),所以GCC虽然有广泛的硬件支持,但是在各硬件平台上却并不是性能最优的编译器。
▲GCC官方LOGO
所谓编译器,就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言→汇编语言)”的程序。它的主要工作流程:
高级语言源代码→预处理器→编译器→汇编语言,汇编语言再经过汇编器→目标文件→链接器生成可执行程序。
在这个流程中,高级语言指的就是源代码,如Pascal、C、C++、fortran、Java等,而目标文件指的是包含CPU可以执行的二进制指令的集合。也就是说,编译器起到的作用就是将程序源代码“翻译”成汇编语言,既然是“翻译”工作,往往就有Good和Better的区别,而从上面的介绍我们能够看出,不同的操作系统,能够使用的编译器是不同的,那这个编译效率自然也就存在差异。
同时,CPU也是区分不同架构的,比如x86、MIPS、ARM、Power等等,不同架构的CPU往往运行不同的操作系统,如x86架构CPU可以运行Windows、Linux(Android)和Mac OS X,而MIPS等其他架构CPU往往只能运行基于Linux开发的操作系统。
所以,不同架构的CPU,根据适合的操作系统,在SPEC CPU测试过程中编译器的选择上是不一定是唯一的,而选择哪一种编译器,
站在CPU研发者的角度上,无疑会选择能让CPU性能发挥到最大的编译器。
通过前面对ICC和GCC的解读,不难看出两者的区别。ICC和GCC都可以运行在Windows和Linux下,Intel是x86架构CPU的老大,配合x86架构CPU开发了ICC,能够最大程度的发挥出x86架构CPU的真实性能。GCC能够配合更多种类架构的CPU加以使用,适用平台更广,但从CPU性能发挥的角度上看,大而广很难和专而精比拼。
但是,综合x86 CPU和Windows系统的市场占有率这两个因素来看,在CPU测试过程中,ICC和GCC的采用率又是怎样呢?