本發(fā)明涉及芯片仿真與性能評估,具體涉及一種功能級軟件仿真模型及芯片硬件架構(gòu)性能評估方法。
背景技術(shù):
1、芯片仿真模型是現(xiàn)代處理器設(shè)計過程中不可缺少的一部分,主要包括軟件仿真模型、硬件仿真模型,其中軟件仿真模型一般基于systemc等高級語言的開源框架開發(fā),硬件仿真模型一般以verilog/systemverilog/vhdl語言建立,可以經(jīng)過后端處理后轉(zhuǎn)化為網(wǎng)表、gdsii版圖,是芯片前端設(shè)計的具體表示。
2、在芯片研發(fā)的過程中,軟件仿真模型發(fā)揮了重要作用。比如在芯片結(jié)構(gòu)設(shè)計時,軟件仿真模型可以作為硬件架構(gòu)性能的評估工具;在芯片功能驗證時,軟件仿真模型可以作為芯片硬件設(shè)計功能正確性的驗證工具,對芯片的指令進(jìn)行仿真;在芯片相關(guān)軟件開發(fā)的過程中,軟件仿真模型可以作為實際芯片硬件系統(tǒng)研發(fā)出來之前的軟件調(diào)試工具,從而使軟硬件設(shè)計能夠同步進(jìn)行。
3、傳統(tǒng)的軟件仿真模型一般是時鐘周期精確的軟件仿真模型,即軟件仿真模型內(nèi)部維護(hù)著時鐘,時鐘同樣分為上升沿和下降沿。時鐘周期精確的軟件仿真模型需要保證在指令的執(zhí)行過程中,每個周期的狀態(tài)與硬件仿真模型保持一致,這就需要軟件仿真模型對芯片進(jìn)行高精度的建模,包括但不限于相同的取指譯碼邏輯、相同的流水線長度、相同的控制邏輯、相同的指令執(zhí)行流程等。
4、時鐘周期精確的軟件仿真模型具有的高精度可以在芯片驗證時發(fā)揮巨大作用,能夠精確定位驗證時出現(xiàn)錯誤的位置,從而快速發(fā)現(xiàn)、解決芯片驗證過程中出現(xiàn)的問題。然而,時鐘周期精確的軟件仿真模型也存在諸多缺點,因為精度要求高,所以該軟件仿真模型的開發(fā)和驗證需要大量的時間和人力成本,在大型的芯片研發(fā)項目中,開發(fā)和驗證的時間甚至可以以年為單位;此外由于流水線的存在,軟件仿真模型的運行速度較慢,在指令規(guī)模較大時,這一缺點體現(xiàn)的更為明顯。
5、傳統(tǒng)的時鐘周期級軟件仿真模型需要建立精細(xì)的流水線模型,如圖3所示,同時流水線模型還需要完成如flush、stall、分支預(yù)測、跳轉(zhuǎn)、中斷等流水線控制邏輯。此外,為了使芯片的時序滿足設(shè)計需求,針對不同類型的指令內(nèi)核會有不同的數(shù)據(jù)讀寫時機,這又涉及到數(shù)據(jù)的相關(guān)和前推等邏輯。這些邏輯是軟件仿真模型建模過程中的難點,通常需要花費大量的時間進(jìn)行驗證,并且當(dāng)多種情況結(jié)合時,比如分支跳轉(zhuǎn)的同時發(fā)生數(shù)據(jù)前推等,驗證的壓力會更大。
6、對于應(yīng)用于智能計算、專門面向深度學(xué)習(xí)計算而設(shè)計的ai加速核(nna,neuralnetworkaccelerator)而言,該內(nèi)核主要功能是實現(xiàn)深度神經(jīng)網(wǎng)絡(luò)模型推理計算、輸入預(yù)處理和輸出后處理,以及信號、圖像和視頻幀的常見處理,同時具備一定的向量、矩陣形式的數(shù)據(jù)計算能力。ai加速核nna一條指令可能需要進(jìn)行多層次的循環(huán)計算,執(zhí)行周期可達(dá)上百萬周期,如果建立時鐘周期級軟件仿真模型,那么工作量巨大。
技術(shù)實現(xiàn)思路
1、(一)解決的技術(shù)問題
2、針對現(xiàn)有技術(shù)所存在的上述缺點,本發(fā)明提供了一種功能級軟件仿真模型及芯片硬件架構(gòu)性能評估方法,能夠有效克服現(xiàn)有技術(shù)所存在的時鐘周期級軟件仿真模型的開發(fā)和驗證周期較長,以及難以在沒有周期概念的基礎(chǔ)上對多個指令隊列的執(zhí)行周期數(shù)進(jìn)行準(zhǔn)確估計的缺陷。
3、(二)技術(shù)方案
4、為實現(xiàn)以上目的,本發(fā)明通過以下技術(shù)方案予以實現(xiàn):
5、一種功能級軟件仿真模型,所述功能級軟件仿真模型沒有周期的概念,每條指令只具有已完成和未執(zhí)行兩個狀態(tài),與之對應(yīng),流水線只有一級,取指、譯碼、運算、寫回過程都在該一級流水級內(nèi)順序執(zhí)行;
6、對于正常順序執(zhí)行的指令流,只需保證取指時的pc正常增加;對于跳轉(zhuǎn)指令或中斷,只需將取指時的pc修改為目的pc;
7、譯碼后根據(jù)opcode調(diào)用不同指令對應(yīng)的函數(shù)即可實現(xiàn)取數(shù)、運算和寫回;
8、其中,所述功能級軟件仿真模型的寄存器和內(nèi)存與時鐘周期級軟件仿真模型一樣具有左值和右值,運算時的取數(shù)取右值,寫回寫左值,只有在當(dāng)前指令行中的所有指令全部執(zhí)行完畢后才會將寄存器和內(nèi)存翻轉(zhuǎn)。
9、優(yōu)選地,所述功能級軟件仿真模型應(yīng)用于ai加速核nna上時,為了提高指令的執(zhí)行效率,內(nèi)部設(shè)計了多個指令隊列,若指令隊列中的指令不存在依賴關(guān)系,則指令隊列中的指令能夠并行執(zhí)行;若令隊列中的指令存在依賴關(guān)系,則依賴的指令需等待被依賴的指令執(zhí)行完畢后才能執(zhí)行;
10、其中,指令隊列包括matrix、vector、store、load、l2_store和l2_load,matrix、vector指令隊列主要包括計算類指令,store、load、l2_store和l2_load指令隊列主要包括訪存類指令。
11、一種芯片硬件架構(gòu)性能評估方法,包括以下步驟:
12、s1、根據(jù)計算周期、訪存周期和流水線周期,估計單條指令的執(zhí)行周期數(shù);
13、s2、根據(jù)單條指令的執(zhí)行周期數(shù),對執(zhí)行順序存在依賴關(guān)系的多個指令隊列的執(zhí)行周期數(shù)進(jìn)行估計,得到總體執(zhí)行周期數(shù);
14、s3、根據(jù)總體執(zhí)行周期數(shù),對芯片硬件架構(gòu)性能進(jìn)行評估。
15、優(yōu)選地,在ai加速核nna的功能級軟件仿真模型中,單條指令的計算周期的估計方法,包括:
16、對于matrix指令,該指令用于控制matrix模塊執(zhí)行矩陣乘法運算和二維卷積計算,計算過程包含多層循環(huán)及大量的數(shù)據(jù)訪存,最內(nèi)層循環(huán)包含acc陣列的點乘與累加,該指令的執(zhí)行時間與多層循環(huán)的循環(huán)次數(shù)和數(shù)據(jù)量有關(guān);
17、由于matrix指令最終的操作是數(shù)據(jù)的乘法與加法,其計算周期的估計能夠轉(zhuǎn)化為計算次數(shù)、單次乘法與加法所用周期數(shù)的估計;
18、其中,計算次數(shù)由指令譯碼后得到,單次乘法與加法所用周期數(shù)的由硬件前端設(shè)計人員在開發(fā)初期給出。
19、優(yōu)選地,在ai加速核nna的功能級軟件仿真模型中,單條指令的訪存周期的估計方法,包括:
20、通過對訪存數(shù)據(jù)量、數(shù)據(jù)通路位寬和總線帶寬利用率進(jìn)行估計,得到單條指令的訪存周期time:
21、time=(x_size*y_size*channel*batch_size)/bandwidth_rate;
22、其中,x_size、y_size分別表示用于進(jìn)行模型訓(xùn)練的樣本圖像的長、寬,channel表示該樣本圖像的通道數(shù),batch_size表示這批訓(xùn)練樣本圖像的數(shù)量,bandwidth_rate表示開發(fā)人員配置的總線帶寬利用率。
23、優(yōu)選地,所述總線帶寬利用率在建模階段無法確定,與soc芯片的實時任務(wù)負(fù)載密切相關(guān),當(dāng)系統(tǒng)中存在繁忙的cpu軟件任務(wù),同時又存在網(wǎng)絡(luò)通信、視頻編解碼、文件操作任務(wù)時,ai加速核nna訪存指令的帶寬利用率低;當(dāng)系統(tǒng)中僅有ai加速核nna工作時,ai加速核nna訪存指令的帶寬利用率高;
24、在ai加速核nna的功能級軟件仿真模型中,總線帶寬利用率設(shè)置為一個可配置的參數(shù),通過命令行傳遞給軟件模擬器,開發(fā)人員配置總線帶寬利用率,估計ai加速核nna在不同soc芯片任務(wù)負(fù)載下的性能。
25、優(yōu)選地,在ai加速核nna的功能級軟件仿真模型中,單條指令的流水線周期的估計方法,包括:
26、通過圍繞流水線長度進(jìn)行估計,得到單條指令的流水線周期;
27、其中,流水線周期一般為一個較小的固定值,對單條指令的執(zhí)行周期數(shù)估計影響較小。
28、優(yōu)選地,s2中根據(jù)單條指令的執(zhí)行周期數(shù),對執(zhí)行順序存在依賴關(guān)系的多個指令隊列的執(zhí)行周期數(shù)進(jìn)行估計,得到總體執(zhí)行周期數(shù),包括:
29、在進(jìn)行軟件仿真建模時,使用c++的systemc框架,該框架內(nèi)部維護(hù)了一個主時鐘,并且模塊間共用該時鐘;
30、在進(jìn)行功能級建模時,由于沒有沒有周期的概念,因此單條指令的執(zhí)行周期數(shù)當(dāng)做1時鐘周期,在該條指令執(zhí)行完畢后,通過封裝好的方法估計該條指令的執(zhí)行周期數(shù),調(diào)用systemc提供sc_core::next_trigger函數(shù),使相應(yīng)指令隊列進(jìn)入“休眠”狀態(tài),其他與該指令隊列不存在依賴關(guān)系的指令隊列正常工作,其他與該指令隊列存在依賴關(guān)系的指令隊列進(jìn)入等待的“空轉(zhuǎn)”狀態(tài),若干個等待周期結(jié)束后,再發(fā)送該指令隊列的通知信息;
31、所有指令執(zhí)行完畢后,通過主時鐘得到總體執(zhí)行周期數(shù);
32、其中,等待周期數(shù)由該條指令的執(zhí)行周期數(shù)決定。
33、優(yōu)選地,s2中根據(jù)單條指令的執(zhí)行周期數(shù),對執(zhí)行順序存在依賴關(guān)系的多個指令隊列的執(zhí)行周期數(shù)進(jìn)行估計,得到總體執(zhí)行周期數(shù),包括:
34、當(dāng)ai加速核nna內(nèi)部只設(shè)計有兩個指令隊列l(wèi)1、l2,且指令隊列l(wèi)1中即將執(zhí)行的指令i1(n)與指令隊列l(wèi)2中即將執(zhí)行的指令i2(n)不存在依賴關(guān)系時,則將指令i1(n)的執(zhí)行周期數(shù)c1(n)插入v1,所有指令執(zhí)行完畢后,max[sum(v1),sum(v2)]即為總體執(zhí)行周期數(shù);
35、當(dāng)ai加速核nna內(nèi)部只設(shè)計有兩個指令隊列l(wèi)1、l2,且指令隊列l(wèi)1中即將執(zhí)行的指令i1(n)與指令隊列l(wèi)2中即將執(zhí)行的指令i2(n)存在依賴關(guān)系時,判斷sum[c2(0),c2(1),…,c2(n)]與sum(v1)的大?。?/p>
36、若sum[c2(0),c2(1),…,c2(n)]<sum(v1),則將指令i1(n)的執(zhí)行周期數(shù)c1(n)插入v1;
37、若sum[c2(0),c2(1),…,c2(n)]≥sum(v1),則將v1清空,將sum[c2(0),c2(1),…,c2(n)]插入v1,再將指令i1(n)的執(zhí)行周期數(shù)c1(n)插入v1;
38、所有指令執(zhí)行完畢后,max[sum(v1),sum(v2)]即為總體執(zhí)行周期數(shù);
39、其中,v1、v2分別為指令隊列l(wèi)1、l2保存各條指令的執(zhí)行周期數(shù)的容器,c1(n)、c2(n)分別為指令i1(n)、i2(n)對應(yīng)的執(zhí)行周期數(shù),max[·]表示求最大值函數(shù),sum[·]表示求和函數(shù)。
40、(三)有益效果
41、與現(xiàn)有技術(shù)相比,本發(fā)明所提供的一種功能級軟件仿真模型及芯片硬件架構(gòu)性能評估方法,具有以下有益效果:
42、1)開發(fā)流程短、開發(fā)過程簡單,在指令集和設(shè)計方案確定初期就能形成一個功能較為完備的功能級軟件仿真模型,便于前期的硬件架構(gòu)性能評估和算法的開發(fā);
43、2)方便驗證與改進(jìn),無論是功能級軟件仿真模型自身的功能正確性驗證,還是與硬件前端模型之間進(jìn)行指令級驗證,都能快速得到驗證結(jié)果;
44、3)運行速度快,部署簡單,功能級軟件模擬器的運行速度相較于周期級軟件模擬器可以提高50~70倍,在ai加速核nna的功能級軟件仿真模型中,由于單個指令的執(zhí)行周期可達(dá)上百萬周期,這一運行速度優(yōu)勢將更為明顯;
45、4)給出了兩種對ai加速核nna的功能級軟件仿真模型中多個指令隊列的執(zhí)行時間估計方法,這兩種方法能夠通過硬件人員估計的指令執(zhí)行時間公式,對多個指令隊列的總體執(zhí)行時間進(jìn)行“反標(biāo)”,能夠精確估計軟件程序的執(zhí)行時間。