Vitis HLS 2022.1新特性: performance pragma

 Vitis HLS 2022.1新增了一个pragma名为performance,其施加对象是指定函数或循环。如果是循环,要求循环边界是固定常数,若循环边界是变量,则需要通过pragma TRIPCOUNT指定其取值范围。

以循环为例,使用performance时要指定循环的target_ti(transaction interval)。这里target_ti和II(initial interval)以及Tripcount的关系可表示为:

target_ti = ii x Tripcount

换言之

target_ti = Fclk / Operations per second

它实际上反映了循环或函数的吞吐率。

在performance的作用下,Vitis HLS会尝试通过自动添加PIPELINE、UNROLL或ARRAY_PARTITION等pragma来达到target_ti所定义的值,但并不能确保一定可以满足最终的性能要求。我们来看一个案例。在这个案例中我们对三个函数中的for循环添加了PERFORMANCE pragma,如下图中的橙色方框所示。


Vitis HLS生成的报告如下,可以看到并不是所有的PERFORMANCE都达成,只有第13行的PERFORMANCE最终生效,工具会根据此约束自动推断出UNROLL和PIPELINE两个pragma。同时在报告中也能看出这两条pragma的作用对象。这也不难理解,对于嵌套的for循环,一旦外层for循环被施加了PIPELINE,那么内存for循环将自动被展开(也就是被施加了UNROLL)。另外两个PERFORMANCE并没有生效,工具在报告中以警告的形式显示出来。没有达成的原因是PIPELINE的II无法达成,毕竟II直接影响到target_ti。

从这个案例中我们可以看出,PERFORMANCE其实是一种自动化的方式或者说智能地去选择施加什么样的pragma以达到目标吞吐率。

本文转载自:http://blog.chinaaet.com/zhoubin333/p/5100068961

最新文章

最新文章