内核可能存在于器件中,但仅在应用请求时,内核才会运行。为了尽可能提高性能,请将应用设计为使内核保持繁忙。
从概念上讲,这是通过在当前请求完成之前发出后续请求来实现的。这将导致流水打拍和重叠执行,从而以最优方式使用内核,如下图所示。
图 1. 加速器的流水打拍执行
在此示例中,原始应用重复调用 func1、func2 和 func3。对于这 3 个函数,已创建了对应的内核(K1、K2 和 K3)。简单的实现会按顺序运行这 3 个内核,就像原始软件应用一样。但这意味着每个内核只有三分之一的时间处于活动状态。更好的方法是构建软件应用程序,使其能够向内核发出流水打拍请求。这样在 K1 开始处理新数据集的同时,K2 即可开始处理 K1 的第一项输出。通过这种方法,即可以最大利用率持续运行这 3 个内核。
如需了解有关软件流水打拍的更多信息,请参阅 Vitis 应用加速开发流程教程。