消除 I/O 争用 - 2022.1 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

当在每次循环迭代期间必须多次访问内部存储器资源的给定 I/O 端口时,就会出现 I/O 争用。如果启动时间间隔 (II) 低于每次循环期间访问任一 I/O 资源的次数,则该循环无法进行流水打拍。如果在任一循环迭代期间,端口 A 必须访问 4 次,那么在单端口 RAM 中可能的最低 II 将为 4。

开发者需要评估这些 I/O 访问是否必要或是否可以避免。减少 I/O 争用的最常用方法是:

  • 创建内部高速缓存结构

    如果某些有问题的 I/O 访问涉及访问先前循环迭代中已经访问过的数据,那么可以修改代码以便在本地复制早期迭代中访问的值。保留本地数据高速缓存有助于减少对外部 I/O 访问的需求,从而改善循环的潜在 II。

    Vitis 加速示例 GitHub 仓库中提供的此示例演示了如何在本地使用移位寄存器、如何缓存先前读取的值以及如何改善滤波器的吞吐量。

  • 重新配置 I/O 和存储器

    正如前面关于改善时延的部分所述,HLS 编译器将阵列映射到存储器,默认存储器配置无法为所需的吞吐量提供足够的带宽。在此情况下,也可使用阵列分区和重塑编译指示来创建具有更高带宽的存储器结构,从而改善循环的潜在 II。