對(duì)Kernel進(jìn)行性能分析需要對(duì)其進(jìn)行仿真,同時(shí)還要用到Vitis Analyzer。為便于說(shuō)明,我們以一個(gè)簡(jiǎn)單的Vitis工程為例。這個(gè)工程中有兩個(gè)kernel,相應(yīng)的代碼如下圖所示。 kernel 1有一個(gè)輸入兩個(gè)輸出。輸入使用window訪問(wèn)方式。讀取數(shù)據(jù)后將數(shù)據(jù)分別寫入到stream和window(本地Memory)。事實(shí)上,寫入到stream和window的數(shù)據(jù)是相同的。代碼第15行通過(guò)noinline使得工具在編譯過(guò)程中保持當(dāng)前kernel層次。
kernel 2有兩個(gè)輸入和一個(gè)輸出。兩個(gè)輸入均來(lái)自于kernel 1的兩個(gè)輸出。由于kernel 1輸出采用了stream和window,因此,這里的輸入也對(duì)應(yīng)使用stream和window訪問(wèn)方式。然后將讀取的數(shù)據(jù)相加,再把結(jié)果寫入到window。
kernel之間的連接關(guān)系體現(xiàn)在graph中,如下圖所示。代碼第22行和第24行分別聲明了輸入和輸出端口,plio表明端口在PL側(cè)。換言之,若為輸入,則輸入數(shù)據(jù)由PL側(cè)提供,若為輸出,則輸出數(shù)據(jù)會(huì)到達(dá)PL側(cè)。代碼第27行使用了數(shù)組方式聲明了兩個(gè)kernel。代碼第36行和第37行分別創(chuàng)建了graph輸入/輸出端口,指定其位寬為32位(plio_32_bits)。代碼第42行至45行將graph輸入/輸出端口以及兩個(gè)kernel連接起來(lái)。代碼第46行表明在net1(stream)上使用FIFO,其深度為32。實(shí)際上這個(gè)FIFO就在AXI Interconnect上。
我們可以借助Trace View觀察每個(gè)kernel的執(zhí)行狀況,這就需要在仿真時(shí)生成vcd文件。生成vcd文件需要兩部設(shè)置,如下圖所示。
最終會(huì)生成vcd文件,其文件目錄如下圖所示。
點(diǎn)擊default.aierun_summary,將會(huì)打開(kāi)Vitis Analyzer,在這個(gè)視圖下選擇Trace即可看到kernel的執(zhí)行情況。
Trace view如下圖所示。從圖中可以看到一些具體的事件。
標(biāo)記1:
Tile 24_0 DMA s2mm通道0啟動(dòng)。獲取buf0(ping)的lock信號(hào),將數(shù)據(jù)由PL傳送給buf0。
標(biāo)記2:
Tile 24_0 DMA s2mm通過(guò)1啟動(dòng)。獲取buf0d(pong)的lock信號(hào),將數(shù)據(jù)由PL傳送給buf0d。
標(biāo)記3a:
kernel aie_dest1獲取輸入buffer buf0的lock信號(hào)(在圖中顯示為read lock allocated)。
標(biāo)記3b:
kernel aie_dest1獲取輸出buffer buf1的lock信號(hào)。
標(biāo)記4a:
aie_dest1獲取了buf0和buf1的lock信號(hào),開(kāi)始啟動(dòng)工作。
標(biāo)記4b:
一旦Tile 24_0 DMA s2mm通道1完成,則切換到通道0。這時(shí)aie_dest1仍然在讀buf0,只有當(dāng)其釋放了buf0的lock信號(hào),Tile 24_0 DMA s2mm通道0才可以啟動(dòng)數(shù)據(jù)傳輸。
標(biāo)記5:
一旦aie_dest1執(zhí)行結(jié)束,它就會(huì)釋放buf1,這樣kernel aie_dest2就會(huì)捕獲buf1的lock信號(hào)。
標(biāo)記6a:
aie_dest2獲取buf1的lock信號(hào)之后就開(kāi)始啟動(dòng)工作。
標(biāo)記6b:
aie_dest1獲取buf0d的lock信號(hào)。
標(biāo)記6c:
aie_dest1獲取buf1d的lock信號(hào)。
標(biāo)記7:
aie_dest1在獲取buf0d和buf1d的lock信號(hào)之后開(kāi)始啟動(dòng)工作。
標(biāo)記8:
aie_dest1完成執(zhí)行,釋放buf1d。aie_dest2獲取buf1d的lock信號(hào)。
標(biāo)記9:
aie_dest2獲取buf1d的lock信號(hào)之后,開(kāi)始啟動(dòng)工作。
注:stream接口不需要lock信號(hào)。每個(gè)lock的獲取和釋放都需要一些時(shí)鐘周期的開(kāi)銷。
責(zé)任編輯:gt
-
Window
+關(guān)注
關(guān)注
0文章
82瀏覽量
37305 -
代碼
+關(guān)注
關(guān)注
30文章
4827瀏覽量
69054
原文標(biāo)題:AIE(10)—使用Trace View
文章出處:【微信號(hào):Lauren_FPGA,微信公眾號(hào):FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Inline Hook Syscall詳解
c6678使用Hardware trace analyzer的問(wèn)題
(原創(chuàng))Spectrum View功能:示波器上的頻域分析利器
IAR EWARM的SWO Trace調(diào)試功能
使用IAR ETM Trace調(diào)試功能的要求
怎樣通過(guò)trace生成系統(tǒng)cpu的loading圖
對(duì)電動(dòng)機(jī)幾種降壓?jiǎn)?dòng)進(jìn)行建模及仿真分析
SYSTEM VIEW教材
trace32仿真器使用教程
如何使用Systemview實(shí)現(xiàn)對(duì)QPSK系統(tǒng)進(jìn)行仿真與分析
![如何使用Systemview實(shí)現(xiàn)對(duì)QPSK系統(tǒng)<b class='flag-5'>進(jìn)行</b><b class='flag-5'>仿真</b>與<b class='flag-5'>分析</b>](https://file.elecfans.com/web1/M00/83/0D/pIYBAFxAHgSAO59GAABPNsDgcY8884.png)
如何使用System view數(shù)字調(diào)制進(jìn)行眼圖分析
![如何使用System <b class='flag-5'>view</b>數(shù)字調(diào)制<b class='flag-5'>進(jìn)行</b>眼圖<b class='flag-5'>分析</b>](https://file.elecfans.com/web1/M00/83/75/pIYBAFxIHLyACeRBAAO7kvSEPUE120.png)
關(guān)于Trace32forRT-Thread的簡(jiǎn)述與使用
![關(guān)于<b class='flag-5'>Trace</b>32forRT-Thread的簡(jiǎn)述與使用](https://file.elecfans.com/web1/M00/EC/DA/o4YBAGCI0UGAUo94AAAuDzI-YX4958.png)
Linux ftrace工具抓 i2c trace
![Linux ftrace工具抓 i2c <b class='flag-5'>trace</b>](https://file1.elecfans.com/web2/M00/8D/45/wKgaomS4p8eAGC0jAAA1XCqXhu0317.jpg)
如何對(duì)基于μTrace和Trace32的LPC86x進(jìn)行邊界掃描
![如何對(duì)基于μ<b class='flag-5'>Trace</b>和<b class='flag-5'>Trace</b>32的LPC86x<b class='flag-5'>進(jìn)行</b>邊界掃描](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論