这是一个有点枯燥的话题【CPU与显卡的关系】
【CPU可以当作显卡,而显卡也可以当作CPU】
在没有专门之用的显卡的计算机上古时代,所有图型和图像,均是由 CPU 来完成的,那时的 CPU 不光要进行普通的数据处理工作,还要进行图型的绘制,一点点CPU 频率的提升,都足以让用户感叹跨越了一个阶层。在上古时代的 CPU 中,主频是性能的一切(与现在超频党的怨念和疯狂是一样的),CPU必须依靠中断指令,在主要的数据执行串中,插入图像处理、音频处理等额外增加的内容。
在过去的老式电脑上,CPU需要借助外来的3D卡来实现三维场景中的运算任务。
在计算机的另一条路线上,则产生出了专用的图像处理器来协助CPU 进行程序与画面的共同任务。比如游戏机,这里取的例子是 FC 8位任天堂。它的CPU是 6527,核心源于与苹果II的 6502 CPU ,而在上世幻八十年代,FC的画面可以说碾压了同时代的 PC 机如 286\386 的效果。原因就是它多了一块 6538 的 PPU ,相当于给 6502 这个8位的 CPU 平台上,增加了一块专用于辅助图像处理的显卡。当时的程序做的很小,128K、256K等”金卡“是 FC 上大作的象征。当时的贴图是重复化的,把贴图分为若干可重复使用的固化图象符号,然后根据游戏场景的变化,产生出不同的组合,如下所示,你可以看到地面就是相同的贴图,天上的云和地上的树丛,就是变了个颜色:
受制于机能性能,上古的程序员采用一个个巧妙的方式呈现出精彩绝伦的”障眼“画面,成为很多八零后甚至九零后人生中不可或缺的成长回忆。
”障眼“法,并不是一对一精确对应,而是在有限的机能下,实现更多的性能体现。
学过编程的都知道思路有三个基本特点:顺序、选择、循环。
顺序好说,从第一行执行到最后一行,轮着来,在这一序列下谁也插不了队
选择也好说,通过不同的判断,来采取不同的或另一个执行顺序
循环,就是重复某一段代码的运算,只不过运算中的输入值会影响着每一次循环结果的变量输出。
以吃饭为例,主食是米饭,相当于正在执行的程序,肉菜是排面,相当于其它需要处理的程序。
你吃饭时,不能光扒米饭吧?中途在趁着嘴咀嚼的同时伸出筷子去夹菜。如果这个速度非常慢,你会看到一会儿吃饭,一会儿吃菜,桌子上的饭菜是依次递减的。如果这个速度拍成录相,提高了播放速度,那么高速的画面中,饭菜是同步被消灭完的。
什么时候伸出筷子夹菜,与什么时候埋头扒饭,执行者就你一个(没错,你就是 CPU),需要执行者适当的中断行为来决策新的动作的产生。
当你吃饭够快时,比如几十倍进食速度,我们看到的大体情况就是——同步完成的。而同步完成的条件就是你足够快。你要让远古的计算机来跑,本身速度就慢的一比,还让它各种穿插执行,这不是没事找抽么?
所以并行运算之根本,就是一个核利用运算空余时间再执行点其它的程序,如果上一个活的阶段任务完成了,它把当前执行的程序处于一个暂停的“保护状态”,再接前上一个活继续进行。就好比,一根烤串,全是瘦的,吃起来太柴,全是肥的吃起来太腻,夜市串摊上最好吃的串,一定是一块肥的一块瘦的穿起来的串。虽然有些女生大叫她要减肥只捡瘦的,但是这样吃更香啊!
CPU有点象今天互联的世界,各种贸易穿插,才能使地球村更加发达,你中有我,我中有你,动不动赞美战争生灵涂碳的,肯定不是什么好鸟。所以以人类社会文明发展的方式,制造出共同通用哲学准则的物理实物,一点也不意外。网上还调侃遇事不决量子纠缠呢。所以,如何在一个单体上实现更多的能力体现,是发掘 CPU 、体现人自身素质才能的唯一前进道路。CPU并不神秘,每个人都是 CPU ,我们所处的世界是每个个体共同组成的。爱生活,爱家人,爱自然,这扯的格局太大了——我编不下去了。
【CPU与显卡的关系】
正是因为 CPU 什么活都能干,只要给它发送指令,它就不折不扣的去执行,因此 CPU 的应用是通用化的,也可以叫做通用型中央处理器。
显卡出来之后,特别是GEF256 开始,显卡开始全面“托管”CPU的图型工作。
从 G80 时代的 GTX8800 起,为了让显卡的运算速度更快实现更多的复杂运算,显卡内部也采用了多个小型专用的运算单元(小小的CPU),这些小 CPU 擅长于处理连续性的或相类似的图像帧工作。因为一段动画,假如分多个帧,那么前一帧和后一帧必然有很多相似之处这是其一,帧与帧之间的运算过渡环境也有非常多的相似之处这是其二。由于多个连续性的帧处理之中,这些小CPU的运算均处于相同的执行算法,也因此它们比主板上的 CPU 老大更能胜任这个工作。这些小 CPU 也就是“流处理器-SP“,也叫作 ALU ,这些 SP 单元也叫做 CUDA,我们不必管CUDA单元怎么工作,但知到了它更擅长于并行计算,而且使 CPU老大的工作负担一下子变轻松起来。
这是显卡 GPU 的结构图,你不需要知道这个图的深遂含义,只需要知道,一个小绿格,就是一个 SP单元,在图中叫做 CORE (核心),大白话就是小 CPU:
GPU中的 SP ,在专业场合下比如深度学习,AI实时计算时,全部调用起来的作用非常大,甚至超过了 CPU。但是游戏显卡中的 SP单元的工作是尽可能在程序控制下,“还原”出游戏的设计目的。还原的越快,我们说这张卡速度很快,还原的越真实,我们说这张卡的技术性很高,还原的卡顿……我们可以说,CPU 的顶点坐标指令发送的慢,或者程序给 CUDA集群的具体指令不太明确。
CUDA是可以辅助 CPU 进行通用运算的,只不过尽管核心多,但执行效率会大打折扣,因为显卡在协助助 CPU 进行通用运算时,相当于把普通的任务“编码”成 CUDA 可以识别的类似于图像的流代码序列才可以执行。不过好在从 DX12开始,不需要这种转换过程了。也就是现代主流显卡,可以自主协助的运算效率会大大提升。但仍需要一个具体的指令才可以开始工作。而对于 AION 程序构架本身,发出的这个指令仍是来自于十几年前的……
在3D游戏中,每一个场景的构筑都需要显卡极大的工作量,屏幕上每一个景物都是由显卡根据图形透视原理,通过多个三角形的组合形成的,显卡既要保证近大远小的透视效果,还要根据第一视角的位置实现遮挡效果,这里自然对显卡的性能有着很大的需求。不过,CPU作为整个系统的中枢神经也有极为重要的地位。CPU在3D游戏中所起的作用就是对三维场景进行设计,显卡生成的每一个点都是由CPU规定。此外,CPU还要负责诸如游戏数据处理等工作,负担丝毫不亚于显卡。需要注意的是,如今的显卡GPU已经具备了相当的处理能力,可以有效减轻CPU的负担。然而,从另一个角度来看,CPU又可以模拟GPU的操作,使两者之间形成互补。
毫无疑问,片面地强调CPU或者显卡的作用都是错误的,毕竟两者是不可分离的有机体。不过,CPU与显卡在具体的操作流程方面还是有所分工。一般而言,CPU可以保证3D游戏的速度,而对画质、3D特效等不能产生太大的影响。相反,GPU在各种环境下都要对速度与画质两个方面做出最大的贡献。一般而言,建议你适当地在显卡上多加投资,这样会获得更好的效果。因为从理论上说,一旦游戏的分辨率以及颜色数提高,或者大量运用3D特效,显卡的负担将呈几何倍速提高,对像素填充率与显存带宽提出极高的要求。而DirectX硬件支持则完全依赖于显卡GPU本身的素质,如果你的显卡达不到这项要求,最贵的U皇也不能逆天。
在现在的 AION 环境中,CPU的作用高于显卡。因为 AION 太老了。目前的主流显卡闭着眼随便挑一块就行,没必要追求极致。
【根源】
游戏软件=构架引擎+图像引擎,构架是程序自身采用什么接口和方式让硬件去执行,图像是让显卡以什么方式来渲染。
让 CPU 所有运算单元全部被有效调用是构架的问题,多一个进度被同步执行,意味着场景中的同屏模型都被标识出顶点坐标,比如全面战争系列,角色更多同屏上万。但它的模型相似度太多,显卡执行起来无非就是复制粘贴,它的负载远低于CPU。
让GPU 所有 SP单元全部被有效调用是图像引擎的问题,在面对众多模型顶点坐标的数据来临时,把 SP 分成若干个并行的 CUDA 渲染小组,并行对模型以及场景进行处理,再送达显示器上。
所以构架是否优化,取决于编程者对底层内核要采用什么样的技术出发点有关。
而图像能否被高速完成多个模型的处理,则来自于图像引擎的流量分配是否送达与之对应的 CUDA 小组。
DX9和 DX10 有什么区别,DX12又有哪些改进,网上搜一下,就知道AION 不推倒重做是不可能的。
至于降低特效、降低分辨率就可以一定幅度的提升流畅感,这与 SHIFT+F12 的原理是一样的。因为不需要背负太多的图像运算工作,GPU 用很小的活跃比例就可以完成相对简单的工作任务。从这一点来看,CPU 到是处于一个比较容易“吃饱”的状态,而 GPU始终是无法吃饱的。因此GPU 效率能否提升,则是我们关注的主要话题。
在游戏软件的运行过程中,CPU需要负责整个程序框架的执行工作和对其它设备的协调工作。一个战场有一千人,即使同屏只能显示200人,那么另外800人的角色数据已经被缓冲预读,数据就放在内存里待命(内存越大,缓冲映射区就可以实现同步增大),在众多的角色处理中,CPU将发挥出最大并行计算的作用来对角色进行基础建模和伤害统计;而显卡就不一样,它可以只处理画面上显示的人物,而屏幕之外的人物GPU是基本不予理会的。比如我们在要塞战中,画面中有很多角色时,很卡,如果我们把画面旋转到没有人的地方,立即流畅感会提升起来。
DX10与DX9 的区别如下:
WINDOWS 7以后的操作系统尽可能的做到了第一类的工作条件,目前的主流 CPU 具备了第二类能力,而事实上 AION 自身的素质属于下图中第三类:
我们可以看到诸多角色,可以说明AION 在千人以上要塞战中不流畅这种情况并不是到了CPU 性能不够用非要超频的境地,而是显卡 GPU有力使不上。SHIFT+F12 立即流畅感有所提升,这就是让 GPU 甩掉了一大部分当前的任务压力。你干不好活,我就不让你干。要是 SHIFT+F12 画质降低还卡,那说明 CPU 真的不堪再用了。
使不上的原因主要有两个,一个是 AION采用的图像引擎应对这种密集角色场景的数据优化力不从心;另一个是服务器的响应不及时,其它玩家角色信息上传至服务器的过程,和本地机需要从服务器获得场景中的角色信息这个上下行的速度匹配成为了短板。
后续预告【AION的华尔兹——客户端与服务器端发生了什么?】