本帖最后由 largewc 于 2013-7-12 10:37 编辑
第三方调研公司ABI Research以安兔兔成绩盛赞Intel Atom处理器性能超过高通、三星一事其实是5月中发生的,今天EETimes上篇博文又谈到了这件事,认为ABI只用安兔兔成绩说事有些武断,他又列举了其他评测项目的成绩来反驳,并认为安兔兔从2.9.3版到3.x的评分机制变化导致Intel处理器得分大幅上升,所以才占到了优势。 没想到这件事并没有结束,既然双方争论的焦点是安兔兔软件,Anandtech论坛上就有一位爱较真的网友(应该是个程序员或者开发者)分析了安兔兔软件,结果却让人很震惊,他认为安兔兔有故意为Intel处理器优化甚至使用对ARM不公平的方式了评分。 如果此事成真,那么安兔兔的节操就要洒满一地了。 下面来看一下他的分析。 安兔兔是怎样的一个程序 首先是解包安兔兔程序,APK程序实际上就是一个标准的ZIP压缩文件,这一步没什么难度。解包后在lib库中发现了X86和ARM-v7a目录,分别对应Intel和ARM处理器。然后再解包libabenchmark.so文件,他用的是objump软件。 下面就来理解一下安兔兔软件的根基了,原文作者从解包出来的文件中发现安兔兔实际上就是nbench,因为二者的功能及函数之类的东西都是一样的,我们可以说安兔兔的CPU整数和浮点测试都是基于nbench的,后者的源码地址在http://www.tux.org/~mayer/linux/bmark.html。(原来安兔兔的测试部分不是自己开发的,也开源程序DIY的啊) 现在继续我们的目的,揭开为啥安兔兔3.x测试中Intel处理器跑分这么高的原因。之前EETimes一文质疑的原因就是在于从2.9.3版升级到3.0之后,Atom处理器总分及内存测试分别提升了122%、292%,而三星Galaxy S4只提升了53%、59%,这其中的区别耐人寻味。 Atom超高跑分第一个疑凶:编译器 找出的第一个“疑凶”是编译器,安兔兔针对X86使用的是ICC编译器,这是一种公认的高质量矢量化编译器,而矢量化恰恰是ARM处理器不擅长的,因为后者缺少整数NEON指令。 安兔兔针对ARM处理器使用的是GCC编译器,而且也不支持ARM的NEON指令,因为存在着Tegra 2这样早起的处理器不支持NEON指令的情况,但是现在来看这些不是理由,NDK中使用独立代码支持NEON指令不是难事,这也是Google的文档中标准的开发范例。 令人奇怪的就是安兔兔不按照Google的开发范例支持原本应该支持的功能,却对不属于NDK标准支持之内的ICC编译器青睐有加。 编译器的问题只是一个开始,下面还有更精彩的,它们的作用甚至比编译器更“出色”。 第二疑凶:代码优化 Nbench测试时会检查CPU是怎样执行简单的按位操作的,包括shift位移、and加、or或等,为了执行这些,它会在内存载入一系列bit,每次载入一个,具体的代码如下: 再来看ARM和X86是如何具体执行的。 ARM处理器执行的代码
X86上的代码在做的是讲整个32bit运行到0或者1,其中的f64c3和f64c6是关键。它用这两个指令取代了ARM循环中的32次迭代。这个的作用就不需多说了,X86用这种方式获得了十多倍的运行速度提升。 这种做法打破了整个测试过程。当编译器本来打算用一些被测试程序认定为正确的操作来提升测试程序的性能时,它实际上并没有执行真正的测试程序功能。典型的例子就是如果结果没有被读取,它就省去了代码,或者是在输入数据被认为是常量时,它可以将原本需要的运行时间缩减到只需编译时间即可。 在这种情况下Intel肯定会宣称这是他们正当的优化而已,但是原文作者不赞同,认为这种优化很难被当做正常的代码,用处也很有限,因为没谁会用这样的代码来执行。这种伎俩更应该被认为是一种作弊,因为当运行长度不是非常大的时候它甚至会更慢。 更重要的是,这种优化是在最近的一次版本升级中才出现在ICC中的,作者不认为他们是最近才发现了这种优化的价值,更可能的情况是他们发现这种优化可以数倍提升安兔兔分数,或者这也可以解释为什么最近曝光的下一代Atom处理器在1.1GHz频率下都能以4万的高分秒了2.3GHz的骁龙800了。 我们简单归纳一下作者的观点和论据:Atom处理器跑分高有两个原因,一个是编译器的原因,X86使用的ICC编译器优化很好,而针对ARM所用的GCC编译器甚至都不能支持ARM的NEON指令。第二个就是安兔兔代码中,将X86运行测试程序的代码“优化了”,只需2个指令就能完成ARM处理器需要进行的32次迭代,但是这种优化对实际性能没有好处,这种反常的设计颇有寻味之处。 原文最后把矛盾的焦点转向了安兔兔,因为他们默认了这样的性能提升,还认为安兔兔有可能是收钱了(probably for a price),不然这些反常的现象是没法解释的。 Intel、ARM出面掀起新高潮 原文的翻译差不多完了,因为是技术文章,个别语句可能把握的不够准,不过大体意思我们是知晓了的。我能这么早看到这篇文章其实是微博所赐,发这个链接的正是ARM移动市场经理王骏超EW,微博发出之后很快就有人回复,其中一个人则是Intel中国研究院首席工程师吴甘沙,看完Intel对ARM还是很关注的嘛,这让人想起了钱钟书说过的一句话:情敌之间的挂念有时候要比情人之间的牵挂还要多。
王先生虽然发了链接,不过自己并没有说太多,但他显然是站在揭黑幕、维护ARM的立场上的,而吴先生也客气地解释了这个问题,他认为编译器也是架构竞争力的一部分,用ICC无可厚非,而且ARM的NEON指令是比不过Intel的SSE 4.x指令集的。他还认为原文的分析并不能解释Atom在安兔兔多数程序上的优势。 总之,现在这件事已经多多少少地从媒体牵扯到了ARM、Intel两家公司出面了,而涉及最深的应该是安兔兔,目前还没有他们的表态,只是从这篇文章的分析来看,安兔兔不管有没有收钱,在这件事上都是有不光彩行为的。 去年华为发布Q1四核之后,安兔兔突然在其英文版网站(选择的还不是中文官网)上义正言辞斥责华为K3V2处理器作弊,因为在相关代码中发现K3V2会针对测试程序全速或者超频运行,而在日常应用中却降频使用,安兔兔好一副公正无私的表现。 当然,华为是大公司,大风大浪见多,安兔兔的指责也没改变他们把K3V2当成万年宝贝用在旗下多款高端甚至旗舰手机上。 看来不论是什么人或者什么公司,节操都不会第一位的,哪怕碎了一地也可以捡起来继续。
|