一、對迴圈體的展開
c語言的迴圈體都是摺疊起來的,當綜合後會順序執行,對映到rtl的話就相當於一套電路被分時復用;
進行展開的話就相當於是對電路的複製。
hls directive editor->directive->unrool->factor=n(n就是要展開成幾份)。
二、for迴圈合併
loop regin:
sub:
for(int i=0;id[i]=a[i]+b[i];
}對於這種迴圈,我們所期望的是程式在執行加法的同時,也執行減法;但是預設情況下它是順序執行的,也就是執行完加法,再執行減法,這時我們可以將其進行合併(loop_merge)這樣add和sub可以同時進行。
合併的一些規則:a)邊界不同但都為常數的,合併和邊界為較大的那個。
b)邊界乙個為常數,另乙個為變數時,此時無法進行合併。
c)邊界都為變數時,合併後為乙個範圍。
三、資料流(data_flow)
a) loop_a:
for(i=0;i loop_b:
for(i=0;i loop_c:
for(i=0;i資料流動過程:d->taska->taskb->taskc->out
b)dataflow for "for_loop"
loopa->channel->loopb->channel->loopc channel中可以使用ping-pong,fifo,register
正常流程:loopa->loopb->loopc 使用dataflow之後:loopa|loopa|loopa
loopb|loopb|loopb
loopc|loopc|loopc
b)data_flow的限制
i)loop1:
for(i=0;itemp1[i]=din[i[*scale;
}loop2:
for(i=0;jdout1[j]=temp1[j]*2;
}loop3:
for(k=0;kdout2[k]=temp1[k]*4; }
對這種loop1中的結果在loop2和loop3中都被使用的情況(single-producer-consumer model)我們可以在loop1下面加個loop_copy將temp1複製乙份及:
loop1:
for(i=0;itemp1[i]=din[i[*scale;
}loop_copy:
for(m=0;mtemp2[m]=temp1[m];
te***[m]=temp1[m]; }
loop2:
for(i=0;jdout1[j]=temp2[j]*2;
}loop3:
for(k=0;kdout2[k]=te***[k]*4; }
ii)
loop1:
for(i=0;itemp1[i]=din[i[*scale;
temp2[i]=din[i]>>scale;
}loop2:
for(i=0;jte***[j]=temp1[j]*2;
}loop3:
for(k=0;kdout[k]=temp2[k]+te***[k]; }
對於這種,loop1產生2個結果,其中乙個經loop2到loop3,另乙個直接被loop3引用,可以在loop2中新增乙個temp4對temp2進行複製。
loop1:
for(i=0;itemp1[i]=din[i[*scale;
temp2[i]=din[i]>>scale;
loop2:
for(i=0;jte***[j]=temp1[j]*2;
temp4[j]=temp2[j];
loop3:
for(k=0;kdout[k]=temp4[k]+te***[k];
四、巢狀式的for迴圈
對於2層的巢狀,若對外部的for迴圈做流水,則其內部所有的for迴圈均會被開啟;一般對最內層的做流水。
五、其它的補充
a)rewind可以消除2個週期之間的間隔;
b)當迴圈邊界為變數的時候無法確定其latency,我們可以進行設定或者把值設定為任意精度的。
HLS巢狀for迴圈優化 以矩陣乘法為例 有問題
三種巢狀迴圈 根據邊界和迴圈體位置 對於 imperfect loop nest 可以通過 優化手段將其轉變為 semi perfect loop nest 或者 perfect loop nest。在外部迴圈做 pipeline 可以獲得最理想的 latency,但同時資源消耗也最多,因為做 pi...
HLS科普1 HLS和M3U8簡介
1.m3u8檔案概念2.m3u8檔案舉例 例如使用雲圖tv點播直播節目時,傳送請求 返回m3u8檔案,檔案內容如下 extm3u ext x media sequence 140651513 ext x targetduration 10 extinf 8,extinf 9,extinf 11,ex...
python優化迴圈 Python 優化迴圈
我希望優化一些由兩個巢狀迴圈組成的 python 我對numpy並不那麼熟悉,但據我所知,它應該能夠幫助我提高這項任務的效率.下面是我編寫的測試 它反映了實際 中發生的情況.目前使用numpy範圍和迭代器比通常的python更慢.我究竟做錯了什麼?這個問題的最佳解決方案是什麼?謝謝你的幫助!impo...