各位亲爱的网友们,大家好!
今天我们邀请到高通GPU团队负责人埃里克·德默斯,来聊聊高通即将推出的X2 GPU架构。我们将探讨X2 GPU相比上一代X1 GPU有哪些变化,以及做出这些变化的原因。
希望你们喜欢!
以下文字稿已进行编辑,以提高可读性和简洁性。
乔治:各位互联网上的朋友们,大家好。我们现在在圣地亚哥的高通总部,参加他们的首届架构日活动,我今天请到了埃里克·德默斯。你是做什么的?
埃里克:我是高通公司的员工,我领导我们的GPU团队,我们负责大部分硬件和部分软件。所有功能都集成在一个系统中,我们组建了一支非常优秀的团队,我在这里工作了十四年。
乔治:用 60 秒快速概括一下 X2 GPU 相对于 X1 GPU 的新特性。
埃里克:嗯,对我们来说,这是下一代产品。这意味着我们审视了X1上的所有设计,然后说“我们可以做得更好”,并从根本上提升了性能。我之前也说过,性能提升非常显著,但功耗的提升幅度并不相同。因此,它的核心能效非常高,这意味着您只需付出略高的功耗即可获得更高的性能。这与性能翻倍、功耗也翻倍的情况截然不同,所以这是一项重大改进。其次,我们希望成为一款功能齐全的DirectX 12.2 Ultimate产品。也就是说,它具备DirectX 12.2的所有特性,而大多数Windows GPU已经支持这些特性,所以我们也加入了支持DirectX 12.2的行列。
George:那么在 API 方面,你们将支持 X2 GPU 的哪些功能?
Eric:显然,我们会支持 DirectX 12.2 以及其后的所有 DirectX 版本,因此完全兼容。此外,我们还计划引入原生 Vulkan 1.4 支持。Windows 提供了一个 Vulkan 1.4 版本,但我们将提供一个与我们其他产品相同的原生代码库。我们还将引入原生 OpenCL 3.0 支持,该支持也已应用于我们的其他产品。然后,我们计划在 2026 年第一季度引入 SYCL 支持。SYCL 是一种面向 GPU 的高端计算 API 和着色语言。它是一个开放标准,其他公司也支持它,这有助于我们解决 Windows 平台上骁龙处理器的一些 GPGPU 用例。
乔治:太棒了,接下来我们稍微深入了解一下架构。X2 GPU 现在配备了所谓的 HPM 或高性能内存?它的具体用途是什么?在硬件中又是如何实现的?
埃里克:我们的GPU一直都带有内存。最初在移动端,我们采用的是分块架构,这种架构可以最大限度地降低内存带宽需求。它的实现方式是在将数据发送到DRAM之前,尽可能多地保留芯片内部的数据。现在,我们更进一步,决定“把内存容量做得更大”,不再采用分块渲染的方式,而是将渲染结果直接写入芯片内部的SRAM,这个SRAM的容量足以容纳整个屏幕或大部分屏幕内容。因此,特别是对于X2至尊版,我们可以实现QHD+、1600p、2K分辨率,所有渲染工作,包括色彩ROP单元、Z缓冲区等,都在芯片内部以全速完成,无需占用任何DRAM带宽。这样一来,GPU、CPU或NPU就可以利用这些带宽进行读取操作。这不仅提升了性能,节省的带宽也降低了功耗。所以,对我们来说,这实现了每瓦性能的提升。它不仅限于渲染,它还是一块连接到GPU的通用大容量内存,可以用于计算。你可以先渲染到这块内存上,然后使用着色器在HPM(高性能内存模块)中进行后期处理。我们已经开发出各种灵活的用例,未来还会开发出更多。
乔治:太棒了,说到HPM(高性能内存模块),X2-90 GPU上有21兆字节的HPM。它是如何分配的?是每个切片5.25MB,并且该切片只能访问这5.25MB,还是整个芯片共享?
Eric:所以从物理层面来说,它是按切片实现的。每个切片有 5.25 MB 的空间。但是,实际上我们有一个完整的交叉开关,因为如果你把它看作一个帧缓冲区,它允许从任何位置获取数据。你可以从任何一个切片随机访问整个表面。我们有一个全带宽的完整交叉开关,这使得 HPM 可以被任何一个切片使用,即使它在物理上是实现在切片内部的。
乔治:HPM是如何设置的?它是缓存还是草稿本?
埃里克:所以答案是肯定的,它由软件控制。你可以分配一部分空间作为缓存。最多可以分配 3MB 的颜色和 Z 缓存。大约三分之一到三分之二的空间,通常是在渲染到 DRAM 时用作缓存。这里的缓存用于粒度级的读取,所以你会预取数据并将其加载到芯片上,解压缩数据,然后将其拉入 HPM,尽可能在本地使用,然后在清除缓存行时将其缓存出来。HPM 的其余部分将保留供软件使用。它可以用来存储任何内容,可以用来存储渲染目标,你可以存储多个渲染目标,它可以只存储 Z 缓冲区或颜色缓冲区。它还可以存储你将在渲染中使用的先前渲染的纹理。从这个意义上讲,它实际上是一个通用的临时存储空间,你可以从应用程序和驱动程序的角度根据需要使用它。
乔治:为什么只允许将3兆字节的SRAM用作缓存,而将另外2.25兆字节用作临时SRAM?为什么不全部用作缓存呢?
Eric:是的,这其实是我们内部也讨论过的问题。首先,以我们目前的粒度进行缓存是有成本的。标签内存(也就是用来记录缓存状态的内存)会随着缓存大小的增长而增长。所以这并非免费,不能随意添加。实际上,成本相当高,因为它还会影响计时,因为需要进行标签查找,而且标签越大,设计就越复杂。因此,存在一个理想的上限,超过这个上限就需要投入更多的工作和成本。但我们研究后发现,如果将整个帧缓冲区都存储在 HPM 中,效率可以达到 100%。但一旦缓存大小低于此值,效率就会趋于平缓,缓存命中率不会显著下降,除非缓存变得非常小,而且只有当缓存接近满载时,命中率才会显著提高。所以,缓存容量达到了一个平台期,我们发现平台期底部的大小正好是我们计划的大小。这样一来,缓存命中率就非常高了。如果我们把容量扩大一倍,效果不会有太大提升,但成本会更高。因此,在这个设计方案中,我们做出了正确的权衡。未来我们可能会重新考虑这个问题,尤其是在HPM的应用场景发生变化的情况下,但就目前而言,这个大小对我们来说是合适的。
乔治:我们还要更深入地研究切片架构。之前,切片中包含一个微型存储处理器(micro-SP)。每个存储处理器(SP)有两个微型存储处理器,然后每个切片又包含两个存储处理器。
埃里克:是的。
乔治:micro-SP 芯片以前每波只能发出 128 条指令,现在你们改用了每波 64 条指令,但 micro-SP 芯片里仍然有 128 个 ALU。你们是如何处理每波只能向 128 个 ALU 发出 64 条指令的情况的?
Eric:我不确定这与其他方案有太大区别,但我们采用的是双波发射。我们会同时发射两个波,让所有算术逻辑单元(ALU)都保持忙碌。从某种意义上说,这意味着我们不仅能够处理 wave64,而且由于 wave64 的特性,我们的效率也更高。如果执行分支操作,波越小,粒度损失就越小,需要执行的潜在分支也就越少。Wave64 通常比单个大波更有效地利用资源,事实上,两个波比一个波更高效。因此,对我们来说,保持更多波在运行本身就是一种效率提升,即使它不会影响峰值吞吐量。但这会带来额外的开销,你需要更多的上下文信息、更多的元数据才能同时运行两个波。其中一个后果是,通用寄存器(GPR,用于存储波的数据)的容量需要从 96k 增加到 128k,大约增加了 30%。我们增加波浪数量,部分原因是想增加波浪数量,既是为了解决双重问题,但增加波浪数量通常效率更高。
乔治:那么,你的GPU能够进行双发射的频率如何?同时发射两波脉冲的频率如何?
埃里克:一直都是这样,几乎总是如此。我猜想可能会出现着色器执行过程中出现“气泡”的情况,导致两个着色器都在等待,这种情况下两个都不会运行。也许其中一个着色器会先发出并准备就绪,但通常情况下,我们有很多着色器在运行,所以总有足够的空间让两个着色器同时运行。
乔治:好的。
埃里克:如果一个波使用了大量的 GPR,而我们没有足够的 GPR,那确实会出现这种情况。通常情况下,我们有足够的 GPR 来处理两个这样的情况,但在这种情况下,你可能会更频繁地遇到性能限制,因为没有足够的 GPR 来覆盖所有内存读取的延迟。但这只是非常非常复杂的着色器的一个极端情况,并不常见。
乔治:所以双重议题机制并没有太多限制?
埃里克:不,没有限制。
乔治:太好了,非常感谢您接受这次采访。我的最后一个问题是,您最喜欢哪种奶酪?
埃里克:问得好。我爱布里奶酪,永远都会爱布里奶酪……还有马苏里拉奶酪块。我在加拿大长大,肉汁奶酪薯条(poutine)在那儿很流行,我超级爱吃马苏里拉奶酪块,但现在很难买到。我偶尔能在全食超市(Whole Foods)找到,但令人惊讶的是,在亚马逊上,我得去订购才能在家做肉汁奶酪薯条。
乔治:有趣的是伊恩,他负责掌镜。我和他,他是土豆,我是奶酪。
埃里克:好了。
乔治:我们制作了一档名为“科技肉汁奶酪薯条”的节目,嘉宾是“肉汁”。
埃里克:啊,找到了,肉汁也有。瑞士小屋牌的,或者我忘了另一个牌子了,反正都很好吃。圣地亚哥的Five Guys餐厅的薯条最接近正宗的肉汁奶酪薯条。我有些加拿大朋友会去Costco买奶酪,然后去Five Guys买薯条,自己做酱汁,就为了吃这个。
乔治:非常感谢您接受这次采访。
埃里克:不客气。
乔治:如果你喜欢这类内容,请点赞并订阅。这对频道的发展很有帮助。如果你想要文字稿,可以在chipsancheese.com上找到,Patreon 和 PayPal 的链接也在下方的描述中。非常感谢埃里克。
埃里克:不客气,谢谢你。
乔治:祝各位一切顺利。
原文: https://chipsandcheese.com/p/diving-into-qualcomms-upcoming-adreno