Xilinx FPGA 开发工具Vitis HLS 2022.1新特性: performance pragma-Xilinx-AMD社区-FPGA CPLD-ChipDebug

Xilinx FPGA 开发工具Vitis HLS 2022.1新特性: performance pragma

Vitis HLS 2022.1新增了一个pragma名为performance,其施加对象是指定函数或循环。如果是循环,要求循环边界是固定常数,若循环边界是变量,则需要通过pragma TRIPCOUNT指定其取值范围。
以循环为例,使用performance时要指定循环的target_titransaction interval)。这里target_tiIIinitial interval)以及Tripcount的关系可表示为:
target_ti = ii x Tripcount
换言之
target_ti = Fclk / Operations per second
它实际上反映了循环或函数的吞吐率。
performance的作用下,Vitis HLS会尝试通过自动添加PIPELINEUNROLLARRAY_PARTITIONpragma来达到target_ti所定义的值,但并不能确保一定可以满足最终的性能要求。我们来看一个案例。在这个案例中我们对三个函数中的for循环添加了PERFORMANCE pragma,如下图中的橙色方框所示。
图片[1]-Xilinx FPGA 开发工具Vitis HLS 2022.1新特性: performance pragma-Xilinx-AMD社区-FPGA CPLD-ChipDebug
图片[2]-Xilinx FPGA 开发工具Vitis HLS 2022.1新特性: performance pragma-Xilinx-AMD社区-FPGA CPLD-ChipDebug
Vitis HLS生成的报告如下,可以看到并不是所有的PERFORMANCE都达成,只有第13行的PERFORMANCE最终生效,工具会根据此约束自动推断出UNROLLPIPELINE两个pragma。同时在报告中也能看出这两条pragma的作用对象。这也不难理解,对于嵌套的for循环,一旦外层for循环被施加了PIPELINE,那么内存for循环将自动被展开(也就是被施加了UNROLL)。另外两个PERFORMANCE并没有生效,工具在报告中以警告的形式显示出来。没有达成的原因是PIPELINEII无法达成,毕竟II直接影响到target_ti
图片[3]-Xilinx FPGA 开发工具Vitis HLS 2022.1新特性: performance pragma-Xilinx-AMD社区-FPGA CPLD-ChipDebug
从这个案例中我们可以看出,PERFORMANCE其实是一种自动化的方式或者说智能地去选择施加什么样的pragma以达到目标吞吐率。
 
请登录后发表评论

    没有回复内容