本文闡明了InTime和Xilinx軟件是如何通過調(diào)整編譯參數(shù)以及運(yùn)行并行編譯來優(yōu)化FPGA時(shí)序性能的。InTime通過機(jī)器學(xué)習(xí)來決定一個(gè)FPGA設(shè)計(jì)的綜合和布局布線的最佳配置組合。通過和計(jì)算服務(wù)器的連接,InTime迅速地優(yōu)化時(shí)序,同時(shí)也解決了用戶流程自動(dòng)化所面臨的限制。
?
介紹
傳統(tǒng)時(shí)序優(yōu)化的方法和訓(xùn)練方向主要集中在檢查和改善RTL代碼或是時(shí)序約束。盡管這種方法行之有效,但在實(shí)戰(zhàn)中因?yàn)榧夹g(shù)和商業(yè)方面的限制,很多更改都不可能真正的執(zhí)行下去。比如某些對(duì)設(shè)計(jì)比較大的修改,可能會(huì)讓產(chǎn)品的發(fā)布日期承擔(dān)滯后的風(fēng)險(xiǎn)。當(dāng)下盛行可重復(fù)使用的設(shè)計(jì)模塊,設(shè)計(jì)中經(jīng)常會(huì)出現(xiàn)不能輕易更改的第三方IP核。最糟糕情況的解決方案(“worst-case scenario” solution)也不過就是把目標(biāo)器件升級(jí)到一個(gè)更大的或是有更快速度等級(jí)的版本,盡管它們都將帶來一筆不小的花費(fèi)。
萬幸的是,當(dāng)今FPGA工具(比如Xilinx的Vivado)都有很多開關(guān)和設(shè)置選項(xiàng)來幫助時(shí)序收斂。InTime的方法,就是通過調(diào)整FPGA工具的編譯過程來解決用戶的時(shí)序問題和其他性能問題。Xilinx 的ISE和Vivado軟件包含了很多綜合和布局布線的參數(shù),每一項(xiàng)都至少有兩個(gè)值可以直接影響最終結(jié)果。InTime幫助設(shè)計(jì)師深入挖掘這些工具的性能,以達(dá)到要求的結(jié)果。
上圖是一個(gè)客戶案例,X軸代表采用不同綜合和布局布線的編譯批次,Y軸顯示的是失敗最差余量(FailingWorst Slack, 0代表時(shí)序通過)的絕對(duì)值,單位為納秒。在這里您可以清楚地看到InTime把失敗最差余量從-0.45ns(-450ps)減少到了0ns,僅通過調(diào)整編譯參數(shù)就達(dá)到了時(shí)序目標(biāo),而且對(duì)設(shè)計(jì)沒有任何變動(dòng)。
很多情況下,用戶經(jīng)常使用默認(rèn)的綜合和布局布線的參數(shù)。因?yàn)椴淮_定會(huì)有什么后果,很少有人會(huì)嘗試改變這些參數(shù)。再加上很多參數(shù)是相互聯(lián)動(dòng)的,多個(gè)參數(shù)如果被同時(shí)設(shè)置錯(cuò)誤會(huì)讓時(shí)序變得更加糟糕;所以調(diào)試參數(shù)這項(xiàng)任務(wù),就變得更加舉步維艱。
了解InTime的流程
InTime 使用機(jī)器學(xué)習(xí)來探索FPGA編譯過程中不同的參數(shù)設(shè)置。下面要說明的技術(shù)重點(diǎn)關(guān)注在性能達(dá)到峰值之前,生成足夠的數(shù)據(jù)點(diǎn)。
這里有一個(gè)非常關(guān)鍵的概念,叫做“配方”。InTime的優(yōu)化技術(shù)被歸結(jié)成不同的配方,配方又被分類成“Learning”配方和“Last Mile”配方。
分類的原因是因?yàn)榫幾g是一種高強(qiáng)度的計(jì)算過程。獲得新數(shù)據(jù)的運(yùn)行時(shí)間成本很高(一般人耐心也很有限),所以每個(gè)配方不能無限地運(yùn)行,必須要根據(jù)結(jié)果改善的情況來限制Learning的運(yùn)行數(shù)。一旦結(jié)果達(dá)到穩(wěn)定(由花費(fèi)時(shí)間和結(jié)果改善所決定的投資回報(bào)率逐漸減少),用戶就會(huì)切換到Last Mile配方。Last Mile 配方采用一種高度隨機(jī)的技巧,設(shè)計(jì)離目標(biāo)性能越近,這個(gè)配方就工作地越好。例如,如果把目前取得的最好結(jié)果當(dāng)作一個(gè)參考,Last Mile配方會(huì)隨機(jī)對(duì)不同的邏輯單元進(jìn)行布局。
優(yōu)化設(shè)計(jì)的步驟
步驟0:設(shè)計(jì)建模
為了減少集中在一個(gè)結(jié)果所需要的時(shí)間,InTime自帶一個(gè)包含元數(shù)據(jù)的數(shù)據(jù)庫。我們?cè)陂L(zhǎng)時(shí)間內(nèi)在不同設(shè)計(jì)上測(cè)試,逐步歸納出在各種設(shè)計(jì)上用什么參數(shù)合適,然后把這些經(jīng)驗(yàn)總結(jié)成了這個(gè)數(shù)據(jù)庫。這樣做的目標(biāo)就是縮小需要調(diào)節(jié)參數(shù)的范圍,只選取重要的,對(duì)某個(gè)設(shè)計(jì)最有效的參數(shù)進(jìn)行調(diào)節(jié)。
步驟一:生成數(shù)據(jù)
在這一步,InTime在每一輪的執(zhí)行中,生成編譯參數(shù)(也被稱作“策略”)。設(shè)計(jì)師應(yīng)該對(duì)每一輪進(jìn)行配置,運(yùn)行10到30個(gè)編譯。有些配方會(huì)比其他的配方更合適,這取決于所得數(shù)據(jù)點(diǎn)(編譯結(jié)果)的數(shù)量。
學(xué)習(xí)和分析只出現(xiàn)在每一輪的結(jié)尾或是下一輪的開始。作為一種指導(dǎo),InTime需要在3到5輪內(nèi)分析100個(gè)數(shù)據(jù)點(diǎn)來達(dá)到一個(gè)本地最優(yōu)數(shù)據(jù)。
如果結(jié)果表示沒有明顯的改善,我們就需要運(yùn)行更多的編譯,因?yàn)檫@個(gè)配方還沒有得到本地最優(yōu)數(shù)據(jù)。然而,如果結(jié)果顯著改善(和原始結(jié)果比較)并且改善已經(jīng)不再繼續(xù),接下來就要更換配方了(參見Deep Dive配方)。
步驟二:使用“Deep Dive”配方
一旦我們獲得了幾個(gè)優(yōu)良的結(jié)果,或者結(jié)果的改善已經(jīng)開始減緩,就要準(zhǔn)備使用“Deep Dive”配方了。這個(gè)配方檢查當(dāng)前的結(jié)果,然后對(duì)本地最優(yōu)數(shù)據(jù)與其周圍的數(shù)據(jù)點(diǎn)做一個(gè)深入的分析;與之前的配方相比,在更短的時(shí)間內(nèi)將結(jié)果改善了10%。當(dāng)然,沒有之前配方的結(jié)果,Deep Dive也不會(huì)這么有效。
步驟三:Auto Placement配方或Extra Optimization 配方
最終,Last Mile配方會(huì)使用Vivado的設(shè)置,這些設(shè)置偽隨機(jī),并且對(duì)代碼變化高度敏感。根據(jù)設(shè)計(jì)的具體情況,Last Mile配方可以生成僅僅9個(gè)編譯或者多達(dá)100個(gè)編譯。比如,在Vivado,隨機(jī)的Placement Exploration配方可以輕易地生成100個(gè)編譯,然而Extra Optimization則被限制在9個(gè)編譯。
云端運(yùn)行InTime和Vivado
您也可以在亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)上面運(yùn)行InTime來減少總共的運(yùn)行時(shí)間,達(dá)到時(shí)序目標(biāo)。通過把您的并行運(yùn)行數(shù)加倍,您可以把您優(yōu)化所需的時(shí)間減半。
InTime和Xilinx結(jié)為合作伙伴,為亞馬遜機(jī)器映像(AMI)提供所有的預(yù)裝軟件許可。這可以讓您更快的開始一個(gè)實(shí)例,不用任何安裝就可以在云端運(yùn)行您的FPGA項(xiàng)目。
結(jié)論
選擇正確的綜合和布局布線的參數(shù)一種十分強(qiáng)大的技能,它可以幫您達(dá)到設(shè)計(jì)性能目標(biāo),從FPGA工具中(如Vivado)獲得的最大的受益。然而,把每一組參數(shù)都嘗試一遍是完全不可能的。如下圖所示,快速地聚焦到正確的參數(shù)組合,可以產(chǎn)生極好的結(jié)果(總負(fù)余量從-3000ns到-3ns)。使用云端服務(wù)也可以減少達(dá)到理想結(jié)果的總耗時(shí)。
評(píng)論
查看更多