使用邮箱 - 2022.1 简体中文

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

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

自动重启内核的主要优势在于可以如数据驱动的内核一样半自动运行,而无需与主机应用频繁交互,也无需软件控制。但是,自动重启内核还通过邮箱提供半同步,即能够以异步、非阻塞的安全方式与主机应用交换数据。对于软件控制的内核,内核遵循 C 语言的调用和返回语义。在内核执行开始时读取输入实参,并在每次内核执行结束时写入输出实参。但是,在自动重启内核中,内核在硬件中进行管理,这使得 自由运行的内核 具备许多性能优势,因此在主机代码启动内核后,它就会自动重启直至将其显式停止。主机代码也可以查询内核的状态,以确定在得到执行指示后实际完成执行的时间。主机应用和自动重启内核都使用以下通信协议:

  • 为了将实参值从主机传递到内核,邮箱会实现一组双重缓冲的 s_axilite 映射寄存器,以确保主机代码与内核之间能够以非阻塞方式进行通信、主机代码以一致方式进行输入传递并且内核以一致方式进行输出传递。
  • 每当主机代码写入到输入实参时,都会更改主机侧副本。硬件中运行的内核不会看到此更改。如果主机代码请求邮箱写入,那么在内核下次自动重启时,将持续更新内核所看到的寄存器副本。因此,主机代码可按任意顺序写入任意数量的实参,并且在主机代码请求邮箱写入且内核重新启动之前,内核不会看到这些更新。
    提示: 如果某些实参是映射到 s_axilite 寄存器文件的阵列,则必须在连续邮箱写入之间写入整个阵列,因为它是作为乒乓缓冲器来实现的。
  • 当内核写入到内核侧寄存器并请求邮箱读取时,在输出侧会发生相同的过程。下次执行内核时,将更新 s_axilite 映射输出实参的值,并且主机代码可按需读取这些值。

因此,主机应用具有以下条件:

  • 不负责在每次执行内核时提供输入数据且不负责在完成时收集输出数据,就像在软件控制内核的情况下一样。
  • 不定时参与设置和更新某些内核输入参数(例如,布线表等)并检查内核计算的状态。通常在主机与内核之间无固定通信速率的情况下完成此半同步操作。
  • 当主机应用要将一组新参数发送到硬件内核时,它在执行计算期间会忽略硬件内核的状态。当主机应用需要检查硬件内核的状态时,它在执行计算期间会忽略硬件的具体状态。它只要求为硬件持续执行参数更新和状态检查即可。