高级图形处理器在进行推广时通常比较多个低级别性能指标。例如,Imagination PowerVR GPU比较常用的比较指标为GFLOPS (测量计算吞吐量) ,每秒三角形生成数量(测量几何吞吐量),每秒像素数填充和每秒纹理数(测量填充率) 。
除了这些较为传统的指标,企业开始按照产品中所包含的内核数量来说明架构已经较为常见。尽管按照既定状况来说,内核数量的含义已经被GPU市场曲解。也就是说,这个词语具有延展性,经过一段时间这个词语在反映常见功能方面已经有所更新。我来说明内核数量的常见意义。
什么是内核?
这要依据实际情况而定。内核数量的意义在以前是表示处理器前端的数量。内核并不复杂,前端的作用是调度执行线程。几乎所有高级GPU都已经简化设计,在计算资源前端设置多个调度器和相关调度逻辑,执行预订的任务。
每个调度器跟踪数个需要执行的线程,在单个时钟周期中运行单个程序的单一指令。单个指令指标的作用是在一组算资源上运行程序,不考虑线程数量或者计算资源的共享方式,这是内核的通常定义。
但是,我们也用这个内核来说明Series5 SGX GPU的整个状况。例如在SGX544MP3中,共有SGX544MP3的3个完整例程—可以复用所有GPU资源,我们称之为MP3配置,或者叫3核 GPU。
多核的误区
因此,随着高级移动系统中CPU内核数量迅速增加, GPU厂商要表达的信息是GPU也是多核设计,我们的许多竞争对手将独立的ALU流水线视作内核以强调其优势。但这些ALU流水线不能实现完全独立的相互调度,这些流水线与SIMD模式中的流水线一样每个时钟周期运行同一指令。并未出现我们所指的独立前端或独立指令指针,但尽管如此市场依然称其为一个内核。
我们按照同样的方式从基本的构建模块---统一着色器集群(Unified Shading Cluster,USC)到独立流水线来说明PowerVR Rogue,来看一下如何计算内核数量。
PowerVR Rogue USC
Rogue的架构是由多个模块构建而成,这些模块称为统一着色器集群,简称USC。我们扩展这个架构来满足客户对GPU的需求,以支持系统级芯片及专门的细分市场,我们将数个USC以及其他相关资源连接在一起后集成在整个GPU IP上。
打开USC,您会发现用于分析数据并得出结果的是数个ALU流水线。我们并行设置这些流水线,每个USC设置16个流水线。这样设置的原因是,图像呈并行处理,其中多个相关的数据,通常是矢量或像素同时运行。事实上,高级像素着色的属性驱动相关像素是并行的,因此有必要同时运行这些高级像素。
标量SIMD执行和矢量低效
USC的关键属性是按照标量模式处理数据。也就是说对于给定的工作项目,例如一个象素,USC不是在同一时钟周期内的同一独立管道上同时执行红、绿、蓝和透明度的矢量。相反, USC在一个时钟周期内执行一个红色组件,接下来执行蓝色组件,以此类推,直到执行完所有组件。为实现矢量基准单位的峰值吞吐量,标量SIMD单元并行处理多个工作项目。例如,每个时钟周期内处理一个像素的4-wide矢量的峰值吞吐量相当于4-wide 标量SIMD单元,可在每个时钟周期内处理四个像素。
表面上看这两种方法的吞吐量相同。但是,高级GPU负载通常由使用许多不同数据宽度的数据组成。例如,通常颜色数据宽度为4 ( ARGB ),而纹理坐标的数据宽度通常为2 ( UV),还有许多标量实例( 1个组件)处理,如典型的光照计算一样。
在光照计算中,如果数据处理没有填满整个矢量宽度时,就会浪费矢量处理器宝贵的计算资源。在标量架构中,正执行的运算采用一种运算类型,在同一时间运行一个组件,并行处理同一任务。例如着色处理中完全由标量处理组成,在4-wide矢量架构中执行25%的任务,而在标量SIMD架构中本应执行100%的任务。
多个低功耗ALU!
我们再来说说USC并行任务中的独立流水线。共有16个流水线,每个流水线内部实际上存在数个执行任务的ALU。即2个FP32 ALU,2个FP16 ALU,以及1个专用函数ALU 。
为什么使用专用FP16 ALU?主要是为了节省功耗同时也是为了提高性能。与FP32 ALU相比,简化ALU逻辑复杂度可以较低功耗执行FP16指令组,同时可执行更多的运算,在每个时钟周期实现更高的吞吐量。稍后您就会明白。
在高级图像渲染中以较低精度计算可能需要耗费较多时间,而APIs Rogue力求在所有通用图形中支持混合精度运算,其中包括Direct3D 11,以及更常见的OpenGL ES2和ES3 APIs。在嵌入式图形运算中没有构建混合精度计算流水线是个错误,原因是执行混合精度工作量会造成功率放大。
性能和功能
各个ALU的功能并不一样,我们来看一下每个ALU的作用,以便了解其性能:
PowerVR Series6, Series6XT和Series6XE中的FP32 ALU能够在每个时钟周期执行2浮点运算。每个USC即每个时钟周期的64 FLOP峰值。
PowerVR Series6 GPU内共有最多8个统一着色集群( USC )
PowerVR Series6 GPU中的FP16 ALU能够在能够在每个时钟周期执行最高3浮点运算,我们在Series6XE和Series6XT 改进了FP16 ALU可在每个时钟周期执行最高4浮点运算。按照不同的产品和系列,每个USC在每个时钟周期执行高达128浮点运算。升级型Series6XE和Series6XT更为灵活,执行流水线部分运算的编译器更为容易。
PowerVR Series6XT GPU内共有最多8个Unified Shading Clusters( USC )
最后来说一下具有专用功能的ALU,ALU可处理更复杂的算法和三角运算,如正弦、余弦、对数、倒数和亲和数、标量运算。按照这些运算的性质,设置了ALU输出精度和性能。
增强ALU内核配置
现在,我已经说明从构建USC块到利用16个并行管道执行任务来说明Rogue计算架构,各个管道有较大的专用计算资源,我们按照竞争对手的方式来说明内核。每个USC包括:32 FP32 ALU内核,高达64个FP16 ALU内核、16 个USC专用函数ALU内核。
按照同样的方式将Rogue与市场竞争产品比对,ALU内核这个术语很重要,我们希望大家尽可能按这条思路来解释内核。
最后,请记住,Imagination根据不同的产品Series6, Series6XT 和Series6XE设置1对多的USC。以下为两个实例:
PowerVR G6230: 两个Series6 USC – 64 FP32 ALU内核,每个时钟周期执行高达128 FLOP – 64 FP16 ALU 内核,每个时钟周期执行高达192 FLOP。也就是按照600MHz的频率执行高达115.2 FP16 GFLOPS及高达76.8 FP32 GFLOPS。
PowerVR GX6650: 六个Series6XT USC – 192 FP32 ALU内核,每个时钟周期执行高达384 FLOP –384FP16 ALU 内核,每个时钟周期执行高达786 FLOP。也就是按照600MHz的频率执行高达460.8FP16 GFLOPS及高达230.4 FP32 GFLOPS。
这才是真正的内核比较参数!
原文链接:https://blog.imgtec.com/powervr/graphics-cores-trying-compare-apples-apples
原创文章,作者:hejie,如若转载,请注明出处:http://www.antutu.com/doc/106651.htm
登录后才能评论