泡泡网CPU频道 PCPOP首页      /      CPU     /      评测    /    正文

微软是祸首? Intel游戏落败深入分析

    编者注:本文采用编译加原创方式,以下部分文字编译自extremetech,该网站也声明了并非支持这位程序员的观点,而且仅对一个游戏进行分析也很片面。希望本文能够抛砖引玉,大家进行更深一步的探讨,特别是希望程序员们能谈一下自己的观点。由于笔者并非专业程序开发人员,唯恐翻译不准确给大家带来的误会,也将必要的原文附上。

{imageTitle}

    在整个2005年,计算机业内最热闹的当数Intel和AMD两大巨头的争斗,从市场到法院,甚至还要摆擂比试。对于消费者来说,最关心的是性能和价格,各种测评横比层出不穷。

{imageTitle}

    各种测评的结论只有一个,同档次的处理器中,Intel的产品性能不及AMD,价格比AMD还高。每次测评结果都让AMD的Fans们扬眉吐气,Intel的支持者当然也不会服气,争论此起彼伏。

{imageTitle}

    所有的人都在想:Intel到底差在哪里?

    我们做了一个简单的概括,其原因在于以下四点:

1、CPU的核心电路的设计

2、流水级数不同。例如:流水线级数Intel 0.09UM Precott核心级数是32,AMD 0.09UM Venice 核心的级数是24级,在处理数据的时候Intel的质量好于AMD ,在游戏的时候AMD处理效率更优。

3、AMD的专利技术(3D Now!Professianl)是处理3D的强项

4、AMD的Athlon 939系列的CPU都内植了内存双通道控制器,在读内存数据时的效率好于Intel,Intel CPU只能通过另外的芯片,主板北桥的内存双通道控制器。

{imageTitle}

    有人认为AMD在处理器中集成内存控制器是根本原因,有人认为是流水线长度等架构问题导致了Intel的落后。可能所有的人都是从硬件上来探讨,忽略了计算机系统包括硬件和软件两大部分。

{imageTitle}
 
    最近国外www.extremetech.com网站刊登了一封程序员的电子邮件,其中心思想是,Intel不及AMD也有微软错!让我们进行一次深入的了解。为了能更好的说明问题《1993-2005:地球77款CPU对决18项测试》,先让我们来看一些主流游戏性能上的测试,一共77款处理器的对决,最后结果非常清楚明了。
    Doom 3利用了最新的显卡技术,并把CPU的处理能力推到了绝对的极限。在它的最高设置Ultra Quality下,纹理大小超过了500MB,那意味着即使是下一代显卡也将很难兼顾所有的东西。每个测试运行三次,取第三次运行的结果。Doom 3引擎是现今顶尖的实时着色引擎,它是我们用来“折磨”显卡的,但是对CPU的要求也同样不低。

1993-2005:地球77款CPU对决18项测试
 
1993-2005:地球77款CPU对决18项测试

    Doom 3中,1024 x 768分辨率下,AMD顽胜对手。

1993-2005:地球77款CPU对决18项测试

    Doom 3中,在1280x1024分辨率下,AMD和Intel互有胜负。

1993-2005:地球77款CPU对决18项测试

1993-2005:地球77款CPU对决18项测试

    QUAKE III中还是AMD相对领先Intel。

       这款游戏虽然命名为2004,但采用的仍是上一代UT2003的图形引擎,也就是说UT2004仍然是一款基于DirectX8.1的游戏,而并非大家所猜想的DirectX9,这不能不说是一个遗憾!虽然如此,UT2004超强的图形表现还是进一步提高了对系统。

1993-2005:地球77款CPU对决18项测试
 
1993-2005:地球77款CPU对决18项测试

    虚幻竞技场2004 (Unreal Tournament 2004) 是一个受欢迎的FPS游戏,我们的测试采用timedemo的方法。Unreal Tournament 2004中也是AMD以绝对优势领先对手。

《Far Cry》游戏的完美画面与《虚幻2》不相上下。受大众喜爱的引擎“ragdoll physics”完全达到效果。绝对的全屏抗锯、纵深场景的细致刻画、真实的物理效果、实时光影效果……游戏在画面上的表现可以说已经达到了CG品质,比起去年E3上技压群雄的《DOOM 3》也是毫不逊色。

1993-2005:地球77款CPU对决18项测试

1993-2005:地球77款CPU对决18项测试

    FarCry中还是向AMD一边倒的情况。

● Battlefield 2
 
Intel再拼AMD!28款CPU战5大主流游戏

    Battlefield 2在今年夏季发布,是当前最流行的军事战略游戏之一,对显卡的要求不是非常高。我们之所以挑选这款游戏除了因为流行外,还有另一个理由,就是和其它的射击游戏不同,Battlefield 2更多的是需要CPU资源,而不是显卡资源,更符合本篇文章的主题。

Intel再拼AMD!28款CPU战5大主流游戏
 
    从整体测试成绩来看,AMD依旧优于Intel。而Battlefield 2不支持双核心的毛病也必显无疑,因此,从测试上体现,由于双核心频率低于高端的单核心,双核心所获得的帧频也普遍低于单核心。缓存对Battlefield 2性能的影响也只在K8架构中才会出现。Pentium 4 5xx和Pentium 4 6xx性能差距都不超过5%,而Athlon CPU情况就不同了。1MB二级缓存的CPU性能要比512KB高10%-15%。
 
Intel再拼AMD!28款CPU战5大主流游戏
 
    另外我们也使用Athlon 64 FX-57测试了一下内存容量对游戏的影响。所使用的DDR400时序2-3-2-10。测试结果显示,1GB和2GB差距不大。
● Quake 4
 
同引擎之争!DOOM3/Quake4性能大比拼
 
    Quake 4采用了和Doom III一样的游戏引擎,但是无论是画面质量还是游戏质量都超过了其前任,另外,对系统资源的要求也高于Doom III。
 
Intel再拼AMD!28款CPU战5大主流游戏
 
Intel再拼AMD!28款CPU战5大主流游戏
 
    同样,AMD处理器依旧领先Intel。同时,测试成绩也反映出,Quake 4对双核心进行了优化,因此在Quake 4实战中,表现最好的是双核心AMD Athlon 64 X2 4800+。
 
Intel再拼AMD!28款CPU战5大主流游戏
 
    内存方面,1GB和2GB依旧差距不大。
● Call of Duty 2
 
Intel再拼AMD!28款CPU战5大主流游戏
 
  Call of Duty 2也采用了和Quake 3一样的游戏引擎,对系统要求较高,重点在于显卡。Call of Duty 2对敌军行为模式通过scripts来管理,而不是AI。若采用AI的话则主要消耗CPU资源,所以这款游戏对CPU要求不算太高。Call of Duty 2性能主要取决于显卡
 
Intel再拼AMD!28款CPU战5大主流游戏
 
  从上面的成绩我们能看出,所有处理器获得的帧频都一般。这并不是意味着CPU太慢,而是这款游戏根本体现不出CPU性能。
 
赛扬D挑战双核 11款CPU对决优品飞车9
 
赛扬D挑战双核 11款CPU对决优品飞车9
 
     在前5强中,AMD占据了3个位置,从《优品飞车9》这款游戏来看,各大高端处理器的差别并不大,只是低端处理器的性能下降有些严重。而低端处理器的超频能力不错,小小超频一样可以迎头赶上。
    3DMark2005显卡性能测试项目

1993-2005:地球77款CPU对决18项测试
 
    我们可以看到似乎Intel占据了一切的前排的位置,之前真实游戏性能下的Intel完全溃败,而在3DMark这样的理论性模拟测试上取胜,原因在哪里,大家应该清楚。
       微软在它的编译器的默认选项没有发挥处理器的性能,特别是对Pentium 4不利,而且微软的技术文档也在一定程度上误导了程序员。

{imageTitle}

    这位名叫Levichi的程序员在仔细阅读了一篇测评文章后,进行了深入的分析,通过对Battlefield 2进行了反编译,得出了两个结论:

1、 游戏是使用Visual Studio 2003 C++编译的
2 、编译采用了混合模式(blended mode),几乎没有任何优化。

     在微软MSDN网站上,对混合模式是这样描述的:

{imageTitle}

When no /Gx option is specified, the compiler defaults to /GB, "blended" optimization mode. In both the 2002 and 2003 releases of Visual C++ .NET, /GB is equivalent to /G6, which is said to optimize code for the Intel Pentium Pro, Pentium II, and Pentium III.

       当不使用/Gx选项时,编译器缺省使用/GB 混合模式。在Visual C++ .NET 2002和2003中,/GB等价于/G6,为Pentium Pro、Pentium II和Pentium III优化。

{imageTitle}

      微软推荐程序员为Pentium 4和Athlon系统编程时使用/G7。MSDN网站是如此描述的:

    The performance improvement achieved by compiling an application with /G7 varies, but when comparing to code generated by Visual C++ .NET 2002, it''s not unusual to see 5-10 percent reduction in execution time for typical programs, and even 10-15 percent for programs that contain a lot of floating-point code. The range of improvement can vary greatly, and in some cases users will see over 20 percent improvement when compiling with /G7 and running on the latest generation processors. Using /G7 does not mean that the compiler will produce code that only runs on the Intel Pentium 4 and AMD Athlon processors. Code compiled with /G7 will continue to run on older generations of these processors, although there might be some minor performance penalty. In addition, we''ve observed some cases where compiling with /G7 produces code that runs slower on the AMD Athlon.

     编译中使用/G7选项带来的性能提高情况不同,但是相对于Visual C++ .NET 2002产生的代码,这个选项通常对于典型程序可以缩短5-10%的执行时间,对于含有大量浮点运算的代码,甚至可以缩短10-15%。使用/G7选项编译带来的性能提高幅度变化很大,在最新的处理器上运行,在某些情况下可能有超过20%的提升。

{imageTitle}

     使用/G7选项并不意味着编译器产生的代码只能在Intel的Pentium 4和AMD的Athlon处理器上运行,仍然能够在以前的处理器上使用,只是性能会稍有损失。此外,我们注意到在某些情况下使用/G7选项产生的代码在AMD Athlon处理器上运行要慢一点。

      但是微软的这段描述也不确切,AMD的Athlon可能指的是32位的K7系列,如Athlon XP和更早的产品。而现在的90nm制程的Athlon 64系列支持全部的SSE、SSE 2和SSE 3指令集。

     在MSDN的文档中还暗示着,使用/G7选项产生的序列可能包含更多的指令,避免使用高延迟指令,在Pentium 4处理器上运行效率更高,就如同IMUL。

    我们回到Levichi的邮件:

... it would be logical to at least compile the game code with /G6 and /arch:SSE switches. That however, is not the case. I have checked it and the code uses only FPU, which is known to work slower on Pentium 4s. Moreover it uses pretty inefficient integer code too. Even /G6 would help a lot by enabling the compiler to generate conditional moves instead of many conditional branches, which are known to penalize NetBurst architecture so much.

    理论上讲,编译游戏时至少应该使用/G6和/arch:SSE选项,但事实并非如此。我检查了代码,只使用了Pentium 4上缓慢的浮点运算单元,此外还使用了效率低下的整数运算。/G6选项能够使编译器产生条件转移语句而不是条件分支,后者在NetBurst架构上会损失很多性能。

    程序员这样做可能主要是因为偷懒和非常紧张的游戏开发日程。Levicki认为游戏开发人员不会花时间手工优化代码,只是随意使用或不使用某个选项,使用Visual C++而不是Intel的编译器,因此产生浮点运算代码而不是SSE代码。

{imageTitle}

    再回到Visual Studio C++,微软的在线文档说明,使用/ARCH:SSE和/ARCH:SSE2选项编译后能够自动发挥SSE/SSE2指令的优势。这并不意味这对AMD处理器会有什么不利影响,虽然理论上Pentium 4处理非闭环循环和Pentium 4特殊指令时比Athlon 64更有效,但在实际中很少有这样的情况。

    而SSE/SSE2对AMD也有好处,甚至AMD的前首席技术长官Fred Weber也说过,单指令多数据(SIMD)是浮点运算的发展方向。

{imageTitle}

(注:单指令多数据技术是在一条指令内完成多对数据的运算,实质上是通过并行处理来提高处理器吞吐率。Intel在PentiumII的MMX技术中,就采用了SIMD,MMX是面向整数运算的,PentiumIII和更新处理器的SIMD技术是面向浮点数的。SSE就是Streaming SIMD Extensions的缩写,扩展SIMD指令流。)

{imageTitle}

    通过与几位游戏游戏开发人员交流了解到,他们在编译的时候对一些可选项非常谨慎,因为对大型软件这些可选项可能会导致编译中断。不使用编译选项有制度方面的原因,也有程序员偷懒的因素。他们每周工作80多个小时,没人有功夫去尝试编译器的选项。

     还有一个非常重要的因素,就是目前很多游戏都使用了第三方的类库和引擎,包括物理引擎、AI引擎、声音处理类库等等。在这种情况下,开发者只优化自己的代码几乎不会有什么提高。

      如果您是游戏程序员或者中间件开发人员,我们非常希望得到你们的观点。您在编程的时候考虑到为所有处理器架构做优化了么?有没有尝试过编译器的选项?为什么?<

0人已赞

关注我们

泡泡网

手机扫码关注