HLS for迴圈優化 dataflow 有疑問

2021-10-03 11:41:10 字數 1753 閱讀 9682

有依賴關係,無法用合併。

對於有依賴關係的資料流,可以使得一有輸出就執行,提高交疊率,降低了 latency,提高了資料吞吐率。

。資料流優化就是在三個迴圈之間插入 channel(可以是 ping-pong ram、fifo 或 register)。 通過配置資料流間的channel 選擇pp ram 或者fifo reg

這裡 loop2 和 loop3 是可以做迴圈合併優化的,但是不能使用 dataflow 優化,因為 temp1被 loop2 和 loop3 都使用了。

個人理解:乙個 for輸出的channel 只能作為乙個的輸入,單個扇出單端輸入,而不能簡單的考慮為wire

對於上述不能 dataflow 的**,可以稍作改變使之可以使用。

對於修改後的**,主要就是增加了乙個 loop_copy,就是把 temp1 複製兩份,分別賦給 temp2 和 te***。

q:可以使用下述**達到嗎??

for

(int i =

0;i)

接下來再看看 bypassing task 模型。由示例可以看出資料流向,din 通過 loop1 生成temp1,然後 temp1 通過 loop2 生成 te***;另外 loop1 還生成了 temp2,然後 temp2 直接到 loop3。所以相對於 loop2 而言,temp2 繞開(bypass)了 loop2。這時既不能使用迴圈合併優化也不能使用 dataflow 優化。

解決方法

在loop2中再打一拍,

是如何省資源的呢

vivado hls 實現 channel(即 memory)既可以用 ping-pong ram 也可以用 fifo,這取決於 producer 和 consumer 對資料的訪問方式。

如果引數是標量,指標或者引用,vivado hls 就會用 fifo 來實現。

如果是陣列的話,就可能是 ping-pong ram 也可能是 fifo,取決於 vivado hls 是否能判斷出資料流是否按順序訪問。也可以通過 config_dataflow 手動配置使用 ping-pong ram 還是 fifo。

如果使用 fifo 就要注意深度的配置,如果深度有問題的話,協同**時就會出錯。

HLS for 迴圈優化其他方法

當不滿足合併的時候,採用allocation,內部加上pipeline 2個單獨的for 這時可以將迴圈包裝成函式,然後用不同的資料做引數進行呼叫,在上述函式化的 的基礎上,對 loop sequential 函式用 allocation指令優化,裡面的引數 instances 就是指定操作哪個函式...

python優化迴圈 Python 優化迴圈

我希望優化一些由兩個巢狀迴圈組成的 python 我對numpy並不那麼熟悉,但據我所知,它應該能夠幫助我提高這項任務的效率.下面是我編寫的測試 它反映了實際 中發生的情況.目前使用numpy範圍和迭代器比通常的python更慢.我究竟做錯了什麼?這個問題的最佳解決方案是什麼?謝謝你的幫助!impo...

for迴圈優化

某些情況下我們可以不使用迴圈而達到迴圈求解的效果。這裡我想介紹一種for迴圈的優化。例項情況 已知變數n值,求i值 int sum 0,int i 0 while sum n sum i system.out.println i i 注 int sum 0,int i 1 while sum n s...