游戏优化(普游戏优化加速软件)原创太平洋电脑网2019-07-27 00:22:57
1CPU 1的多核优化难度有多大?
【PConline杂谈】随着AMD锐龙空的诞生,电脑CPU进入多核冲击时代。在同系列产品中,核心翻倍在我们公司已经司空见惯空。据透露,英特尔下一代CPU的i3将配备4核8线程——这种CPU,三年前它的名字是i7。在高端系列中,核战争更令人恐惧。在售的12核24线程AMD锐龙3900X足以让人倒吸一口凉气,而即将推出的3950X搭载16核24线程,几帧的粉丝都表示把持不住,喊yes根本停不下来。
但是,多核CPU玩游戏会更快吗?不一定。排除频率和架构IPC的差异,在某些情况下,多核CPU玩游戏甚至会更慢——比如在某些情况下,AMD新出的12核3900X在某些游戏中比8核3700X慢。
测试表明,内核更多、频率更高的3900X在某些情况下不如3700X。
要知道,从规格上看,3900X完全压倒3700X,别说多了四个核心,就算是频率更高(3.8/4.6GHz vs 3.6/4.4GHz),三级缓存也翻了一倍(64MB vs 32MB)。那为什么多核玩游戏比较慢?今天就从这个现象出发,来说说CPU和游戏优化。
游戏的多核优化难度有多大?
先说游戏的多核优化。谈游戏的优化,不能回避多核的支持。什么游戏是多核优化的,什么游戏只能是单核难,多核围观永远是玩家津津乐道的话题。为什么游戏在优化多核上有问题,而视频压缩等应用却能充分利用多核?这和游戏的运行机制有关。
为什么游戏喜欢用单核?
视频压缩任务很容易实现并行计算,比如一个线程压缩某个片段,另一个线程压缩另一个片段,多核协同工作,最后压缩所有片段,压缩完整的视频。但游戏的操作一般是线性的,某一步的操作往往与前一步紧密相关,很难充分利用多线程。
多核在渲染和转码方面表现不错,游戏就不一定了。
举个例子,在FPS游戏中,如果玩家被击中造成伤害,那么伤害结果就和子弹弹道有关,需要先计算子弹弹道再计算伤害。这只能在一个接一个的线程中完成,不可能通过多线同时计算出子弹弹道和伤害。为了充分利用多核,游戏需要巧妙地将计算任务拆分成多线程。例如,不同的线程负责物理碰撞、AI行为等。技术门槛比较高,需要付出更多的努力。基于此,中仍有大量游戏未能充分利用CPU的所有核心。
支持多核一定要优化好吗?
随着时代的发展,越来越多的游戏愿意在多线程优化上发力。比如前几年我们经常看到“i3”的情况,现在游戏大作把门槛提高到了4核,双核i3就成了尴尬。不过还是会有12核3900X性能不如8核3700X的情况。为什么呢?
这种情况主要在于CPU核的调度不合理。瑞隆的建筑比较特别。每四个内核封装为一个CCX,每两个CCX封装为一个CCD。内核之间的通信可以跨越CCX甚至CCD,CCX和CCD之间的通信存在延迟。
Zen2架构,可以看到核心的拓扑结构——CCX——CCD。
换句话说,如果一个程序可以调用多个内核,会出现以下情况。
1.被调用的多核在同一个CCX,延迟最小;
2.被调用的多核跨CCX,但在同一个CCD里,延时;
3.所谓多核跨越CCX和CCD,延迟最大。
比如一个游戏可以调用4核,理想的情况自然是在同一个CCX中调用4核,从而获得最佳性能。但是,实际上代码对多核的调用并不一定那么智能,很有可能无法识别哪些核位于同一个CCX上。因此,游戏可能会调用位于不同CCX和CCD的多个内核,额外的延迟会导致性能损失。
知道了这一点,就可以解释为什么有时候3900X的游戏性能比3700X低了。3900X封装包含两个CCD,每个CCD有两个CCX,每个CCD有四个内核,总共4x2x2=16个内核,屏蔽四个内核后有12个内核。而3700X只有一个CCD,包括两个CCX,总共4x2=8个内核。可以看出3900X比3700X多了一个CCD,可能会造成额外的延迟。如果游戏发挥不出3900X的多核优势,那么3900X略逊于3700X也在情理之中。
Windows 10 1903对Zen架构的优化之一是核心调度逻辑,它首先调用同一个CCX中的核心。
所以游戏即使优化了多核,也需要在核调度上多下功夫,才能达到最佳性能。可喜的是,微软已经意识到了相关问题,并在Windows 10 1903中进行了优化。系统将优先调度同一CCX中的内核,以避免跨CCX造成的延迟。如果想充分发挥AMD锐龙处理器的性能,有必要升级到Windows 10 1903。
2CPU单核性能真的是挤牙膏?
CPU单核性能真的是挤牙膏吗?
有人认为,目前CPU在频率上很难有性能突破,架构也很难进一步提高效率。核心是提升性能的必由之路。有朋友从英特尔的《挤牙膏》中论证了这一观点,认为CPU的同频性能多年来一直停滞不前,而AMD的Zen2架构尽管效率较上一代大幅提升,但也只是在追赶竞争对手的横向。用几年前的4核CPU和现在的4核CPU玩游戏似乎没什么区别,这也是一个有力的证据。但事实是这样吗?
其实这种观点是片面的。若干年前的CPU之所以在一些测试和游戏中表现出色,是因为这些测试和游戏并没有对新CPU的指令集进行优化。近年来,新CPU的一大价值在于增加了AVX、AVX2、TSX等指令集。如果代码调用相应的指令集,它可以更有效地利用像FMA这样的浮点乘加混合单元,减少空闲的CPU流水线,并大幅提高性能。
这些都是近十年来逐渐增加的指令集,并不是说没有反应堆核心或者牙膏。
以著名渲染软件Cinebench为例。这是一个DIY玩家相当熟悉的CPU测试工具。与旧的Cinebench R15相比,最新的Cinebench R20增加了对AVX指令集的支持。在CPU对AVX指令集有很好支持的情况下,同样的渲染项目在Cinebench R20中运行,甚至比Cinebench R15快一倍以上!这表明新的指令集在性能上有了很大的提高。
Zen2单核性能提升这么多,很大程度上是因为AVX2性能有了很大的提升。
支持AVX或更新版本的指令集已经逐渐成为渲染、视频压缩和科学计算等专业领域的规范。著名的Linux发行版Fedora 32甚至计划不支持没有AVX指令集的CPU。但仍有大量游戏没有跟进AVX等新指令集,仅支持旧的SSE。运行这些游戏的新CPU自然和旧CPU差别不大。在指令集支持方面,游戏仍然缺乏对CPU的适当优化。
著名的游戏性能测试组件3DMark已经意识到了这一点。在新的Time Spy极限测试项目中,加入了AVX、AVX2甚至AVX512指令集支持,调用AVX512指令集运行评分,评分比SSE3高出一倍以上。
AVX和其他新的指令集在实际游戏中越来越重要。比如《刺客信条:奥德赛》甚至不支持没有AVX指令集的CPU(因为太激进了,后来还得重新兼容老CPU)。比如一些使用D加密的游戏,需要FMA3指令集解密才能正确运行,早期的“神U”e 1230v 2只能干瞪眼。如果你是一个PS3模拟器玩家,你已经体验过TSX指令集下的性能飞跃。
育碧的新刺客信条曾经不支持没有AVX指令的处理器,新游戏会越来越重视高级指令集。
总的来说,大部分游戏的指令集优化还是不够。在没有指令集优化的情况下,老款CPU和新款CPU的游戏性能并不能得到太大的差别。但是,支持新的指令集是游戏CPU优化中不可回避的环节。只有使用新的指令集,新的CPU才能显示出应有的价值。希望更多的游戏可以优化新的CPU指令集。
(在讲故事时)待后处理的事物
无论是增加CPU内核多线程,还是使用新的指令集来提高SIMD性能,都可以大大提升CPU性能。就消费市场而言,AMD似乎更多走多核路线,而英特尔则致力于实现新的指令集。但无论是哪种发展方向,都需要相应的软件对此进行优化,才能充分发挥CPU应有的性能。
不再是新CPU不改一行代码就能发挥全部性能的时代了。多核和高级指令集,限于缺乏游戏支持,不得不沦为“为未来而战”。CPU不是挤牙膏,游戏对CPU的优化远没有结束。希望以后能看到更多能发挥CPU真正威力的游戏。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@xxxxxxxx@hotmail.com 举报,一经查实,立刻删除。