与 CPU 类似,GPU 中的数据流也由软件定义,并取决于 GPU 的严格而复杂的存储器层级。典型的 GPU 存储器层级如图 3 所示。
每个线程在寄存器文件中都有自己的存储器空间,用以存储线程的本地变量。少量线程(相同的存储块中)可通过共享存储器通信;所有线程都能通过全局或片外存储器通信。
如图 3 所示,与存储器访问有关的能耗和时延分别增加 100 倍和 80 倍以上,因为数据需要遍历存储器层级——从寄存器文件到全局存储器。此外,存储器冲突不可避免,会增大时延,导致 ALU 闲置,致使计算能力和效率降低。
图 3:典型的 GPU 存储器层级
因此,如果实现 GPU 的计算和效率潜能,工作负载的数据流必须准确映射到 GPU 存储器层级。工作负载要具备足够的数据局部性,才能高效地映射到 GPU,实际上这样的工作负载很少。对大多数工作负载而言,当在 GPU 上实现时,实际的计算能力和效率会大打折扣,解决方案的时延也会增加。
机器学习推断作为量化实例,能清楚反应出这种数据流局限性。GPU 必须批处理,例如 128,以实现高效但时延更长的解决方案。最终,批处理使机器学习处理局部化,但代价是时延增加。GoogLeNet v1 Inference 的 NVidia P40 基准测试结果可清楚地反映出该效应。对于 GoogLeNet v1,网络因 P40 存储器带宽而受计算束缚,因此与批处理有关的存储器带宽削减不会产生很大帮助。然而,P40 显然需要 128 批处理以实现 50% 的 GPU 理论性能,会给系统带来很大时延。
有些情况下,可利用 CPU 对数据进行预处理,以便工作负载更好地映射到 GPU SIMT 架构和存储器层级,但代价是产生更多 CPU 计算和功耗,抵消了 GPU 的优势。
有限的 I/O 选项
如“GPU 起源和目标工作负载”部分所述,GPU 的角色是作为协处理器。为了便于与主机通信,GPU 以往只有一个硬 PCIe® 接口以及几个片外 DRAM 接口(例如 GDDR5)。最近几代产品中,有些 GPU 采用硬接口实现 GPU 到 GPU 通信。仍然需要使用 CPU 来与网络进行连接以及向 GPU 分配任务,这会增加系统功耗,同时会因 PCIe 的有限带宽而带来瓶颈问题。例如,英伟达的 Tesla P40 支持 PCIe 3.0 x16,只能实现 16GB/s 带宽。
GPU 厂商已经开始构建小型 SoC,例如 NVidia Tegra X1,能够提供集成 GPU 计算、ARM® 处理器以及一些通用汽车外设(如 HDMI、MIPI、SIP、CAN 和基础以太网)。这些器件只具备少量计算能力,必须依靠额外的分立 GPU 实现必要的计算能力。然而,分立 GPU 的接口有很大局限性,例如 Tegra X1 仅支持 PCIe 2.0 x4,造成严重瓶颈。额外的 SoC 的功耗会进一步降低平台的效率。
片上存储器资源
除了时延、效率和吞吐量方面的不利影响,片外存储器的带宽要显著低于本地/片上存储器。因此,如果工作负载需要依靠片外存储器,不仅片外存储器的带宽会成为瓶颈,而且计算资源也会被闲置,从而降低 GPU 提供的计算功能和效率。
因此,更有利的做法是采用大型低时迟、高带宽片上存储器。再次以机器学习推断为例,GoogLeNet 共需要 27.2MB 的存储器,假设 FP32 方案,这样没能提供 GPU,这意味着需要片外存储器。很多情况下需采用高昂的高带宽存储器 (HBM) 和批处理,以防止内核闲置。如果选择具有更大型片上存储器的器件,就能避免 HBM 成本以及额外的时延和功耗问题。
功耗范围
GPU 厂商在设计板卡和 GPU 时通常要适应 250W 功耗上限,并依靠有效热管理来调节温度。针对机器学习推断市场,英伟达开发了满足 75W 功耗范围的器件,例如 Tesla M4 和 P4。即使 75W 也远超出所允许的系统级功耗和热范围。 GPU 的绝对功耗依然是阻碍 GPU 广泛使用的一大因素。
功能安全性
GPU 源自消费图形处理和高性能计算领域,不存在功能安全性要求。随着 GPU 厂商瞄准 ADAS 市场,功能安全性就变成了优先考虑和要求。器件需要全新设计,以确保实现所需的功能安全性认证等级,以便用在 ADAS 系统中。对 GPU 厂商来说这是一个长期学习过程,涉及各个方面,需要新的工具和设备。