还是那个小新💯 crayon嘻哈小新
关注数: 1 粉丝数: 333 发帖数: 7,991 关注贴吧数: 2
【修正】游戏机GFLOPS 修正和优化上一贴里一些有误的数据 这次加入一些标准,主要以shader或者可编程的浮点,以及尽量符合IEEE754标准的FP32单精度浮点作为计入标准,我会在文中说明。所以NGC和Wii,他们是标准的固定流水线,不具备可编程性,并且不符合IEEE标准,而且FP32精度的指令很少,所以这次这类主机就不计入其中了,实际上老主机用浮点来参考性能都有点牵强,只不过非可编程更加牵强。 直接上图然后说明N64的浮点性能来源于CPU VR4300的FPU单元,而GPU是不支持浮点的。当时浮点加速的效果有限,但是毕竟是第一台支持浮点的游戏机,所以给N64一个位置。 DC的GPU PowerVR CLX2不支持硬件T&L,更不支持可编程,所以DC的浮点性能来源与CPU SH4的Vector Graphics Engine,和PS2的VU类似,负责T&L的运算,具备一定的可编程性,200MHz下浮点性能为1.4GFLOPS,如下图PS2的T&L是由VU运算的,GPU不支持几何运算。VU具备一定的可编程性,实际上已经开始类似于早期的vertex shader了,只不过是和CPU总线绑定在一起。PS2的官方浮点数据是基于CPU的FPU和两个VU的总和值。 初代Xbox的GPU NV2A,其架构基于NV20,pixel shader虽然支持一定的可编程性,但是灵活性较低,并且不是IEEE 754标准的FP32浮点,和NGC的pixel pipeline类似还是基于combiner的运算。Vertex shader的运算单元是一组SIMD Vector FPU,和一个SFU,Vector FPU支持标准FP32单精度浮点,是一组4 x 32bit的FPU Core,每周期8 flops,NV2A一共两组Vertex shader,所以一共16 flops,GPU vertex shader的性能就为3.72GFLOPS。除此之外,Xbox上还有一个surface engine跑在CPU的SIMD上,辅助几何运算,所以还要算上CPU的数值,每周期8 flops,性能为5.86GFLOPS,总和为约9.6GFLOPS。PSP的数值为CPU FPU和VFPU的总和,PSP的VFPU同样用于加速几何运算,基本上用CPU SIMD或矢量单元加速几何运算的方式就到PSP了,PS3和360设计之初也有类似的打算,但是到后期基于GPU的开发模型和引擎成熟后这种方式存在感就比较低了,所以之后的主机就只需要计算GPU的shader性能了。 一些老贴里说过的就不多说了 PS3之前按照550mhz算的,现在修正为500mhz 3ds的计算方式可以参考我发过的关于3ds解析的帖子 psv给了两个数据,一个为实际官方游戏默认的166mhz,另一个为破解后能解锁的222mhz,由于官方游戏止步于166mhz模式(至少我不知道哪个游戏用上了222),所以我个人倾向于以官方实际情况为准。 wiiu我再强调一下,数据是基于官方sdk开发文档,sdk的数据是作为开发标准的,比宣传数据还要严谨的多,我看到有不少人还在那质疑非要认为是最早eurogamer分析出来的320sp才是对的,无视开发文档清清楚楚,明明白白写在那的数,那我无话可说。 switch是基于eurogamer曝光的数据,当然最终还是以开发文档中的数据为准,不过老任现在不给独立开发者sdk,所以暂时只能等待,或者等黑客或者其他开发者泄露了,总之有确切的数据之后我会更新的。
Adreno的浮点性能? adreno家族尤其是5xx之前的系列,向来有着报表的理论浮点性能,却又对应着不相称的图形性能。 比如我手头现在的810的430,首先用炮神的烤机确定其一共包含256个alu,用高通的profiler查看,alu利用率92%,折算后和理论值基本吻合,也就是说理论峰值性能为322.56gflops,实际300不到点。这么高的浮点性能,原则上来就算架构落后,转换成图形性能也绝对不弱,不过最近和660对比后发现游戏性能还不如660,而660只有75gflops的理论性能,当然这里还有cpu或者其他方面的较大差距。 首先看下660的512,用炮神的烤机反测是64个alu,alu利用率也是92%,折算后和理论值基本吻合。然而到了游戏中alu利用率还远没有这么高。如下测试:分别是辐射城,农药,2k18辐射城最高画质(hd分辨率,1.0像素刻元)50%多,频率可以稳定在最高的650mhz,折算浮点42左右 农药最高画质高帧率,有70%多,频率也可以稳定在650mhz,折算浮点62左右 2k18最高画质(开球衣模拟),但是频率只有300多mhz,折算浮点只有20左右,并且帧率还有30左右(图上测试有损失),2k18真是有点吃惊,可能是cpu负载情况太好的原因,大核全程在线,全程满频,全程高负载,负载情况比开了vulkan的模拟器还好(后面说) 再看看同样游戏的430的情况,图就不上了,没保存好,口述了 辐射城: 平均alu利用率在25-30%(基本在25左右),频率基本在390-450mhz(也就冬天能稳在这频率),折算浮点57左右 农药: 高帧率稳不了,系统自动关了。50-55左右,频率打死180,折算浮点46左右 2k18: 平均alu利用率只有15-20%(大部分15%,所以按15算),频率浮动较大,基本在305-450之间,折算浮点35左右 可以看出,430浮点性能的优势根本发挥不出来,即使是跑gfxbench的alu利用率也只有30%多,alu测试可以跑到75%,也就这个能跑这么高。由此看来并不是系统设了阈值,具体原因的话就不清楚了,可能是api或者draw call压力太大,造成驱动压力太大?也可能是硬件端设了阈值?有个情况是当频率越高时alu利用率越低,内部有类似功耗墙的限制?具体原因就不得而知了,有知道的大神请务必科普一下。 针对驱动压力的问题,我也留意了一下,2k18里,当常规视角时api call达到了1w+,draw call也突破了一千,但是当特写视角的时候api call降低到3000多,draw call也降低到200以内,这时alu利用率提升到50-60左右,帧率也大幅提升,同样的问题在辐射城室内也有,但我还是不太确定。 总而言之,当时高通公布430比420gpgpu性能提升100%,而图形性能只提升30%的时候就觉得很奇怪,那现在推测420利用率也高不了。 那为什么高通要堆到256个alu呢,又发挥不出来,钱多烧的慌吗,这个倒还是有原因。 adreno主要有三个api的context,分别是opengl,opencl还有ui,opencl一直被高通看重,比如用来加速摄像,所以在摄像的时候alu利用率可以达到80%以上,同样的ui加速的时候也能达到80以上,这么看来游戏反倒没多少收益。opencl会有驱动开销影响浮点性能的问题,所以我才猜测是不是opengl也有影响。 再说回660,5xx的驱动开销相比4xx有大幅提升,同时5xx还支持UBWC和Draw order independent depth rejection这两个4xx没有的特性,所以5xx的效率也有着不小的提升,不过看来5xx同样不能最大化浮点性能,会不会api本身也有影响呢? 所以又拿ppsspp的opengl模式和vulkan模式测试了一下,游戏是斯巴达之魂,设置一样。opengl下alu利用率是70多,频率只有300不到,shader busy也接近80(shader是指整个shader processor后面说) 而vulkan模式下,alu利用率平均可以到90左右浮动,频率也可以基本全程650mhz,shader busy也降低到60以下 看来如果vulkan能普及的话,adreno也是可以战未来的 除此之外,或许shader busy也是5xx被制约的原因之一,以后测试了530再说 最后划重点,adreno的理论浮点性能和游戏中的实际浮点性能相去甚远,所以带来了高通浮点虚高的感觉,一般像主机乃至pc上,gpu的浮点性能都能比较高效的转换成图形性能,一个主要原因是主机普遍用底层api甚至直接开发模式,所以原因可能是驱动开销,vulkan? 最后的最后再复习一波adreno的架构 高通官方把shader核心(相当于mali的shader core,pvr的shader cluster)叫做shader(或者streaming) processor,简称sp,在opencl中高通把他叫做computer unit 高端目前为止是都用4组cu(从3xx开始),低端1组,中端2组,好像还没3组的 一个sp或cu中包含有alu,efu,l/s单元,control flow单元,寄存器文件等,还是要吐槽一下浓浓的amd既视感(感觉就像amd的老架构+一些高通的新技术特性,瞎说的,肯定没这么简单) mali的工具也准备好了,等以后有了mali的设备,看看能不能测试mali的情况。
1 下一页