(二)移动 GPU 和桌面 GPU 的差距有哪些?

您所在的位置:网站首页 手机gpu差有什么影响 (二)移动 GPU 和桌面 GPU 的差距有哪些?

(二)移动 GPU 和桌面 GPU 的差距有哪些?

2024-06-10 03:26| 来源: 网络整理| 查看: 265

 

转自:https://www.zhihu.com/question/20720436

来源:知乎 著作权归作者所有。

移动处理器发展至今,有人曾经拿出数据比较三星5250处理器和桌面版i3,atom处理器的cpu性能,但为什么没人比较过移动版GPU和桌面版的区别呢?是因为应用的操作系统不同无法直接比较?还是架构不同?比如现在桌面的GT650和544MP3的比较?(虽然肯定是不如,但差距在哪里?有多大?)

answer1:

移动GPU和桌面GPU最核心的差别在于渲染流程不同。目前主流的移动GPU,无论ARM、高通还是Imagination,其GPU都是TBR(Tile Based Rendering)。而桌面GPU,无论NVIDIA、AMD还是Intel,都是Immediate Rendering. 下面我就来说说什么叫TBR,什么叫Immediate Rendering。

说在前面:

从opengl定义的GPU pipeline来看,一帧3D场景是通过以下几个过程渲染出来的。

“Vertex前端”(负责准备数据和Vertex Shader指令)->"Vertex Shader"(计算定点位置,颜色,纹理坐标,光照,等相关工作)->"Primitive Assembly"(负责组装图元,比如三角形; 坐标系变换,物体坐标->世界坐标->透视变换->屏幕坐标;视锥剪裁;Culling正反面选择)-> “Rasterizing”(光栅化,就是将立体场景投影到二维屏幕的过程)->"Early Z/S"(前期depth和stencil测试,决定一个fragment是否被渲染,从而降低后期fragment shader的负担)->"Fragment Shader"(对一个fragment,即像素,进行渲染。可能涉及到读取纹理texture。)->"Post Z/S"(后期depth和stencil测试,有些应用在fragment shader中可能会改变该像素的深度值)->"Blending"(将此次渲染结果和之前的渲染结果进行混合)。

1. Immediate Rendering

Ok,说到这所谓的Immediate Rendering,就是将一个图元(最常见的是三角形),从头到尾走完整个Pipeline,中间没有停止。这种结构,控制简单,容易实现。问题是在做blending的时候需要从存储单元中不断读回之前render的结果,可想而知在绘制一个大的场景时这个带宽消耗是比较大的。

那为什么桌面GPU会采用这个架构。首先,历史原因,最开始设计opengl pipeline的人,正是这些设计桌面GPU的大咖们。不过,最重要的一点是,桌面GPU都是有自身显存的,它不需要通过系统总线从系统的DDR memory中读回数据。所以开销比较小,是完全可以接受的。但移动端的处理器(基本是可以认为都是ARM处理器)都是统一寻址的。所有的IP都是使用统一的DDR存储空间,这样读回Pixel进行blending就变成了一件非常奢侈的事情。它会严重占用系统带宽,不但功耗提升,而且会影响整个SOC的处理能力(可以想象北京上海的堵车场景)。为了解决这个问题TBR便应运而生了,下面该TBR出场了。

2. TBR

TBR是Tile Based Rendering的缩写。首先来认识一个概念Tile。什么是Tile,你可以把它看成一小块屏幕区域。比如一个屏幕的分辨率为256x256,假定一个tile的大小是16x16,那么这个屏幕可以看成是由16x16个Tile组成。TBR的精髓就是一个Tile一个Tile的渲染。这样只需要给GPU配上一块很小的片上cache(足够装下一两个Tile的内容就行),就能实现高效的blending。那么,问题来了,根据前面讲述的GPU pipeline来看,只有在光栅化的时候才能知道每一个tile中包含的fragment,如何才能做到一个tile画完再画另一个tile呢。这里就需要一种机制将整个场景的图元信息(最主要的是位置)都保存下来,并且能在做光栅化时快速的检索出属于这个Tile的图元。所以所有的移动GPU中都会有Tiler这个模块,这在桌面GPU中是没有的。每个厂家的Tiler实现都是机密,这里不予讨论。我们只要知道Tiler能接收vertex shader的运算结果,并在光栅化之前,选出属于特定tiler的图元就行了。有了Tiler,这个GPU Pipeline就被分为了两部分,一个场景中所有的vertex计算都在光栅化之前完成,最后再一次性raster一个Tile。这样做还有一个好处就是,可以更有效的在early z中剔除被遮挡的像素,降低了fragment shader的负载。

作者:肖雄 链接:https://www.zhihu.com/question/20720436/answer/151341206 来源:知乎 著作权归作者所有。

answer2:  

按知乎一贯的啰嗦风格,说说我个人关于所谓“性能”的一些想法。跟主题无关。

首先,GPU的性能这事本身就比较难界定。从工程师和社会闲杂人员(a.k.a. marketing)的不同角度,对GPU性能的取向可能就是不一样的。作为一个GPU工程师,我们可能关心的是GPU某一方面的吞吐量,比如triangle rate, fill rate, texturing rate,当然还有FLOPS。但是作为用户、评测人员或者市场人员,他们关注的点是“How damned fast can I play my game on it”。所以简单的讲“移动GPU和桌面GPU性能哪个好”,不同的人会给你不同答案,因为“性能好”在不同的人那里的定义是不一样的。

说到游戏性能 benchmark,则问题变得更复杂,因为游戏是运行在一个复杂的计算机系统上面,而不仅仅是一颗GPU。CPU的不同(比如ARM vs. X86)、OS的不同(比如Android vs. Win)、driver处理机制的不同(比如WDDM vs. LDM)、内存子系统的不同 ⋯⋯ 乃至API的不同(D3D vs OpenGL),都会导致最终游戏性能的差别。有时候这种差别是可以通过一些手段排除的,有时候则不能(比如OpenGL的应用往往切换状态比D3D要频繁,不知道为什么,可能OpenGL developer 的习惯做法与D3D developer有所不同)。

具体到游戏引擎上来,今天的移动游戏引擎技术,差不多要比PC游戏落后一到两个代际。这是软件的问题,而且我相信移动游戏会很快追赶上来,甚至超越也不一定。但是在当下,你就很难比较采用了不同复杂度设计的引擎产生的GPU workload。

然后,还有一个问题:即使是同一个架构的GPU(比如NVIDIA在Tegra K1里用的GPU和楼主问的GT650 都是Kepler架构,“几乎”一模一样),为了因应不同的市场和产品需求,你还是不能拿它们来直接比较: 第一,除了流处理器数目不同,K1 的GPU是连在整个SoC的memory controller上的,而GT650是自己的MC直接连显存。这个区别会直接影响内存访问的带宽和延迟。 第二,对同一个benchmark来说,在SKU不同的GPU上跑,会发生bottleneck shift。比如在core比较少的GPU上pixel shader是瓶颈,到了core比较多的GPU上可能就会变成内存是瓶颈。 第三,K1 的GPU时钟频率比较低,而GT650的时钟频率比较高。更重要的是,K1的各部分之间的时钟频率比,跟GT650是不一样的,所以即使是做clock for clock比较,也可能会有bottleneck shift。

最后,同一个benchmark,同一个系统,同一个GPU,在不同的分辨率和AA rate下跑,也会bottleneck shift。这就是为什么大部分评测都要标resolution 和 AA mode的原因。

总结:GPU性能评测是一个复杂的系统工程。不做具体的界定和calibration,泛泛的讨论“移动GPU和桌面GPU哪个性能好” 很难得到一个确定的、有建设性的结论。从最终用户关心的“我能不能流畅的玩游戏”到工程师关注的“这个GPU哪一部分的吞吐量是多少” 之间,有一个逐渐过渡,不断具体化,关注范围渐次收窄的过程。在这个过程中,具体数据可能并不具有确定的意义。我们更多应该关注数据变化的趋势和约束条件。“不服跑个分” 是无助于提高移动GPU的设计水平的。

作者:张岩 链接:https://www.zhihu.com/question/20720436/answer/23187329 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

answer3:

时隔两年再来更新这个问题,是因为有人提到了TBR。实际上TBR并不是移动硬件的专利,甚至可以说它也不是为了移动硬件而生。从Kyro开始就有了TBR的设计。

TBR实际上是算法和架构层面对Cache的优化。TBR工作在Scratchpad memory上。它和Cache一样,设计的根本是为了逾越Memory Wall。当两级存储差异巨大,比如在手机上,就会选择TBR的设计。当年因为SIMD和非常宽的位宽,所以Memory Wall的问题在Framebuffer的写入上不明显,因此主流的显卡一直使用的是IMR。

----------------------------------------------------

移动GPU和桌面GPU最大的不同在于,移动GPU在设计上是有着明确的资源限制的:功耗和面积。其次才是性能功耗比。这样也导致移动GPU无论是拼性能还是性能功耗比,都远不如桌面GPU。

另外,对于现代GPU来说,无论是桌面还是移动,能看的指标只有两个:一个是FLOPS(Half Precision和Full Precision),一个就是Memory Bandwidth。至于核数之类的,那都是Market Techniques。此外性能和指标的关系,虽然是有,但没那么密切。

----------------------------------

另外, 张岩(妈蛋这个名字太多了我at了好几次都at不对) 是业内巨巨(没记错吧),所以他的回答还是很中肯的。

他提到了“性能”,我就再多说两句。虽然说性能在每个阶段都有体现,但是GPU这东西是有这目标市场的。既然有市场,那就要先做评估,评估GPU出来之后应用的特性,比如是三角形多呢,还是Shader多,还是Texture多。因为大家都知道有明显的bottleneck不好,所以尽可能的均衡搭配,避免短板效应。

并且产品的裁剪一般也是均匀的。比如高端GPU搭配的显存带宽是200G/s,但是低端的芯片只有120G/s,那显然给那么多的shader单元就没什么意思了,还增加芯片成本。所以这个时候,shader可能就要打对折。shader减少了,可能Triangle setup的频率也可以下调。如此这般。当然这种调整并不是1+1=2那样的简单,需要架构本身有伸缩性。所以Tegra在K1之前,也不是直接拿桌面的片子过来用刀切一半就能当移动芯片用的。

那么这个“均衡”以谁做参考呢?那自然是benchmark。Benchmark除了平日见到的跑分应用外,剩下的多是给厂商用于性能参考的。从市场角度来说,新的芯片上市的时候,应用往往不那么充分。除了常规的性能增加外,跑分的多少也是让发烧友买新卡的重要动力。

从这个意义上讲,“不服跑个分”,还真是芯片发展的推动力之一。

作者:空明流转 链接:https://www.zhihu.com/question/20720436/answer/23184268 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3