前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ARM专家深度谈丨十年巨变,那些改变GPU的关键技术和未来挑战趋势!

ARM专家深度谈丨十年巨变,那些改变GPU的关键技术和未来挑战趋势!

作者头像
用户9732312
发布于 2022-05-13 10:52:01
发布于 2022-05-13 10:52:01
7930
举报
文章被收录于专栏:ADAS性能优化ADAS性能优化

2006年,图形处理器(GPU)总出货量约为1.35亿。同年,ARM 完成对挪威Falanx公司的收购,并获得其移动GPU技术,完成对原有IP技术的扩展。10年后的今天,GPU已经广泛用于智能手机、DTV和平板电脑等多种设备,短短10年时间ARM Mali技术也已成为全球出货量第一的GPU,仅2015年总计出货量就超过7.5亿。

GPU爆炸式发展背后的深层原因是什么?基于GPU技术发展有哪些最新的案例应用呢?智能手机设计的挑战与趋势又是什么?且听ARM技术专家娓娓道来。

API与制程节点开发

对图形领域而言,2015年振奋人心全新应用程序接口(API)的出现允许开发商将基础图形硬件发挥至技术允许的最高水平。

同年,Khronos团队的工作引发有关Vulkan的热烈讨论。Vulkan是新一代OpenGL API,为新一代图形API设计量身打造,足以满足全部需求,并彻底终结了OpenGL ES和OpenGL作为API各自为政的时代。

Vulkan于2016年2月正式发布,是首款按照开发商需求设计的Khronos API。它由游戏引擎开发商、芯片提供商、IP公司和操作系统供应商共同开发,以期打造兼顾各相关方需求的最佳解决方案。Vulkan API应运而生,采用全新异构系统,不仅内置多线程支持,而且可以最大程度发挥硬件一致性的优势。Vulkan属于底层API,允许开发商自主决定硬件交互方式,并通过底层接入以找到最佳平衡点。

上述特性对虚拟现实(VR)等新兴应用尤为重要,帮助开放商减少延迟,优化图形流水线。

对聚焦GPU运算应用的开发商来说,OpenCL 2的发布是一个重要节点,多项全新理念进一步简化了高性能GPGPU(General Purpose GPU,即通用计算图形处理器)应用的开发流程。虚拟存储共享概念的提出可以说最为关键,允许CPU和GPU之间的虚拟地址共享。与硬件一致性结合后,细粒度缓冲器共享成为现实。该技术简化了实现CPU和GPU工作负载共享所需的开发工作,因为两者间的数据双向传输不再是必要条件。

半导体制造工艺也经历了巨大革新。2014年,台积电与三星推出20纳米工艺节点,标志着平面工艺节点的10年历史终于落幕;2015年,三星在Exynos 7420上使用全新14纳米FinFet技术,台积电紧随其后,推出16纳米FinFet工艺,并搭载于苹果A9芯片;2016年,工艺节点获得进一步完善,成本降低,产量增加;步入2017年, 10纳米工艺节点也不再是梦想。

从GPU的角度看,工艺节点技术的进步对整个行业意义非凡。首先,工艺节点越先进,单位区域(或功耗)的晶体管密度就越大。GPU属于并行处理器,只要架构扩展,性能就会随之提升。然而,先进工艺节点对布线的扩展效果不如晶体管。恰恰相反,Ergo 工艺制程从28纳米优化至14纳米,SoC设计师得以实现更高的晶体管密度,但却不如布线的扩展。这意味着,如果设计10纳米GPU时采用与28纳米同样的方法,设计结果必然会打折扣,因为晶体管和布线各有权衡,不尽相同。设计师常常需要妥协,使IP适应某个节点,这种权衡随着先进工艺节点数量的增加变得愈加重要。

深入探讨高端移动GPU的性能如何继续提高之前,我们需要特别指出GPU性能从2011年到2016年提升了20倍这个有趣的事实。由于手机同时变得更加轻薄,因此该数字并不能代表技术进步的全景,但现代移动设备开发商对性能提升的渴求已经可见一斑。

移动设备开发商不断完善现有用例,开发颠覆性的新用例,以保持创新节奏,并从新一轮的性能升级中获益。

丰富的案例开发,这些应用你体验过吗?

随着移动平台的发展,各类传感器层出不穷。凭借飞速提升的系统性能、不断改善的屏幕精度和日益增加的电池寿命,移动设备开发商已经坐拥创新的最佳平台。

增强现实(AR)可以充分挖掘并展现智能手机的强劲性能。AR的原理并不复杂,利用高级摄像头捕捉图像,经过CPU、GPU、ISP、VPU和DPU,最后显示在高清屏幕上。这个过程中,增强内容将覆盖实际影像。根据应用目标的不同,物体识别、方位补偿(使用电子罗盘和/或加速度计)或高级渲染技术都将各有用武之地。

一些人气移动应用让AR不再远在天边,并一举进军大众市场,比如将滤镜叠加在用户脸部,然后生成图片和视频用于分享的Snapchat;以及让用户在真实地点看到动画人物的Pokemon Go。无独有偶,还有一些应用采取了更高级的AR技术,比如将摄像头捕捉与3D物体相结合。这些创新用例层出不穷,并可以用于包括零售和高端游戏在内的各行各业。举个例子,用户可以使用移动设备查看家具是否与硬装搭配,家具巨头宜家就打算在2017年发布AR产品目录。

虚拟现实已经不算新理念了,但其核心技术却仍在经历巨变。硬件设备已经万事俱备,拥有足够强大的性能运行炫目的VR内容,一个适合创新的大规模开发商生态系统也已经形成。这一点在移动平台的体现格外深刻,因为人人都能用,且其移动性自身便是重要优势。与台式机和游戏机不同,移动设备无拘无束。当然,实现这一点需要在设备上安装各类传感器。实际上,VR领域的许多重大突破都是在移动设备上实现的——利用VR技术增强用户体验的云霄飞车就是高性能移动应用的一个典型案例。

尽管推陈出新的颠覆式应用不断刷新智能手机的使用方式,但我们经常会忘记一点现实,最普遍的移动应用情景依然是网页浏览和游戏。近几年,屏幕分辨率和刷新率都得到提升,用户界面(UI)的视觉效果和使用体验也越来越自然。这些优化对GPU提出了更高要求,成为成本导向型市场不小的挑战。

移动设备已经成为最主要的游戏平台,由于移动游戏的便捷性,玩家人数持续增加,并进一步推动游戏数量的上升。从免费的独立游戏到数百万美元投资的工作室游戏,现代玩家有丰富的游戏类型、价格和质量等级可供选择。随着可选游戏数量的上升,视觉效果也得到显著改善。GPU刚刚引入移动设备时,3D游戏简单粗暴,不堪入目。而现在呢?游戏画面丰富多彩,景色怡人,动态感十足,在上一代的手柄游戏机时代都是前所未闻的。

上图是ARM演示团队制作的三张示意图。我们先来看看相对简单(以今天的标准)的3D内容,演示游戏为2010年推出的True Force,运行于2011年款的Galaxy S2。每帧图元16k,片段处理每像素时钟周期3.7次,基于OpenGL ES 2.0。

3年后的2013年,OpenGL ES 3.0正式推出,改善了GPU 对GPU运算的支持(并不是OpenGL ES 3.0 API的主打特色,而随OpenGL ES 3.1正式推出);允许开发商使用更多高级渲染技术。结合基础硬件后,视觉质量显著提升。将Trollheim演示与TrueForce比较一下便可一目了然,前者的复杂性比后者高了不少。TrueForce的每帧图元为16k,而Trollheim为150k,TrueForce的片段处理每像素时钟周期为3.7次,而Trollheim则为16次。

2016年,Vulkan正式推出,API效率大幅提高,与OpenGL ES相比能够以更低的开销帮助开发商更好地发挥硬件性能。当然,硬件本身也快速发展,比较一下Lofoten和Trollheim演示,我们即可清楚地看到复杂度的提升:每帧图元提高了300%,片段复杂度提高了150%。

智能手机设计的挑战与趋势

使用场景的变化仅是一个方面,移动设备本身也经历大幅升级。智能手机市场最初主打旗舰机型,随着智能化程度的不断提高,很多 PC特性已经可以实现,但通讯依旧是其主要功能。然而,过去短短几年间,智能手机用途不断扩展,打电话已不再是智能手机的主要功能,图像显示成为了关注焦点。

过去,手机电池寿命一般用单次充电支持的通话时长来衡量,而现在的标准则是网络浏览或高端游戏的续航时间,GPU与显示性能一起备受关注。用户希望体验更高质量的视觉效果,到目前为止,这一目标都是经由智能手机设计改善,以及显示内容的美感和流畅性来实现,一个证据就是屏幕边框变得越来越窄。市场的大致趋势是朝着屏幕包裹设备的方向发展,设计美感更多由UI而非硬件来实现。下图中,我们可以看出屏幕占整个设备的比例不断增加。这一趋势在三星Galaxy S7 Edge等机型上体现得尤为明显,已经实现屏幕对设备的全包裹。

除了打电话,现代智能手机还能提供极为丰富的功能,如邮件、社交媒体、导航定位、支付、浏览网页、游戏、拍照和视频等等。用户在期待功能升级的同时,也希望电池寿命不断延长。但是,即便使用当前所有最先进的技术,智能手机的电池容量还是要不断增大,具体变化趋势见下图。

除了电池容量变大,智能手机还变得越来越薄。一些机型的厚度甚至已经达到了7毫米以下,考虑到现代智能手机的技术含量,如此纤薄实在令人惊讶。

这样的发展方向并非完全没有弊端。屏幕增大导致电池尺寸变大,机身变薄,设备散热能力下降,因为屏幕的散热效率不如金属机身。此外,机身变薄后,用以散热的表面积也会减少。现代高端智能手机的性能上限很大程度上被散热能力牵制,如何保证机身内部元器件不因为高温而受损则因此成为另一大挑战。

现代智能手机装有多种耗电发热的核心元件,如摄像头子系统、屏幕、调制解调器、Wi-Fi、非易失性存储器、DRAM和主芯片本身(包括CPU、GPU和其他处理器)。因为总功耗一致,所以其中任何一个元件功耗的减少,都可以增加其他元件可以使用的配额,这也是系统功耗配比由用例决定的原因。

现代GPU非常复杂,严重依赖CPU运行驱动程序,以实现基于软件与应用程序进行交互。多亏了Vulkan这样的现代API,驱动程序的开销下降了,但是CPU依然需要运行驱动程序,所以不能完全避免耗电。由于所有元件功耗预算共享,因此在CPU中使用的、用于GPU交互的功耗就是不能应用于GPU本身的功耗。基于上述原因,降低CPU功耗势在必行,不仅是为GPU发展扫清瓶颈,更是要为尽可能的提高GPU可用功耗铺平道路。

与之类似,在运行复杂3D游戏的现代系统中,GPU会消耗大量DRAM带宽。由于要处理大量数据(上述提及的Lofoten每帧处理600,000个三角),消耗带宽责无旁贷,但DRAM的读写本身就是耗电的过程,也需要占用系统的总功耗预算。减少DRAM带宽可以降低其功耗,并用于其他元件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android性能优化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux 命令(218)—— lnstat 命令
lnstat 命令实际上是读取系统“/proc”中目录“/proc/net/stat”下面的文件,来显示当前主机的网络状态的。lnstat 是 rtstat 命令的更新替代命令,功能更完善。
恋喵大鲤鱼
2022/12/18
3680
【linux命令讲解大全】114. 网络状态监测工具iptstate和lnstat的使用
iptstate命令以top指令类似的风格时显示Linux内核中iptables的工作状态。
全栈若城
2024/03/02
1580
【linux命令讲解大全】020. Linux网络管理工具:lnstat、telnet和volname的使用
telnet命令用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。
全栈若城
2024/03/02
1300
Linux系统常用命令详解
ls是用于列出目录内容的命令。它可以显示当前目录(或指定目录)下的文件和子目录,并提供多种选项查看详细信息。
Java微观世界
2025/01/20
3740
Linux系统常用命令详解
Linux系统基本命令_linux常用基本命令
本文主要介绍Linux中常用的基本命令,简单实用,以供大家参考,如有错误,欢迎大家指出。下面开始介绍。
全栈程序员站长
2022/09/27
8.3K0
Linux系统基本命令_linux常用基本命令
Linux系统基础知识整理
  本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅。
阿豪聊干货
2018/08/09
1.4K0
Linux系统基础知识整理
Linux系统之常用命令
环境:CentOS7X64(CentOS Linux release 7.5.1804)
尜尜人物
2020/01/15
1.5K0
Linux系统之常用命令
常见的Linux系统监控命令
显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
仙人技术
2020/04/29
2.7K0
常见的Linux系统监控命令
Linux系统管理常用命令
1)显示当前时间: date .//Wed Jul 29 11:05:11 CST 2009  2)date修改时间:date -s  date 修改时间2007-08-29 14:41 date -s 14:36:30   //时间为14点36分30秒 date 082914362007 //时间为08月29日14点36分2007年 date 082914362007.30 //时间为08月29日14点36分2007年30秒,注意秒前面有一点 3)按字符串方式修改时间  可以只修改日期,不修改时间,输入: date -s 2009-07-28  只修改时间,输入:date -s 15:32:00  同时修改日期时间,注意要加双引号,日期与时间之间有一空格, 
黄规速
2022/06/15
2.7K0
Linux系统管理常用命令
linux系统-tcpdump常用抓包命令_tcpdump循环抓包
tcpdump命令–>用来将网络中传送的数据包的”头”完全截获下来提供分析,常见的有Wireshark。在Linux中输入命令man tcpdump给出的定义如下所示:
全栈程序员站长
2022/09/24
4.6K0
linux系统-tcpdump常用抓包命令_tcpdump循环抓包
Linux系统之smem命令的基本使用
在使用 smem 命令时,有几个注意事项可以帮助你更有效地利用这个工具并避免潜在的误解或错误。以下是几点重要的使用注意事项:
江湖有缘
2024/07/24
5980
Linux系统之smem命令的基本使用
dstat
官方对dstat的定义为:多功能系统资源统计生成工具( versatile tool for generating system resource statistics)。在获取的信息上有点类似于top、free、iostat、vmstat等多个工具的合集,官方解释为vmstat、iostat、ifstat等工具的多功能替代品,且添加了许多额外的功能(Dstat is a versatile replacement for vmstat, iostat and ifstat. Dstat overcomes some of the limitations and adds some extra features.);其结果可以保持到csv文件,使用脚本或第三方工具对性能进行分析利用(如通过监控平台监控,也可以保持到数据库)。
胡齐
2019/09/23
1.3K0
linux系统内核参数优化-linux快速入门教程
SHMMAX= 配置了最大的内存segment的大小 ------>这个设置的比SGA_MAX_SIZE大比较好。 SHMMIN= 最小的内存segment的大小 SHMMNI= 整个系统的内存segment的总个数 SHMSEG= 每个进程可以使用的内存segment的最大个数 配置信号灯( semphore )的参数: SEMMSL= 每个semphore set里面的semphore数量 -----> 这个设置大于你的process的个数吧,否则你不得不分多个semphore set,好像有process+n之说,我忘了n是几了。 SEMMNI= 整个系统的semphore set总数 SEMMNS=整个系统的semphore总数
jack.yang
2025/04/05
1170
使用lslk命令列出linux系统的本地锁
锁可以属于本地系统上的进程,也可以属于本地系统是NFS服务器的NFS客户端系统上的进程。
用户1685462
2021/09/08
1.1K0
100个 Linux 命令(8)-统计和查看系统状态
pstree命令以树的形式显示进程信息,默认树的分支是收拢的,也不显示pid,要显示这些信息需要指定对应的选项。
懒人的小脑
2019/01/16
2.6K0
100个 Linux 命令(8)-统计和查看系统状态
Linux系统常用命令总结
1. 最关键的命令 man echo 2. 目录文件操作命令 ls: 查看目录下的文件信息或文件信息 dir: pwd: 打印当前路径 cd:改变路径 mkdir:创建路径 rmdir:删除路径 cp:拷贝文件或目录 mv:移动文件或目录,或改名 rm: 删除文件或目录 tree:输出该目录下的文件目录树 3. 查看文件内容 cat: more: less: head: tail: wc:统计文件的字符数、单词数和行数等信息 4. 用户管理 useradd:添加用户 groupadd: userdel: 删
llhthinker
2018/01/24
1.6K0
3个性能监控和优化命令讲解
整理出了三个有关性能监控和优化命令详细讲解,文章很长,涉及top命令、free命令和vmstat命令,真的是很详细的讲解,希望能帮到大家
PHP开发工程师
2021/05/18
8210
3个性能监控和优化命令讲解
Linux基础命令(3)
十二 lsof命令简介 lsof(list open files) 是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件 描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工 具能够查看这个列表对系统监测以及排错将是很有帮助的。 1.命令格式: lsof [参数][文件] 2.命令功能: 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 需要访问核心内存和各种文件,所以需要root用户执行。 lsof打开的文件可以是: 1.普通文件 2.目录 3.网络文件系统的文件 4.字符或设备文件 5.(函数)共享库 6.管道,命名管道 7.符号链接 8.网络文件(例如:NFS file、网络socket,unix域名socket) 9.还有其它类型的文件,等等 3.命令参数: -a 列出打开文件存在的进程 -c<进程名> 列出指定进程所打开的文件 -g  列出GID号进程详情 -d<文件号> 列出占用该文件号的进程 +d<目录>  列出目录下被打开的文件 +D<目录>  递归列出目录下被打开的文件 -n<目录>  列出使用NFS的文件 -i<条件>  列出符合条件的进程。(4、6、协议、:端口、 @ip ) -p<进程号> 列出指定进程号所打开的文件 -u  列出UID号进程详情 -h 显示帮助信息 -v 显示版本信息 4.使用实例: 实例1:无任何参数 命令: lsof 输出:     [root@localhost ~]# lsof COMMAND     PID USER   FD      TYPE             DEVICE     SIZE       NODE NAME init          1 root  cwd       DIR                8,2     4096          2 / init          1 root  rtd       DIR                8,2     4096          2 / init          1 root  txt       REG                8,2    43496    6121706 /sbin/init init          1 root  mem       REG                8,2   143600    7823908 /lib64/ld-2.5.so init          1 root  mem       REG                8,2  1722304    7823915 /lib64/libc-2.5.so init          1 root  mem       REG                8,2    23360    7823919 /lib64/libdl-2.5.so init          1 root  mem       REG                8,2    95464    7824116 /lib64/libselinux.so.1 init          1 root  mem       REG                8,2   247496    7823947 /lib64/libsepol.so.1 init          1 root   10u     FIFO               0,17                1233 /dev/initctl migration     2 root  cwd       DIR                8,2     4096          2 / migration     2 root  rtd       DIR                8,2     4096          2 / migration     2 root  txt   unknown                                        /proc/2/exe ksoftirqd     3 root  cwd       DIR                8,2     4096          2 / ksoftirqd   
py3study
2020/01/06
1.7K0
【linux学习指南】Linux命令行工具大全(三):文件解压缩管理、数据处理一网打尽
该文章j将介绍Linux中的常用系统工具和命令,如用于分页显示文本的more和less、显示时间的date、管理日历的cal、文件搜索的find和grep、以及压缩/解压缩的zip/unzip和tar。文中详细解释了每个命令的语法、功能和常用选项,并提供了示例。
学习起来吧
2024/09/05
970
【linux学习指南】Linux命令行工具大全(三):文件解压缩管理、数据处理一网打尽
linux运维中的命令梳理(四)
----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续; (2) top:如果想对进程运行时间监控,应该用 top 命令; (3) kill 用于杀死进程或者给进程发送信号; (4) 查看文章最后的man手册,可以查看ps的每项输出的含义,to find: STANDARD FORMAT SPE
洗尽了浮华
2018/01/23
11.6K0
相关推荐
Linux 命令(218)—— lnstat 命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档