面向开发人员的 HSA:面向大众的异构计算
已发表: 2022-03-11AMD、ARM、三星、联发科、高通和德州仪器等芯片制造商有什么共同点? 嗯,除了这些芯片制造巨头之间的明显相似之处外,他们也恰好是 HSA 基金会的创始人。 什么是 HSA,为什么它需要由行业巨头支持的基础?
在这篇文章中,我将尝试解释为什么 HSA 在不久的将来会成为一件大事,所以我将从基础开始:什么是 HSA,你为什么要关心?
HSA 代表异构系统架构,这听起来有点无聊,但相信我,它确实会变得非常令人兴奋。 HSA 本质上是一组标准和规范,旨在允许在同一总线上进一步集成 CPU 和 GPU。 这不是一个全新的概念。 台式机 CPU 和移动 SoC 多年来一直采用集成显卡并使用单一总线,但 HSA 将其提升到了一个新的水平。
与简单地为 CPU 和 GPU 使用相同的总线和共享内存不同,HSA 还允许这两种截然不同的架构协同工作并共享任务。 这听起来可能没什么大不了的,但如果你仔细观察,并检查这种方法的潜在长期影响,它开始在技术意义上看起来非常“甜蜜”。
不好了! 这是开发人员必须实施的另一个愚蠢的标准
是和不是。
共享同一条总线的想法并不新鲜,为某些计算任务(不涉及渲染爆头)使用高度并行化的 GPU 的想法也不是什么新鲜事。 以前有人做过,我想我们的大多数读者已经熟悉 GPGPU 标准,如 CUDA 和 OpenCL。
但是,与 CUDA 或 OpenCL 方法不同,HSA 将有效地将开发人员排除在外,至少在将不同负载分配给不同处理内核时是如此。 硬件将决定何时将计算从 CPU 卸载到 GPU,反之亦然。 HSA 不应该取代 OpenCL 等已建立的 GPGPU 编程语言,因为它们也可以在 HSA 硬件上实现。
这就是 HSA 的重点:它应该使整个过程变得简单,甚至无缝。 开发人员不必考虑将计算卸载到 GPU 上。 硬件会自动完成。
为此,HSA 必须得到多家芯片制造商和硬件供应商的支持。 虽然 HSA 支持者的名单令人印象深刻,但英特尔明显缺席这个名副其实的芯片行业名人录。 鉴于英特尔在台式机和服务器处理器市场的市场份额,这是一件大事。 另一个你不会在列表中找到的名字是 Nvidia,它专注于 CUDA,目前是 GPU 计算市场的领导者。
但是,HSA 并非专为高性能系统和应用程序而设计,在通常带有Intel Inside贴纸的硬件上。 HSA 还可用于节能移动设备,英特尔在这些设备的市场份额微不足道。
所以,HSA 应该让生活更轻松,但它是否相关呢? 它会流行起来吗? 这不是技术问题,而是经济问题。 这将取决于市场这只看不见的手。 所以,在我们继续之前,让我们先仔细看看现在的情况,以及我们是如何走到这一步的。
HSA 开发、出牙问题和采用问题
正如我在介绍中所说,HSA 并不是一个新概念。 它最初是由 Advanced Micro Devices (AMD) 设想的,该公司有既得利益将其付诸实施。 十年前,AMD 收购了图形专家 ATI,从那时起,该公司一直试图利用其对尖端 GPU 技术的访问来提高整体销量。
从表面上看,这个想法很简单:AMD 不仅会继续开发和制造尖端的离散 GPU,还会将 ATI 的 GPU 技术集成到其处理器中。 AMD 的营销部门将这个想法称为“Fusion”,而 HSA 则被称为 Fusion System Architecture (FSA)。 听起来不错,对吧? 获得具有良好集成显卡的体面 x86 处理器听起来是个好主意,而且确实如此。
不幸的是,AMD 在此过程中遇到了许多问题。 我将挑出其中的几个:
- 任何科技领域的好主意都必然会被竞争对手采用,在这种情况下——英特尔。
- AMD 将技术优势拱手让给了英特尔,并发现由于英特尔在代工技术上的领先优势,它在 CPU 市场上的竞争越来越困难。
- AMD 的执行存在问题,许多新处理器上市较晚。 其他的则完全报废。
- 2008 年的经济崩溃和随后的移动革命没有帮助。
这些以及许多其他因素共同削弱了 AMD 的优势,并阻止了其产品和技术的市场采用。 AMD 于 2011 年年中开始推出具有新一代集成 Radeon 显卡的处理器,并开始将其称为加速处理单元 (APU) 而不是 CPU。
抛开营销不谈,AMD 的第一代 APU(代号 Llano)失败了。 这些芯片迟到了,跟不上英特尔的产品。 严重的 HSA 功能也不包括在内,但 AMD 开始在其 2012 平台中添加它们(Trinity,这基本上是 Llano 做得对的)。 下一步是在 2014 年,随着 Kaveri APU 的推出,它支持异构内存管理(GPU IOMMU 和 CPU MMU 共享相同的地址空间)。 Kaveri 还带来了更多的架构集成,实现了 CPU 和 GPU 之间的一致内存(AMD 称之为 hUMA,代表 Heterogeneous Unified Memory Access)。 随后的 Carizzo 更新添加了更多 HSA 功能,使处理器能够在 GPU 上进行上下文切换计算任务并执行更多技巧。
即将推出的 Zen CPU 架构以及在其之上构建的 APU 有望在市场上出现时提供更多功能。
所以有什么问题?
AMD 并不是唯一一家意识到片上 GPU 潜力的芯片制造商。 英特尔也开始将它们添加到其核心 CPU 中,ARM 芯片制造商也是如此,因此集成 GPU 目前几乎用于所有智能手机 SoC,以及绝大多数 PC/Mac。 与此同时,AMD在CPU市场的地位被侵蚀。 市场份额的下滑降低了 AMD 的平台对开发者、企业甚至消费者的吸引力。 市场上根本没有那么多基于 AMD 的 PC,而且 Apple 根本不使用 AMD 处理器(尽管它确实使用了 AMD 显卡,主要是因为 OpenCL 兼容性)。
AMD 在高端 CPU 市场上不再与英特尔竞争,但即使竞争,在这方面也不会产生太大影响。 人们不会购买 2,000 美元的工作站或游戏 PC 来使用集成显卡。 他们使用昂贵的独立显卡,并且不太关心能源效率。
一些用于智能手机和平板电脑的 HSA 怎么样?
可是等等。 移动平台呢? AMD 不能为智能手机和平板电脑芯片推出类似的解决方案吗? 嗯,不,不是真的。
你看,在收购 ATI 几年后,AMD 发现自己陷入了艰难的财务状况,再加上经济危机,因此决定将其 Imageon 移动 GPU 部门出售给高通。 高通将产品重新命名为 Adreno(Radeon 的变位词),并继续使用重新粉刷的内部 GPU 成为智能手机处理器市场的主导者。
正如你们中的一些人可能注意到的那样,在智能手机革命即将开始之际销售智能手机图形设备,看起来并不是一个出色的商业举措,但我想事后诸葛亮总是 20/20。
HSA 过去仅与 AMD 及其 x86 处理器相关联,但现在情况已不再如此。 事实上,如果所有 HSA 基金会成员都开始出货支持 HSA 的 ARM 智能手机处理器,那么无论是在收入还是出货量方面,他们的销量都将超过 AMD 的 x86 处理器数倍。 那么如果他们这样做会发生什么? 这对行业和开发商意味着什么?
好吧,对于初学者来说,智能手机处理器在某种程度上已经依赖于异构计算。 异构计算通常是指在单个芯片中使用不同架构的概念,考虑到当今高度集成的 SoC 上的所有组件,这可能是一个非常广泛的定义。 因此,几乎每个 SoC 都可以被视为异构计算平台,具体取决于一个人的标准。 有时,人们甚至将基于相同指令集的不同处理器称为异构平台(例如,具有 ARM Cortex-A57 和 A53 内核的移动芯片,它们都是基于 64 位 ARMv8 指令集的)。
许多观察家一致认为,大多数基于 ARM 的处理器现在可能被视为异构平台,包括 Apple A 系列芯片、三星 Exynos SoC 和其他供应商的类似处理器,即高通和联发科等大厂商。
但为什么有人需要智能手机处理器上的 HSA? 使用 GPU 进行通用计算来处理专业工作负载的重点不就是愤怒的小鸟和优步吗?
是的,但这并不意味着不能使用几乎相同的方法来提高效率,这是移动处理器设计的优先事项。 因此,与在高端工作站上处理无数并行任务不同,HSA 还可用于使移动处理器更高效、更通用。
很少有人仔细查看这些处理器,他们通常在购买新手机时查看规格表,仅此而已:他们查看数量和品牌。 他们通常不看SoC 芯片本身,这告诉了我们很多信息,原因如下:高端智能手机处理器上的 GPU 比 CPU 占用更多的硅空间。 考虑到它们已经存在,将它们很好地用于游戏以外的应用程序会很好,不是吗?
一个假设的、完全符合 HSA 的智能手机处理器可以让开发人员在不增加总体生产成本的情况下挖掘这一潜力、实现更多功能并提高效率。
以下是 HSA 可以为智能手机处理器做的事情,至少在理论上:
- 通过将合适的任务转移到 GPU 来提高效率。
- 在某些情况下通过卸载 CPU 来提高性能。
- 更有效地利用内存总线。
- 通过一次挖掘更多的硅来潜在地降低芯片制造成本。
- 引入 CPU 内核无法以有效方式处理的新功能。
- 通过标准化简化开发。
听起来不错,尤其是当您认为开发人员不太可能在实现上浪费大量时间时。 这就是理论,但我们将不得不等待看到它在行动中,这可能需要一段时间。
HSA 是如何工作的?
我已经在简介中概述了基础知识,但出于以下几个原因,我不愿过多介绍:没有人喜欢在技术博客上发布的中篇小说,而 HSA 的实现可能会有所不同。
因此,我会尽量用几百字来概括这个概念。
在标准系统上,应用程序将通过将缓冲区传输到 GPU 来卸载 GPU 计算,这将涉及排队之前的 CPU 调用。 然后 CPU 将调度作业并将其传递给 GPU,GPU 将在完成后将其传回 CPU。 然后应用程序将获得缓冲区,在它准备好之前必须再次由 CPU 映射。 如您所见,这种方法涉及很多来回。
在 HSA 系统上,应用程序将作业排队,HSA CPU 将接管,将其交给 GPU,将其取回,然后将其提供给应用程序。 完毕。
这可以通过在 CPU 和 GPU 之间直接共享系统内存来实现,尽管也可能涉及其他计算单元(例如 DSP)。 为了实现这一级别的内存集成,HSA 为计算设备使用了一个虚拟地址空间。 这意味着 CPU 和 GPU 内核可以平等地访问内存,只要它们共享页表,允许不同的设备通过指针交换数据。
这显然对效率很有好处,因为不再需要为 GPU 和 CPU 分别使用虚拟内存来分配内存。 得益于统一的虚拟内存,两者都可以根据需要访问系统内存,从而确保了优越的资源利用率和更大的灵活性。
想象一个具有 4GB RAM 的低功耗系统,其中 512MB 分配给集成 GPU。 这种模型通常不灵活,并且您无法动态更改 GPU 内存量。 您只能使用 256MB 或 512MB,仅此而已。 使用 HSA,您可以随心所欲地做任何事情:如果您将大量内容卸载到 GPU,并且需要为 GPU 提供更多 RAM,则系统可以分配它。 因此,在具有大量高分辨率资产的图形绑定应用程序中,系统最终可能会无缝地为 GPU 分配 1GB 或更多 RAM。

在所有条件相同的情况下,HSA 和非 HSA 系统将共享相同的内存带宽,可以访问相同数量的内存,但 HSA 系统最终可以更有效地使用它,从而提高性能并降低功耗。 一切都是为了少花钱多办事。
异构计算有什么好处?
简单的答案? 对于比 CPU 更适合 GPU 的所有计算任务,异构计算或 HSA 应该是一个不错的选择。 但这究竟意味着什么,GPU 到底擅长什么?
与独立显卡(尤其是高端游戏显卡和工作站解决方案)相比,现代集成 GPU 的功能并不是很强大,但它们比其前辈强大得多。
如果您没有跟踪,您可能会认为这些集成 GPU 是一个笑话,多年来它们就是这样:用于廉价家庭和办公室盒子的图形。 然而,随着集成 GPU 从芯片组转移到 CPU 封装和芯片,这种情况在十年之交开始发生变化,成为真正的集成。
与旗舰 GPU 相比,虽然功能仍然严重不足,但即使是集成 GPU,也具有很大的潜力。 与所有 GPU 一样,它们在单指令多数据 (SIMD) 和单指令多线程 (SIMT) 加载方面表现出色。 如果您需要在重复的并行负载中处理大量数字,GPU 应该会有所帮助。 另一方面,CPU 在繁重的分支工作负载方面仍然表现出色。
这就是 CPU 具有较少内核的原因,通常在 2 到 8 个之间,并且内核针对顺序串行处理进行了优化。 GPU 往往有数十个、数百个,在旗舰独立显卡中,有数千个更小、更高效的内核。 GPU 内核旨在同时处理多个任务,但这些单独的任务比 CPU 处理的任务要简单得多。 如果 GPU 能够以卓越的效率和/或性能处理这些负载,为什么还要让 CPU 承受这些负载呢?
但是,如果 GPU 如此出色,我们为什么不早在几年前就开始将它们用作通用计算设备呢? 好吧,该行业尝试过,但进展缓慢且仅限于某些利基市场。 该概念最初被称为图形处理单元上的通用计算 (GPGPU)。 在过去,潜力是有限的,但 GPGPU 概念是合理的,随后以 Nvidia 的 CUDA 和 Apple/Khronos Group 的 OpenCL 的形式被接受和标准化。
CUDA 和 OpenCL 产生了巨大的差异,因为它们允许程序员以不同的、更有效的方式使用 GPU。 然而,它们是特定于供应商的。 您可以在 Nvidia 硬件上使用 CUDA,而 OpenCL 是为 ATI 硬件保留的(并且被 Apple 采用)。 Microsoft 的 DirectCompute API 与 DirectX 11 一起发布,并允许有限的、与供应商无关的方法(但仅限于 Windows)。
让我们通过列出几个 GPU 计算的应用来总结一下:
传统的高性能计算 (HPC)形式为 HPC 集群、超级计算机、用于计算负载的 GPU 集群、GRID 计算、负载平衡。
需要物理的负载,通常可以但不必涉及游戏或图形。 它们还可用于处理流体动力学计算、统计物理以及一些奇异的方程和算法。
Geometry ,几乎所有与几何相关的东西,包括透明度计算、阴影、碰撞检测等等。
音频处理,使用 GPU 代替 DSP、语音处理、模拟信号处理等。
数字图像处理,是 GPU 的设计目的(显然),因此它们可用于加速图像和视频的后期处理和解码。 如果您需要解码视频流并应用过滤器,即使是入门级的 GPU 也会用 CPU 擦地板。
科学计算,包括气候研究、天体物理学、量子力学、分子建模等。
其他计算密集型任务,即加密/解密。 无论您需要“挖掘”加密货币、加密或解密您的机密数据、破解密码还是检测病毒,GPU 都能提供帮助。
这不是潜在 GPU 计算应用程序的完整列表,但不熟悉该概念的读者应该大致了解 GPU 计算的不同之处。 我还遗漏了明显的应用程序,例如游戏和专业图形。
无论如何,不存在一个完整的列表,因为 GPU 计算可以用于各种各样的东西,从金融和医学成像到数据库和统计负载。 你受限于你自己的想象力。 所谓的计算机视觉是另一个新兴应用。 如果您需要“教”无人机或无人驾驶汽车避开树木、行人和其他车辆,那么拥有强大的 GPU 是一件好事。
随意在此处插入您最喜欢的 Lindsay Lohan 笑话。
为 HSA 开发:一些坏消息的时间
这可能是我个人的观点,而不是事实,但我是 HSA 的信徒。 我认为这个概念有很大的潜力,只要它实施得当,并在芯片制造商和开发人员中获得足够的支持。 然而,进展缓慢得令人痛苦,或者这只是我的感觉,还有一点一厢情愿。 我只是喜欢看到新技术在发挥作用,而且我绝不是一个有耐心的人。
HSA 的问题在于它还不存在。 这并不意味着它不会起飞,但可能需要一段时间。 毕竟,我们不只是在谈论新的软件堆栈。 HSA 需要新的硬件来发挥它的魔力。 问题在于,大部分硬件仍在绘图板上,但我们已经到了那里。 慢慢地。
这并不意味着开发人员没有从事与 HSA 相关的项目,但在这方面没有太多的兴趣或进展。 如果您想尝试 HSA,您应该查看以下一些资源:
显然,HSA Foundation @ GitHub 是 HSA 相关资源的地方。 HSA 基金会在 GitHub 上发布和维护了许多项目,包括调试器、编译器、重要的 HSAIL 工具等等。 大多数资源都是为 AMD 硬件设计的。
AMD 提供的 HSAIL 资源可让您更好地了解 HSAIL 规范。 HSAIL 代表 HSA 中间语言,它基本上是希望以 HSA 设备为目标的后端编译器编写者和库编写者的关键工具。
HSA 程序员参考手册 (PDF) 包括完整的 HSAIL 规范,以及对中间语言的全面解释。
HSA 基金会资源暂时有限,基金会的开发者计划“即将推出”,但有许多官方开发者工具可供查看。 更重要的是,它们会让您很好地了解您需要开始使用的堆栈。
AMD 官方博客也提供了一些有用的 HSA 内容。
如果您是好奇的类型,这应该足以让您入门。 真正的问题是你是否应该费心开始。
HSA 和 GPU 计算的未来
每当我们报道一项新兴技术时,我们都会面临同样的困境:我们是应该告诉读者花时间和资源,还是远离,采取观望态度?
我已经明确表示我有些偏见,因为我喜欢 GPU 计算的一般概念,但目前大多数开发人员可以不用它。 即使它起飞,HSA 的吸引力也有限,不会引起大多数开发人员的关注。 然而,这在未来可能很重要。 不幸的是,对于 AMD 来说,它不太可能成为 x86 处理器市场的游戏规则改变者,但它可能在基于 ARM 的移动处理器中更为重要。 这可能是 AMD 的想法,但高通和联发科等公司更有能力将支持 HSA 的硬件带给数亿用户。
它必须是软件和硬件的完美共生。 如果移动芯片制造商为 HSA 疯狂,那将是一件大事。 新一代 HSA 芯片将模糊 CPU 和 GPU 内核之间的界限。 他们将平等地共享相同的内存总线,我认为公司将开始以不同的方式营销它们。 例如,AMD 已经将其 APU 营销为由不同“计算核心”(CPU 和 GPU)组成的“计算设备”。
移动芯片最终可能会使用类似的方法。 芯片制造商可以开始谈论集群、模块和单元,而不是销售具有 8 个或 10 个 CPU 内核的芯片,以及这样那样的 GPU。 因此,如果考虑 GPU 内核,具有四个小型和四个大型 CPU 内核的处理器将是“双集群”或“双模块”处理器,或者“三集群”或“四集群”设计. 随着时间的推移,许多技术规格往往变得毫无意义,例如,办公室打印机上的 DPI,或廉价智能手机相机上的百万像素数。
但这不仅仅是营销。 如果 GPU 变得像 CPU 内核一样灵活,并且能够以与 CPU 同等的条件访问系统资源,我们为什么还要费心称呼它们的真名呢? 二十年前,当专用数学协处理器 (FPU) 成为每个 CPU 的必备组件时,该行业就停止使用它们。 仅仅几个产品周期之后,我们就忘记了它们曾经存在过。
请记住,HSA 并不是利用 GPU 进行计算的唯一方法。
英特尔和英伟达不在船上,他们的方法不同。 英特尔近几年悄悄加大了GPU研发投入,最新的集成显卡解决方案相当不错。 随着片上 GPU 变得更强大并占用更多的硅空间,英特尔将不得不寻找更巧妙的方法将它们用于通用计算。
另一方面,英伟达几年前退出了集成显卡市场(当时它停止生产 PC 芯片组),但它确实凭借 Tegra 系列处理器在 ARM 处理器市场上碰运气。 它们并没有取得巨大的成功,但它们仍在某些硬件中使用,Nvidia 正将精力集中在嵌入式系统上,即汽车。 在此设置中,集成 GPU 发挥了自己的作用,因为它可用于碰撞检测、室内导航、3D 映射等。 还记得 Google 的Project Tango吗? 一些硬件基于 Tegra 芯片,允许深度感应和其他一些巧妙的技巧。 另一方面,英伟达的特斯拉产品线覆盖了高端 GPU 计算市场,并确保了英伟达在未来几年在这一领域的主导地位。
底线? 在纸面上,GPU 计算是一个具有巨大潜力的伟大概念,但目前的技术状态还有很多不足之处。 HSA 在解决大多数这些问题方面应该走很长一段路。 更重要的是,并非所有行业参与者都支持它,这势必会进一步减缓采用速度。
这可能需要几年时间,但我相信 GPU 最终会崛起并在通用计算领域占据应有的位置,甚至在移动芯片中也是如此。 技术几乎已经准备就绪,剩下的将由经济学来完成。 如何? 好吧,这是一个简单的例子。 英特尔当前一代的 Atom 处理器具有 12 到 16 个 GPU 执行单元 (EU),而它们的前代基于较旧的架构只有四个 EU。 随着集成 GPU 变得更大、更强大,以及芯片面积增加,芯片制造商别无选择,只能使用它们来提高整体性能和效率。 如果不这样做,对利润和股东都是不利的。
不用担心,您仍然可以在这种新型 GPU 上享受偶尔的游戏。 然而,即使你不玩游戏,GPU 也会在后台做很多事情,卸载 CPU 以提高性能和效率。
我想我们都同意这将是一笔巨大的交易,尤其是在廉价的移动设备上。