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,,那么內存for循環(huán)將自動被展開(也就是被施加了UNROLL)。另外兩個PERFORMANCE并沒有生效,,工具在報告中以警告的形式顯示出來,。沒有達成的原因是PIPELINE的II無法達成,畢竟II直接影響到target_ti,。
從這個案例中我們可以看出,,PERFORMANCE其實是一種自動化的方式或者說智能地去選擇施加什么樣的pragma以達到目標吞吐率。
更多信息可以來這里獲取==>>電子技術應用-AET<<