Vitis HLS 2022.1新增了一個pragma名為performance,其施加對象是指定函數(shù)或循環(huán)。如果是循環(huán),要求循環(huán)邊界是固定常數(shù),若循環(huán)邊界是變量,則需要通過pragma TRIPCOUNT指定其取值范圍。
以循環(huán)為例,使用performance時要指定循環(huán)的target_ti(transaction interval)。這里target_ti和II(initial interval)以及Tripcount的關系可表示為:
target_ti = ii x Tripcount
換言之
target_ti = Fclk / Operations per second
它實際上反映了循環(huán)或函數(shù)的吞吐率。
在performance的作用下,Vitis HLS會嘗試通過自動添加PIPELINE、UNROLL或ARRAY_PARTITION等pragma來達到target_ti所定義的值,但并不能確保一定可以滿足最終的性能要求。我們來看一個案例。在這個案例中我們對三個函數(shù)中的for循環(huán)添加了PERFORMANCE pragma,如下圖中的橙色方框所示。
Vitis HLS生成的報告如下,可以看到并不是所有的PERFORMANCE都達成,只有第13行的PERFORMANCE最終生效,工具會根據(jù)此約束自動推斷出UNROLL和PIPELINE兩個pragma。同時在報告中也能看出這兩條pragma的作用對象。這也不難理解,對于嵌套的for循環(huán),一旦外層for循環(huán)被施加了PIPELINE,那么內(nèi)存for循環(huán)將自動被展開(也就是被施加了UNROLL)。另外兩個PERFORMANCE并沒有生效,工具在報告中以警告的形式顯示出來。沒有達成的原因是PIPELINE的II無法達成,畢竟II直接影響到target_ti。
從這個案例中我們可以看出,PERFORMANCE其實是一種自動化的方式或者說智能地去選擇施加什么樣的pragma以達到目標吞吐率。
更多信息可以來這里獲取==>>電子技術應用-AET<<