部分算法与存储器绑定,并受到基于 DDR 的 Alveo 卡上可用的 77 Gb/s 带宽的限制。对于此类应用,可使用基于高带宽存储器 (HBM) 的 Alveo 卡,这些卡可提供高达 460 Gb/s 的存储器带宽。对于 Alveo 实现,在 FPGA 封装内整合了 2 个 16 层 HBM(HBM2 规范)栈,并通过中介层连接到 FPGA 互连结构。双 HBM 栈的高层次示意图如下所示。
此实现可提供:
- 16 GB HBM,其中有 512 MB 伪通道 (PC) 用于 Alveo U55C 加速器卡,如 Alveo U55C 数据中心加速器卡数据手册(DS978) 中所述
- 总计 8 GB HBM,其中有 256 MB PC 用于 Alveo U280 加速器卡和 U50 卡,如 Alveo U50 数据中心加速器卡数据手册(DS965) 中所述。
- 一条独立 AXI 通道,用于 Vitis 内核与 HBM PC 之间通过分段式交叉开关矩阵网络进行通信
- 1 个双通道存储器控制器用于为两个 PC 寻址
- 每条 PC 最大 14.375 Gb/s 理论带宽
- 针对 HBM 子系统最大理论带宽为 460 Gb/s (32 × 14.375 Gb/s)
虽然每条 PC 的最大理论性能为 14.375 Gb/s,但它小于 DDR 通道的理论最大值 19.25 Gb/s。为了超越 DDR 性能,设计必须将多个 AXI 主接口有效集成到 HBM 子系统内。可编程逻辑具有 32 个 HBM AXI 接口,可以通过内置开关网络访问任一 HBM 栈上的任意 PC 中的任意存储器位置,此内置开关网络可提供对存储器空间的完整访问权限。
到 HBM 的连接由 HBM Memory Subsystem (HMSS) IP 管理,此 IP 启用所有 HBM PC,并将 XDMA 自动连接至 HBM 以便主机访问全局存储器。搭配 Vitis 编译器使用时,HMSS 会自动自定义为仅激活 --connectivity.sp
选项所指定的必要存储器控制器和端口,以将用户内核与 XDMA 连接到这些存储器控制器,从而实现最优化的带宽和时延。
--connectivity.sp
选项如下:sp=<compute_unit_name>.<argument>:<HBM_PC>
在以下配置文件示例中,内核输入端口 in1
和 in2
分别连接到 HBM PC 0 和 1,输出缓冲器 out
则连接到 HBM PC 3–4
[connectivity]
sp=krnl.in1:HBM[0]
sp=krnl.in2:HBM[1]
sp=krnl.out:HBM[3:4]
每个 HBM PC 为 256 MB,为该内核提供总共 1 GB 的存储器存取。请参阅使用 HBM 教程以获取更多信息和示例。
--connectivity.sp
语法还支持您指定开关网络的通道索引,HMSS 应将指定的索引用于连接内核接口。指定开关网络索引的 --connectivity.sp
语法是:sp=<compute_unit_name>.<argument>:<bank_name>.<index>
指定开关索引时,每个 sp
选项仅限指定一个索引。不得复用配置文件中的其他 sp
选项或行已使用的索引。
在此例中,先前示例的最后一行可重写为:sp=krnl.out:HBM[3:4].3
,表示使用开关通道 3 (S_AXI03
),或者重写为 sp=krnl.out:HBM[3:4].4
,表示使用开关通道 4 (S_AXI04
),如上图所示。
任一 sp
选项都会将内核数据传输事务布线为穿过最左侧的网络开关块之一,以降低实现复杂性。使用范围 0 到 7 内的任意索引则会使用网络中最左侧的两个开关块之一,使用任何其他索引将强制使用额外开关块,由此增加布线复杂性,并且可能对性能造成负面影响(取决于应用)。
HBM 端口位于器件的底部 SLR 中。对于 SSI 技术器件中跨超级逻辑区域 (SLR) 的 AXI 接口,HMSS 会自动处理这些接口的复杂布局和时序。默认情况下,如果在 v++
上不指定 --connectivity.sp
或 --connectivity.slr
选项,那么所有内核 AXI 接口都访问 HBM[0] 且所有内核都分配到 SLR0。
但您可以使用 --connectivity.slr
选项来指定内核的 SLR 分配。对于使用多个 SLR 的器件或平台,强烈建议您定义对特定 SLR 的 CU 分配。如需了解更多信息,请参阅 在 Alveo 加速器卡上将计算单元分配给 SLR。