Background

对于手机终端来说,GPU图像处理能力是衡量一台手机的性能标杆。首先,是UI流畅性,大家拿到手机都得先划来划去看下UI是否流畅,而UI其实主要还是用GPU渲染的;其次是游戏的流畅性,对于很酷炫的游戏,GPU是目前手机端的唯一高性能3D加速器。在手机端,主流的几个GPU主要是PowerVr,Mali,Adreno。苹果早起使用的就是PowerVr的定制版本,不过随着苹果自研GPU,PowerVr现在基本可以是算卖给了紫光;Mali是鼎鼎大名的安谋半导体ARM的图形加速IP;Adreno是高通的图形GPU。当然这里不是要对比这些GPU的性能,而是简单介绍下Mali的GPU系列。

Mali其实是ARM的Mali系列IP核,但是很多现在在很多网上提到Mali其实是直接认为是Mali的GPU。Mali系列其实还有视频,显示控制器,Camera等。但是Mali应该算是授权比较多的。而且因为GPU也被更多的非业内人士所熟知。

Mali的四大架构之一:Utgard

第一代微架构Utgard(北欧神话人物:乌特加德)。这一代架构出来的比较早,主要是图形加速IP。可以追溯到2007年的mali-200。不过最让人惊讶的是mali-4xx系列,现在很多电视芯片都还在用这个IP。比如小米的智能电视,还有很多是mali-4xx系列的。

Utgard这一代vertex shader(顶点着色(Vertex Shader)是一段执行在GPU上的程序(一般用HLSL来编写),用来取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。)和fragment shader(片段着色器)是分离的,arm官方支持的Opengl ES(嵌入式系统开放图形库)也只维护到2.0。所以Opengl ES 3.0及其以上要求的app是跑不了的。并且OpenCL在这一代中也是不支持的,因为这一代主打图形计算,不怎么支持通用计算。

移动端的GPU主要以基于tile的计算为主,mali的全系列(截止目前)都是基于tile的计算。基于tile的计算可以简单的认为,在进行计算的时候一张图会被划分成若干张小矩形,每个矩形可以认为是一个tile,然后对一个tile进行同时计算。

主要系列有:mali-200, mali-400, mali-450, mali-470

Mali的四大架构之二:Midgard

第二代微架构Midgard(北欧神话人物:米德加德)。Midgard这一代GPU开始属于同一着色器的架构,也就是上面说的vertex shader和fragment shader已经统一在一起了,相当于同一个shader计算单元可以处理多种着色器。当然也开始支持计算通用计算。特别是对OpenCL的支持,对通用计算有了很大的支持。OpenGLES 3.1虽然引入了compute shader,但是说起通用计算,OpenCL显然更加专业。

这个架构是基于128bit向量的,所以在编程的时候往往用4个float编程了能最大发挥其性能。当然,编译器也会把某些可以进行优化的计算合并成向量进行计算,不过最好在编码阶段自行优化。编译器编译的优化比较难以去把握。当然,也不建议用大于128bit的方式进行编程,最终需要编译器拆成多个数的运算,且每个数的位宽最大为128bit,如果编译器优化不好,反而会导致性能下降。

主要系列有:mali-t6xx, mali-t7xx, mali-t8xx

Mali的四大架构之三:Bifrost

第三代微架构Bifrost(北欧神话中连接天宫和大地的:彩虹桥)。由于这一代产品基本在2016年后发布的了,而OpenGLES在2016年后基本稳定了,所以相对于Midgard来说,在大方向上图形计算这块也没有多大的需要调整。

在Bifrost(Bifrost上更像是SIMT的模式,这里用SIMT表述也是我从多个文档资料推敲出来的)上会先把向量拆成标量,然后每个线程跑多维向量的第一维,因此对于三维向量 vec3向量最快只需要3个cycle,对于思维向量vec4最快只需要4个cycle。这里用了最快这个表述是因为并不是所有的指令都是单个cycle的。

当然,虽然bifrost架构是标量运算的,这是针对32bit的位宽来说的,如果是16bit位宽的计算,一个线程是可以在一个cycle内处理一个vec2的16bit数据的。因此在编程的时候,如果是8bit或者16bit的数据,用于应该考虑如何组织代码使得更有效的组合运算,例如16bit位宽的情况,尽量是用vec2,8bit位宽的尽量用vec4。

对于Bifrost,例如G76,一个shader core可以同时运行几十个线程,,从mali的资料显示,shader core一般由三个部分组成,ALU,L/S,TEXTURE三个主要模块。在G76上是8-wide wrap的,一般设置为3个ALU。(其余的型号可能不一样,例如G51/G72是4-wide wrap的,G72同样是3个ALU;G52跟G76一样,不过G52可配置成2个ALU的)

对于AI加速方面,部门系列也有一些指令修改,例如G52和G76都引入了int8 dot指令,该指令针对神经卷积网络的运算做了优化。

主要系列有:mali-g31, mali-g51, mali-g71, mali-g52, mali-g72, mali-g76

Mali的四大架构之四:Valhall

第四代微架构Valhall是2019年第二季度推出来的。该系列的是基于超标量实现的。对于G77,使用的时16-wide的wrap,单个shader core集成两个计算引擎。

主要系列有:mali-g57, mali-g77

综述

最后,本文简要的梳理了下mali gpu架构的一些情况,同时对不同架构上的一些计算资源进行简要描述,希望能给看到的朋友提供一些有用的信息,本人也会继续研究单个系列甚至单个芯片更多资源配置的情况,感谢各位的关注。同时,也吐槽一下,Mali系列的芯片命名在Bifrost和Valhal系列没有区分开,特别的截止(2020.03.15),单纯从mali-g51, mali-g71, mali-g52, mali-g72,mali-g57, mali-g77,很难区分最后两个型号是Valhall的架构。这个命名不知道mali是怎么考虑的,着实令人难解。

本文转载自知乎(侵删)

ARM Mali GPU 四大微架构概述相关推荐

  1. 嵌入式图形解决方案升级!RT-Thread Smart成功支持ARM Mali GPU

    睿赛德科技今日宣布,其微内核操作系统 RT-Thread Smart(简称:rt-smart)已支持Arm® Mali™ GPU,为实时操作系统在汽车.消费电子等GUI应用领域提供一个新的高性能图形解 ...

  2. Arm Mali GPU最佳实践(Arm Mali GPU Best Practices)

    (部分收录) 简介 本文设计为快速查询指南,所以假设读者熟悉了底层API的使用:我们将在其它文章中更详细地去讨论特定的主题,并花更多时间向仍在学习API的开发人员解释相关的概念. 注意:这些建议是为M ...

  3. 「Arm Arch」 安全微架构

    全文3000字,预计阅读时长:8分钟 适用于从事ARM软硬件设计.开发.调试的工程师.教师以及学生 对于大部分开发者来讲,ARM架构知识一直存放于盲盒之中,知之甚少:而ARM架构知识是ARM结构化知识 ...

  4. 「Arm Arch」 总线微架构

    全文3000字,预计阅读时长:8分钟 适用于从事ARM软硬件设计.开发.调试的工程师.教师以及学生 对于大部分开发者来讲,ARM架构知识一直存放于盲盒之中,知之甚少:而ARM架构知识是ARM结构化知识 ...

  5. 「Arm Arch」 虚拟化微架构

    全文3000字,预计阅读时长:8分钟 适用于从事ARM软硬件设计.开发.调试的工程师.教师以及学生 对于大部分开发者来讲,ARM架构知识一直存放于盲盒之中,知之甚少:而ARM架构知识是ARM结构化知识 ...

  6. 「Arm Arch」 调试微架构

    全文3000字,预计阅读时长:8分钟 适用于从事ARM软硬件设计.开发.调试的工程师.教师以及学生 对于大部分开发者来讲,ARM架构知识一直存放于盲盒之中,知之甚少:而ARM架构知识是ARM结构化知识 ...

  7. 通过“microbenchmark”解谜GPU的微架构

    目录 摘要 一.简介 二.背景:GUP架构以及编程模型 2.1 GPU的架构 2.2 CUDA软件编程接口 三.测量手段 3.1Microbenchmark 技术 3.2 通过latency图推断ca ...

  8. ARM 之十五 扫盲 ARM 架构、指令集、微架构、系统架构、ARM IP、授权方式

      ARM 架构的 MCU 用了好多年,进一步对于 ARM 架构也或多或少的有了一些了解.之前都是遇到啥问题直接去官网找对应的手册,一直没有系统的总结一下.是时候总结一下,以便进行下一步学习了! 总的 ...

  9. 详解微架构:GPU与ASIC的对比

    一.GPU定义和内部结构 二.GPU的构成:微架构概述 三.GPU的构成:详解微架构SP.ROPs.TMU 四.GPU的构成:详解微架构光纤追踪单元和张量单元 五.GPU的构成:API概述 六.GPU ...

最新文章

  1. 云消防大数据_消防云大数据app下载-消防云大数据下载v1.1.5 安卓版-西西软件下载...
  2. python:SyntaxError: invalid syntax报错
  3. 专家观点:不断茁壮的音频生态系统中心(转)
  4. 促进儿童语言发展的方法
  5. Servlet 运行原理
  6. 造了一个 Redis 分布锁的轮子,没想到还学到这么多东西!!!
  7. python 模块路径查找 及 添加
  8. 【硬刚Hive】MYSQL/HIVESQL笔试题(七):HIVESQL(七)
  9. 车牌识别平台开源(支持蓝牌、绿牌,准确率高达96%)
  10. 对抗训练fgm、fgsm和pgd原理和源码分析
  11. 高德城市编码json_sql_excel 三级联动json合集
  12. word2010转html默认页面视图,word2010中,切换到页面视图方式的组合键
  13. Windows系統修改MAC地址的方法
  14. 顶峰Android手机视频转换器,顶峰FLV视频转换器
  15. Cache架构以及X86ARM @Linux平台cache eviction功能测试
  16. 【PS】浅谈PS颜色模式-RGB模式
  17. 【算法概论】分治算法:k路归并
  18. Python解码JS的encodeURIComponent并转化JSON
  19. iPhone越狱的利与弊
  20. Jmter的接口测试提升篇

热门文章

  1. 记我参加过的竞赛——“飞思卡尔杯”全国大学生智能汽车竞赛
  2. Django论坛系统LBForum(开源)
  3. 不同型号的二极管模块并联_2.5 变频器的并联
  4. Java容器分类示意图
  5. 专注应用链孵化|章鱼加速器2022冬季 Web3 创业营团队全球招募中
  6. SolrJ更新索引数据
  7. 青岛农商银行计算机防病毒应用培训,农信银资金清算中心——青岛农商银行举办2020年新入职员工培训班...
  8. 技术总结 | 三种常见单相整流电路
  9. matlab整流桥长什么样,matlab器件整流桥仿真.docx
  10. python接口测试之request请求二(传递参数)