0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全面概述ARM Mali GPU架构演进!

安芯教育科技 来源:极术社区yuq 作者:极术社区yuq 2021-03-31 13:51 次阅读

年初有机会调研了一下历代ARM Mali GPU架构,目前一共四代【1】,分别是Utgard,Midgard,Bifrost和Valhall。有感于他的演进是大GPU架构发展的缩影,所以作文一篇记录心得。我不打算逐一介绍各代架构的细节,而是针对Shader处理器聊一聊每代GPU的发展。对各代架构细节有兴趣或者希望了解全貌的同学可以参考【2】【3】【4】【5】。

Shader处理器

图形API发展到OpenGL 2.0之后,图形处理管线摆脱了之前的固定模式,实现了高度的可定制化。出现了针对图形管线各阶段的Shader,比如Vertex Shader,Fragment Shader,再到后来的Geometry Shader,Tessellation Shader和Compute Shader。每个Shader都是一个用户编写的小程序,执行这些小程序就是GPU中Shader处理器的工作。

Shader处理器作为核心组件,它的架构关系到GPU的性能表现,也是演进最为激烈的部分。每代Mali GPU都会对Shader处理器做较大调整以适应图形API和应用的发展。这里着重讨论两个主要变化——统一处理器架构和TLP驱动的架构设计。

从独立到统一

初代的Utgard架构有两种Shader处理器,GP——执行Vertex Shader,PP——执行Fragment Shader。两者采用不同的硬件架构和指令集,所以编译器会将不同的Shader编译成各自Shader处理器的机器码后交由它们分别执行。

Vertex Shader是对每一个顶点执行一次,而Fragment Shader是对每一个像素执行一次,一般情况下Fragment Shader的执行次数会多于Vertex Shader;而且很多图形效果的实现,Fragment Shader都比Vertex Shader更加复杂。所以Utgard是一个GP配上多个PP,比如一个GP配四个PP就是MP4,最高能配到MP8。单个PP的硬件设计也相对GP更加复杂。

这种独立Shader处理器的架构Shader处理器之间算力无法互通,当一种Shader算力需求远大于另一种时,另一种Shader处理器只能干等着无法帮忙,造成利用率下降。而且随着图形API加入新的Shader种类,给每一种Shader设计一种处理器会不断增加软件和硬件的复杂度。但其实这些Shader在纯计算部分几乎是一样的,可以复用大部分的设计,不必每一个Shader都搞一套。

所以从Midgard这一代开始,采用了统一Shader处理器架构。不同种类的Shader共享计算部分作为统一Shader处理器,顶点插值和光栅化这些固定功能操作独立于外。这样每种Shader都能跑满所有的处理器,提高了硬件利用率。

从ILP到TLP

ILP(Instruction Level Parallelism)和TLP(Thread Level Parallelism)都或多或少同时存在于每代的Shader处理器架构中,但是趋势是TLP的比重逐渐加大。

Utgard和Midgard架构下TLP仅限于处理器级别,Shader处理器就像CPU的一个核心,一次运行一个顶点或者像素的Shader,有几个处理器就有几个线程。比如Mali400MP4,有四个PP,可以并行处理四个像素的fragment shader。每个处理器完全采用了ILP的方式着重优化单线程的处理能力。

我们可以从两种架构所使用的VLIW指令【6】一窥ILP的设计。Utgard PP的指令编码可以参见【7】,包含两个向量处理单元、两个标量处理单元、一个函数处理单元,还有负责各类数据加载和执行控制的单元。这种VLIW指令和普通的CPU指令不同,一条指令可以完成多个操作。它对应了硬件上的管线(pipeline)结构,如图一所示。管线是处理器执行指令的一条流水线,可以分成多个阶段(stage)。VLIW指令里的各个操作由这条管线里的各个阶段完成。

1db5cd5c-91ca-11eb-8b86-12bb97331649.jpg

图一:Utgard PP处理器管线【7】

比如这一系列操作:取贴图数据,然后做加法,再做乘法,最后写结果到内存。精简指令集(RISC)一般需要四条指令,每条指令都有各自的取指令,执行,写结果的步骤;但是VLIW可以在一条指令里将这些操作依序串起来,取出的贴图数据不需要写进寄存器文件,直接传给加法单元处理,加法单元的结果也是这样直接传递给乘法单元,最后输出到内存。所以VLIW管线会更长,但是由于略去了操作的中间步骤,整合后更加高效。

普通CPU会通过复杂的硬件设计,动态调度要执行的指令来提高单线程性能,比如并行执行和乱序执行。VLIW却是通过在编译阶段,依靠编译器静态调度各个操作填充到VLIW指令的单元中。所以很多早期的GPU包括桌面和移动的,为了简化硬件降低功耗,都采用VLIW来加强ILP。但是这种设计对编译器要求很高。如何调度Shader里的操作以充分利用一条指令里的所有操作单元决定了硬件的执行效率。当然Shader本身的逻辑也决定了有没有足够可以并行的操作。这些都是ILP发展方向的限制条件。

好在图形计算是一个天生的数据并行良好的邻域——有大量的图元需要计算,而且每个图元的计算可以独立进行,不依赖其他图元。所以每个图元的计算都可以作为一个线程,绘制出一帧画面就是跑完这成千上万个线程的工作。利用大量的线程,获得很多可以并行执行的操作,不用很复杂的调度就能达到很高的硬件利用率,这就是GPU里TLP设计的出发点。

从Bifrost架构开始,ARM在单处理器内部也引入了TLP。方法是将大量线程每4个一组(后来扩展为8、16个),然后一组一组在单个处理器中运行。同组的线程执行相同的指令,类似于SIMD。这样就不需要为每个线程都准备一套完整的处理器设计,而是可以多个线程共享除了执行器和寄存器以外的部分。再乘上核心数,同时运行的线程数量大大增加。

而且为了隐藏一些操作比如内存访问的延迟,还有一个线程组的池,里面可以准备执行到不同指令的几十组线程,在一组线程因为数据访问等依赖无法马上执行时,硬件调度器可以挂起这组线程执行另一组的线程。也算是利用线程数量的例子。

不过Bifrost架构里依然有很多ILP的设计,比如句式(Clause)指令(图二):将很多串行指令组成一个指令块——句子,句子是硬件调度器调度的最小单位。句子内部可以有一些加速操作,比如当一个加法指令输出是一个减法指令输入的时候,可以不通过寄存器文件直接传递数据。而且单个指令虽然减少了单元数量,但还是有三个计算单元。所以编译器还是需要考虑单指令单元填充以及多指令组成句子的问题。

1e167ecc-91ca-11eb-8b86-12bb97331649.jpg

图二:Bifrost句式指令【4】

Valhall架构就更加依赖TLP来提升性能了,为此放弃了句式指令和多单元指令这些依赖软件的ILP特性,减小了调度粒度的同时也缩短了处理器管线。如图三所示,Valhall的处理器有三个计算单元,包括一个FMA(Fused-Multiply-Add),一个CVT(Convert)和一个SFU(Special Function Unit),线程组调度器可以在线程组池里找出三个当前指令使用不同计算单元的线程组,让他们在四个时钟周期内同时在三个计算单元内执行。而Bifrost虽然也有三个计算单元,但是他们属于一条长指令,而且ADD和Table排在FMA下游,是一个串行结构,这一条管线需要八个时钟周期。

对比来看Valhall再次加强了TLP,一个处理器最多可以同时运行三个线程组,而Bifrost最多只有一个。反过来看Valhall将三个Bifrost处理器压缩为一个,减少了控制逻辑,就可以有更多的空间增加处理器的数量,也是增加了TLP。

1ee043d8-91ca-11eb-8b86-12bb97331649.jpg

图三:Valhall和Bifrost处理器对比【5】

结语

在GPU架构历史上,统一Shader处理器和TLP驱动架构设计都是趋势。各家各代的GPU都或多或少经历了这个过程。我们纯从架构上看后期的GPU都比前期来的先进,但是放在当时的环境下,早期的图形应用Shader负载不是很复杂,而且移动邻域处理器对于面积和功耗方面的严格控制,都是他合理性的来源。

引用

Mali (GPU):https://zh.wikipedia.org/wiki/Mali_(GPU)

Lima driver status update:https://xdc2019.x.org/event/5/contributions/328/attachments/420/670/lima.pdf

ARM‘s Mali Midgard Architecture Explored:https://www.anandtech.com/show/8234/arms-mali-midgard-architecture-explored

ARM Unveils Next Generation Bifrost GPU Architecture & Mali-G71: The New High-End Mali:https://www.anandtech.com/show/10375/arm-unveils-bifrost-and-mali-g71

Arm’s New Mali-G77 & Valhall GPU Architecture: A Major Leap:https://www.anandtech.com/show/14385/arm-announces-malig77-gpu

Very long instruction word:https://en.wikipedia.org/wiki/Very_long_instruction_wordA4%E5%AD%97

Mali ISA:https://gitlab.freedesktop.org/panfrost/mali-isa-docs/-/tree/master

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GP
    GP
    +关注

    关注

    0

    文章

    29

    浏览量

    23467
  • 编译器
    +关注

    关注

    1

    文章

    1617

    浏览量

    49021
  • TLP
    TLP
    +关注

    关注

    0

    文章

    32

    浏览量

    15592
  • GPU架构
    +关注

    关注

    0

    文章

    15

    浏览量

    8451

原文标题:ARM Mali GPU架构演进

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    GPU服务器AI网络架构设计

    众所周知,在大型模型训练中,通常采用每台服务器配备多个GPU的集群架构。在上一篇文章《高性能GPU服务器AI网络架构(上篇)》中,我们对GPU
    的头像 发表于 11-05 16:20 155次阅读
    <b class='flag-5'>GPU</b>服务器AI网络<b class='flag-5'>架构</b>设计

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架构分析」阅读体验】--了解算力芯片GPU

    本篇阅读学习第七、八章,了解GPU架构演进及CPGPU存储体系与线程管理 █从图形到计算的GPU架构演进
    发表于 11-03 12:55

    Arm全面设计助力Arm架构生态发展

    Arm 控股有限公司(纳斯达克股票代码:ARM,以下简称 Arm)近日分享了Arm 全面设计 (Arm
    的头像 发表于 10-21 09:58 291次阅读

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架构分析」阅读体验】--全书概览

    GPU、NPU,给我们剖析了算力芯片的微架构。书中有对芯片方案商处理器的讲解,理论联系实际,使读者能更好理解算力芯片。 全书共11章,由浅入深,较系统全面进行讲解。下面目录对全书内容有一个整体了解
    发表于 10-15 22:08

    ARM进军GPU领域,挑战英伟达与英特尔

    英国芯片设计巨头ARM正悄然在以色列拉阿纳纳的研发中心布局其GPU(图形处理器)战略,意图在全球图形处理市场与英伟达和英特尔等业界巨头一较高下。据悉,ARM已在该开发中心组建了一支由约100名精英芯片与软件工程师构成的全球图形处
    的头像 发表于 08-21 10:19 444次阅读

    Arm发布针对旗舰智能手机的新一代CPU和GPU IP

    全球领先的芯片设计公司Arm宣布了针对旗舰智能手机市场的全新CPU和GPU IP设计方案——Cortex-X925 CPU和Immortalis G925 GPU。这两款产品均基于Armv9
    的头像 发表于 05-31 09:44 535次阅读

    Arm发布Arm v9架构CPU、GPU IP及设计软件,助力AI计算

    长期以来,全球智能手机处理器均采用Arm架构,包括苹果、高通、联发科在内的众多厂商均依赖Arm提供的IP,且该应用范围已逐渐扩展至个人电脑与数据中心领域。
    的头像 发表于 05-30 09:17 711次阅读

    X-Silicon发布RISC-V新架构 实现CPU/GPU一体化

    X-Silicon 的芯片与其他架构不同,其设计将 CPU 和 GPU 的功能整合到单核架构中。这与英特尔和 AMD 的典型设计不同,前者有独立的 CPU 内核和 GPU 内核。
    发表于 04-08 11:34 532次阅读
    X-Silicon发布RISC-V新<b class='flag-5'>架构</b> 实现CPU/<b class='flag-5'>GPU</b>一体化

    fpga封装技术和arm架构的优缺点

    FPGA封装技术和ARM架构是两个不同的概念,分别属于硬件设计的不同领域。
    的头像 发表于 03-26 15:51 732次阅读

    arm架构和x86架构区别 linux是x86还是arm

    ARM架构和x86架构概述 1.1 ARM架构 ARM
    的头像 发表于 01-30 13:46 1.7w次阅读

    深入解读AMD最新GPU架构

    GCN 取代了 Terascale,并强调 GPGPU 和图形应用程序的一致性能。然后,AMD 将其 GPU 架构开发分为单独的 CDNA 和 RDNA 线路,分别专门用于计算和图形。
    发表于 01-08 10:12 1129次阅读
    深入解读AMD最新<b class='flag-5'>GPU</b><b class='flag-5'>架构</b>

    揭秘GPU: 高端GPU架构设计的挑战

    在计算领域,GPU(图形处理单元)一直是性能飞跃的代表。众所周知,高端GPU的设计充满了挑战。GPU架构创新,为软件承接大模型训练和推理场景的人工智能计算提供了持续提升的硬件基础。
    的头像 发表于 12-21 08:28 842次阅读
    揭秘<b class='flag-5'>GPU</b>: 高端<b class='flag-5'>GPU</b><b class='flag-5'>架构</b>设计的挑战

    Arm架构是如何开发的

    随着人工智能 (AI) 的兴起和安全威胁的加剧,计算需求不断提高。全球各种设备所依赖的基础计算架构也必须持续向前推进。为此,我们的工程团队不断地在应用广泛的 Arm 架构中加入新的功能和技术,同时我们的软件团队也在努力让软件能够
    的头像 发表于 11-23 16:31 1063次阅读
    <b class='flag-5'>Arm</b><b class='flag-5'>架构</b>是如何开发的

    NVIDIA GPU的核心架构架构演进

    在探讨 NVIDIA GPU 架构之前,我们先来了解一些相关的基本知识。GPU 的概念,是由 NVIDIA 公司在 1999 年发布 Geforce256 图形处理芯片时首先提出,从此 NVIDIA
    发表于 11-21 09:40 1433次阅读
    NVIDIA <b class='flag-5'>GPU</b>的核心<b class='flag-5'>架构</b>及<b class='flag-5'>架构</b><b class='flag-5'>演进</b>

    浅谈Arm架构各厂家的CPU混战

    过去,英特尔在全球个人电脑处理器市场上具有压倒性优势,常年拥有约70%的市场份额。 而剩余的市场份额主要由AMD占据(采用X86架构),ARM则占据10%的市场份额。 据悉,AMD也将加入采用ARM
    发表于 11-19 16:16 839次阅读
    浅谈<b class='flag-5'>Arm</b><b class='flag-5'>架构</b>各厂家的CPU混战