存储器停滞 - 2022.1 简体中文

Versal ACAP AI 引擎编程环境 用户指南 (UG1076)

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

映射器的用途是尽可能防止缓冲器冲突。它还具有不同的缓冲器最优化级别,通过尝试膨胀或增大缓冲器大小来防止冲突。这些缓冲器最优化级别范围为 0(默认值)到 9。调用方式为通过 Xmapper 选项 --Xmapper=BufferOptLevel<level num> 来调用。对于最高缓冲器最优化级别 (9),无法在相同 bank 内布局两个缓冲器。但随着缓冲器最优化级别的提升,映射器可能无法找到解决方案,并且将出错退出,明确这一点至关重要。因此,如果发现大量存储器停滞,那么第一个选项是循环运行 BufferOptLevel 选项,查看随着 bufferOptLevels 提高,存储器停滞数量是否会减少。

另一个可能性是,您可以显式告知映射器不得将两个缓冲器置于同一个 bank 内。如果仿真分析表明,由于缓冲器 kernel_0.in[0]kernel_1.out[0] 之间存在 bank 冲突,引发存储器停滞并导致吞吐量严重降级,那么可以向映射器提供指令,指示不得将这些缓冲器置于同一个 bank 内,如下所示。

not_equal(location<buffer>(kernel_0.in[0]), location<buffer>(kernel_1.out[0]));
如果在设计中使用 DMA FIFO,并且将其布局在与其它缓冲器相同的 bank 内,然后 Xrouter 选项 DMAFIFOsInFreeBankOnly 可以强制布线器将这些 FIFO 布局在空闲 bank 内。这样即可消除与 DMA FIFO 之间的存储器冲突。如果无法保留完整的空闲 bank 以供 DMA FIFO 使用,那么即可搭配已知的外部存储缓冲器来使用位置约束。在此情况下,重要的是已知哪些缓冲器与 DMA FIFO 冲突时可能导致停滞。约束如下所示。
location<fifo>(net2) = { dma_fifo(aie_tile, 15, 0, 0x3100, 32) };