本發(fā)明屬于計(jì)算機(jī)開(kāi)發(fā)技術(shù)領(lǐng)域,尤其涉及一種Elf3D跨平臺(tái)引擎系統(tǒng)。
背景技術(shù):
Elf3D跨平臺(tái)引擎針對(duì)現(xiàn)有3d游戲引擎性能與延伸及畫(huà)面效果不太完美的情況,自主研發(fā)的3D跨平臺(tái)游戲引擎。
Elf3D跨平臺(tái)引擎系統(tǒng)的引擎效率受布局和布線影響,它直接耗費(fèi)了Elf3D跨平臺(tái)引擎系統(tǒng)設(shè)計(jì)流程中絕大部分CPU時(shí)間,并且影響到整個(gè)電路的性能。
在現(xiàn)有的布局方法中成本函數(shù)的計(jì)算包括線長(zhǎng)成本和時(shí)序成本:線長(zhǎng)成本是整個(gè)電路中每個(gè)信號(hào)布線線長(zhǎng)估計(jì)值的和,最小化線長(zhǎng)成本關(guān)系到最小化布線資源的消耗并平衡布線密度以保證布線成功;時(shí)序成本是布局時(shí)所有布線路徑的延時(shí)之和,最小化時(shí)序成本關(guān)系到最小化關(guān)鍵路徑延時(shí)。同時(shí)成本函數(shù)Cost()還要通過(guò)權(quán)重參數(shù)正確地平衡最小化線長(zhǎng)和最小化關(guān)鍵路徑延時(shí)之間關(guān)系。Metropolis準(zhǔn)則中的溫度參數(shù)T,用于控制接受導(dǎo)致布局變差移動(dòng)的可能性。一開(kāi)始,T是非常高的,幾乎所有的移動(dòng)都被接受;隨著布局優(yōu)化,它的值逐漸減少,這樣接受使布局變差的移動(dòng)的概率是非常低的。接受一個(gè)使布局變差的移動(dòng)帶來(lái)的爬坡能力,使得模擬退火避免收斂到成本函數(shù)上的局部最優(yōu)解。溫度下降的速度、在每個(gè)溫度下試圖移動(dòng)的次數(shù)和產(chǎn)生可能移動(dòng)的方法、終止退火的退出標(biāo)準(zhǔn)是由退火表所決定。這種方法由于在每個(gè)溫度T下必須做足夠多的移動(dòng)才能達(dá)到熱力學(xué)平衡,同時(shí)為了取得接近最優(yōu)的布局結(jié)果,溫度T下降非常緩慢,所以會(huì)花費(fèi)非常多的CPU時(shí)間。
現(xiàn)有的解決布線問(wèn)題的方法為,一種基于擁擠協(xié)商PathFinder算法的迭代式布線方法,該方法使用了一種嘗試平衡競(jìng)爭(zhēng)目標(biāo):消除擁擠與最小化關(guān)鍵路徑延時(shí)的迭代方法,該迭代方法采用多次布線迭代來(lái)完成,允許信號(hào)初步占用布線資源,但隨后必須與其他信號(hào)協(xié)商并決定哪個(gè)信號(hào)最需要該布線資源。在每次迭代中都要進(jìn)行一次時(shí)序分析以維持對(duì)那些可能十分關(guān)鍵的信號(hào)持續(xù)施加影響。在協(xié)商中通過(guò)讓越是關(guān)鍵的信號(hào)越具有更優(yōu)先的次序,最終將關(guān)鍵路徑延時(shí)最小化。在每次迭代過(guò)程中,每條信號(hào)被拆線并按照預(yù)定的順序布線。在布線資源圖中的每一布線資源節(jié)點(diǎn)i的成本,表示節(jié)點(diǎn)i被信號(hào)占用次數(shù),用以反映每個(gè)信號(hào)布線后以及一次完整布線迭代之后的擁擠狀況。成本的更新迫使信號(hào)布線從器件的擁擠區(qū)域遷移至較離散分布的區(qū)域,為當(dāng)前正處于擁擠區(qū)域的其他需求更大的信號(hào)騰出空間。由于該方法在每次布線迭代中,既要考慮最小化成本,即關(guān)鍵路徑延時(shí),又要排除布線資源重用導(dǎo)致的擁擠,使迭代過(guò)程必須持續(xù)進(jìn)行直到?jīng)]有布線資源重用為止,因而這會(huì)耗費(fèi)大量的CPU時(shí)間。
綜上所述,現(xiàn)有技術(shù)存在的問(wèn)題是:現(xiàn)有3d游戲引擎性能與延伸及畫(huà)面效果不太完美,Elf3D跨平臺(tái)引擎系統(tǒng)的布局和布線直接耗費(fèi)了設(shè)計(jì)流程中絕大部分CPU時(shí)間,并且影響到整個(gè)電路的性能。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)存在的問(wèn)題,本發(fā)明提供一種Elf3D跨平臺(tái)引擎系統(tǒng)。
本發(fā)明是這樣實(shí)現(xiàn)的,一種Elf3D跨平臺(tái)引擎系統(tǒng),所述Elf3D跨平臺(tái)引擎系統(tǒng)包括:
跨平臺(tái)多光源延遲渲染系統(tǒng),用于通過(guò)先渲染GBuffer,在混合GBuffer進(jìn)行光照計(jì)算,輸出最終渲染結(jié)果;使場(chǎng)景中動(dòng)態(tài)光的數(shù)量不再受限制,將計(jì)算復(fù)雜度從O(n2)降為O(n);
多線程渲染框架,最大化的利用硬件并行化計(jì)算的能力,用于解放CPU的計(jì)算能力;并用于進(jìn)行CPU和GPU耦合度,提升整體引擎效率;
多種主流VR平臺(tái),通過(guò)使用工具鏈,將原有項(xiàng)目的內(nèi)容,移植輸出到VR平臺(tái)。
進(jìn)一步,所述的工具鏈,包括:
資源瀏覽器,用于可視化管理項(xiàng)目資源,支持拖拽操作,支持從小項(xiàng)目到AAA大型項(xiàng)目管理;
真實(shí)游戲畫(huà)面編輯器,用于實(shí)時(shí)編輯和查看實(shí)際游戲畫(huà)面;
平臺(tái)模擬器,用于在Windows上直接查看iOS,Android上實(shí)際游戲畫(huà)面;
材質(zhì)編輯器,用于使用美術(shù)熟悉的3ds max材質(zhì)編輯器,提供豐富的可調(diào)屬性;
模型編輯器,用于檢查模型分組,指定材質(zhì),觀察相關(guān)物理屬性,支持自動(dòng)LOD和UV生成;
粒子編輯器,用于提供豐富的發(fā)射器,修改器組件,可調(diào)參數(shù)列表,性能評(píng)估;
FBX格式導(dǎo)入器,用于支持所有主流3D美術(shù)制作軟件,支持靜態(tài)模型,組合模型,剛體動(dòng)畫(huà),蒙皮動(dòng)畫(huà),內(nèi)建材質(zhì)、帖圖導(dǎo)入;
地形編輯器,用于支持最大8層單獨(dú)材質(zhì),每層材質(zhì)具有單獨(dú)的材質(zhì)參數(shù);
動(dòng)畫(huà)曲線編輯器,用于美術(shù)在場(chǎng)景中對(duì)任意材質(zhì)動(dòng)畫(huà)、任意燈光參數(shù)進(jìn)行動(dòng)畫(huà)編輯,設(shè)置播放速度、循環(huán)屬性的操作;
聲音編輯器,用于實(shí)時(shí)編輯、測(cè)試場(chǎng)景音效環(huán)境;
光照烘培器,用于支持高細(xì)節(jié)全局光照和陰影,與編輯器深度整合,實(shí)時(shí)查看烘焙結(jié)果,一鍵烘焙,無(wú)需美術(shù)重復(fù)調(diào)節(jié)關(guān)卡;
帖圖編輯器,用于貼圖查看,格式壓縮設(shè)置,跨平臺(tái)資源壓縮設(shè)置;
資源發(fā)布器,用于支持跨平臺(tái)資源優(yōu)化,自動(dòng)記錄用戶(hù)設(shè)置,轉(zhuǎn)換資源到適應(yīng)目標(biāo)平臺(tái)的最優(yōu)格式,支持帖圖自動(dòng)縮放、格式轉(zhuǎn)換、shader和材質(zhì)自適應(yīng),一鍵部署。
進(jìn)一步,Elf3D跨平臺(tái)引擎系統(tǒng)布局布線的方法具體步驟為:
第一步,將電路中每一個(gè)可配置邏輯單元CLB、I/O單元、異構(gòu)模塊等單元隨機(jī)地放置到Elf3D跨平臺(tái)引擎系統(tǒng)硬件內(nèi)部物理位置,得到一個(gè)初始布局;
第二步,計(jì)算初始溫度T0;
第三步,布局迭代;
第四步,局部?jī)?yōu)化布局;
第五步,如果累計(jì)第三步中對(duì)步驟一至步驟三過(guò)程迭代總次數(shù)超過(guò)TAS,則輸出當(dāng)前最優(yōu)布局并轉(zhuǎn)第六步進(jìn)行布線;否則令當(dāng)前溫度T為前一次執(zhí)行第三步過(guò)程中新布局的接受率第一次低于44%時(shí)的溫度,轉(zhuǎn)第三步開(kāi)始重復(fù)退火;
第六步,布線初始化;
第七步,為每個(gè)線程劃分任務(wù)集,假設(shè)處理器個(gè)數(shù)為P,則創(chuàng)建P個(gè)線程,并且為每個(gè)線程Thd[i]創(chuàng)建任務(wù)集SigSet[i],i∈{1,2,…,P};將布線資源圖RG劃分為P個(gè)大小相等的不交叉區(qū)域,對(duì)于每個(gè)信號(hào),如果落入?yún)^(qū)域i的目標(biāo)節(jié)點(diǎn)sink個(gè)數(shù)越多,就將分給區(qū)域i對(duì)應(yīng)的任務(wù)集SigSet[i],i∈{1,2,…,P},并保證每個(gè)任務(wù)集內(nèi)的sink總數(shù)一樣多;
第八步,對(duì)每個(gè)線程任務(wù)集SigSet[i]中所有信號(hào)按照sink個(gè)數(shù)從多到少排列;
第九步,啟動(dòng)P個(gè)線程,P個(gè)線程并行執(zhí)行第十步;
第十步,并行布線迭代;
第十一步,同步P個(gè)線程,即等待每個(gè)線程都執(zhí)行完第十步;由主線程檢查整個(gè)電路的布線是否合法,如果布線合法,即沒(méi)有重復(fù)被占用的布線資源節(jié)點(diǎn),則轉(zhuǎn)第十四步;否則,對(duì)所有重復(fù)被占用的布線資源節(jié)點(diǎn)的歷史占用度加1,并且加大擁擠懲罰度,進(jìn)行時(shí)序分析,轉(zhuǎn)第十二步;第十二步,主線程重新布線擁擠的信號(hào);
第十三步,檢查整個(gè)電路的布線是否合法,如果布線合法,則轉(zhuǎn)第十四步;否則如果布線迭代次數(shù)不超過(guò)指定值Max,則進(jìn)行時(shí)序分析并轉(zhuǎn)第十步執(zhí)行下一次布線迭代,否則轉(zhuǎn)第十四步;
第十四步,將其余P-1個(gè)線程合并到主線程,輸出布線結(jié)果并退出布線。
進(jìn)一步,在第三步中,布局迭代具體步驟為:
步驟一,在當(dāng)前布局上,通過(guò)隨機(jī)地選擇一對(duì)可配置邏輯單元CLB、I/O單元、異構(gòu)模塊等單元交換位置,或者選擇一個(gè)可配置邏輯單元CLB、I/O單元、異構(gòu)模塊等單元與一個(gè)空白位置進(jìn)行交換,得到一個(gè)新的布局,得到一個(gè)新布局,并計(jì)算新布局的花費(fèi)Cost:
其中Cost'表示當(dāng)前布局花費(fèi),初始布局時(shí)Cost'=1.0,tc、tc'、bc、bc'均為實(shí)數(shù),tc和bc分別表示新布局的時(shí)序量和擁擠量,tc'和bc'分別表示當(dāng)前布局的時(shí)序量和擁擠量,λ表示時(shí)序量的權(quán)重,1-λ表示擁擠量的權(quán)重,λ=0.5;
步驟二,根據(jù)當(dāng)前溫度T,用新布局的花費(fèi)Cost與當(dāng)前布局的花費(fèi)Cost'之差ΔC判斷是否接受新布局:若ΔC<0,則接受新布局為當(dāng)前布局,否則,設(shè)u為區(qū)間[0,1]內(nèi)的一個(gè)隨機(jī)數(shù),如果u<exp(-ΔC/T),則接受新布局為當(dāng)前布局;
步驟三,用VFSR退火函數(shù)更新當(dāng)前溫度T:
T=T0exp(-ck),
k為接受新布局的總次數(shù),c為實(shí)數(shù)常量,c=-log(TRS)×exp(-log(TAS));TRS為退火尺度系數(shù),TRS=10-9,TAS為最大退火迭代次數(shù),TAS計(jì)算方法為:
TAS=log0.8(0.05×H/T0)×M,
其中H為電路中的信號(hào)個(gè)數(shù),M為馬可夫鏈長(zhǎng)度,M=10·N1.33;
步驟四,對(duì)步驟一至三過(guò)程進(jìn)行M次迭代;
步驟五,如果T<0.05×Cost/H,則執(zhí)行步驟四,否則轉(zhuǎn)步驟一繼續(xù)執(zhí)行。
進(jìn)一步,在第四步中,局部?jī)?yōu)化布局的具體方法為:
第一,令當(dāng)前溫度T=0,對(duì)第三步的步驟一至步驟二過(guò)程進(jìn)行M次迭代,由于當(dāng)前溫度T為0的情況下,只接受結(jié)果比當(dāng)前布局好的新布局,所以進(jìn)行M次迭代之后會(huì)找到局部最優(yōu)布局;
第二,如果步驟一獲得的局部最優(yōu)布局的結(jié)果好于當(dāng)前最優(yōu)布局,則替換當(dāng)前最優(yōu)布局為該局部最優(yōu)布局,當(dāng)前最優(yōu)布局為到目前為止找到的結(jié)果最好的布局;
進(jìn)一步,在第十步中,并行布線迭代的具體方法為:
(一),每個(gè)線程Thd[i]按序從任務(wù)集SigSet[i]中取一個(gè)信號(hào)j進(jìn)行拆線,即如果信號(hào)j已布線,則清空信號(hào)j在布線資源圖RG上的布線路徑,并對(duì)信號(hào)j的布線路徑經(jīng)歷的布線資源節(jié)點(diǎn)的占有度減1,P個(gè)線程互斥執(zhí)行此步驟,i∈{1,2,…,P};
(二),將信號(hào)j的源節(jié)點(diǎn)src加入到布線樹(shù)RT[j],布線樹(shù)RT[j]用來(lái)以樹(shù)形結(jié)構(gòu)保存信號(hào)j的源節(jié)點(diǎn)src到多個(gè)目標(biāo)節(jié)點(diǎn)sink的布線路徑;
(三),對(duì)信號(hào)j的每一個(gè)目標(biāo)節(jié)點(diǎn)sink用A*尋路算法在布線資源圖RG上尋找一條從布線樹(shù)RT[j]中節(jié)點(diǎn)到該目標(biāo)節(jié)點(diǎn)sink的花費(fèi)最低的路徑進(jìn)行布線,并保存布線路徑:
清空優(yōu)先隊(duì)列PQ,并將布線樹(shù)RT[j]中每個(gè)布線資源節(jié)點(diǎn)x的路徑成本PathCost(x)置為Crit(src,sink)×delay(x),加入到優(yōu)先隊(duì)列PQ中,優(yōu)先隊(duì)列PQ用來(lái)按總成本TotalCost(x)從小到大排序來(lái)存儲(chǔ)當(dāng)前搜索到的布線資源節(jié)點(diǎn),TotalCost(x)定義為:
TotalCost(x)=PathCost(x)+α·ExpectedCost(x,sink),
其中ExpectedCost(x,sink)代表從當(dāng)前布線資源節(jié)點(diǎn)x到目標(biāo)端點(diǎn)sink的期望成本估計(jì)值,α為啟發(fā)式參數(shù),α取值范圍為1.0至1.4,路徑成本PathCost(x)表示從源節(jié)點(diǎn)src到當(dāng)前搜索到的節(jié)點(diǎn)x的路徑上的每一個(gè)布線資源節(jié)點(diǎn)n的布線成本Cost(n)之和,Cost(n)表示布線資源節(jié)點(diǎn)n的布線成本:
Cost(n)=Crit(src,sink)×delay(n)+[1-Crit(src,sink)]×b(n)×p(n)×h(n),
其中Crit(src,sink)表示時(shí)序分析后信號(hào)j從源節(jié)點(diǎn)src到目標(biāo)節(jié)點(diǎn)sink的邊的關(guān)鍵度,delay(n)表示節(jié)點(diǎn)n的時(shí)序項(xiàng),b(n)表示節(jié)點(diǎn)n的基本花費(fèi),p(n)表示節(jié)點(diǎn)n當(dāng)前占有度,h(n)表示節(jié)點(diǎn)n的歷史占有度;
取信號(hào)j尚未布線的目標(biāo)節(jié)點(diǎn)中關(guān)鍵度Crit(src,sink)最大的目標(biāo)節(jié)點(diǎn)sink,如果目標(biāo)節(jié)點(diǎn)sink是優(yōu)先隊(duì)列PQ中第一個(gè)節(jié)點(diǎn),則表示源節(jié)點(diǎn)src到目標(biāo)節(jié)點(diǎn)sink的最佳路徑已找到,否則轉(zhuǎn)從優(yōu)先級(jí)隊(duì)列PQ中取出隊(duì)首布線資源節(jié)點(diǎn)y,對(duì)與y相連的布線資源節(jié)點(diǎn)z計(jì)算總成本TotalCost(z),并將z按TotalCost(z)加入到優(yōu)先級(jí)隊(duì)列PQ中,重復(fù)執(zhí)行直到找到目標(biāo)節(jié)點(diǎn)sink的路徑;
(四),對(duì)該路徑經(jīng)歷的布線資源節(jié)點(diǎn)的占有度加1,P個(gè)線程互斥執(zhí)行此步驟;
(五),將該路徑加入到布線樹(shù)RT[j],如果信號(hào)j還有目標(biāo)節(jié)點(diǎn)sink,則轉(zhuǎn)步驟步驟(三),對(duì)信號(hào)j下一個(gè)目標(biāo)節(jié)點(diǎn)sink尋路,否則,執(zhí)行步驟(六);
(六),如果任務(wù)集SigSet[i]中所有信號(hào)都完成了步驟一至步驟五過(guò)程,則轉(zhuǎn)第十一步,否則,繼續(xù)布線下一個(gè)信號(hào)。
本發(fā)明提供的Elf3D跨平臺(tái)引擎前端達(dá)到次時(shí)代畫(huà)面效果,在性能與伸縮性方面都具有良好的品質(zhì),跨平臺(tái)解決方案工具化,保證美術(shù)流程的統(tǒng)一。
本發(fā)明提供的布局布線的方法,將應(yīng)用于傳統(tǒng)集成電路布局的超快速模擬重復(fù)退火VFSR算法的退火函數(shù)應(yīng)用于Elf3D跨平臺(tái)引擎系統(tǒng)布局的溫度更新,采用了重復(fù)退火過(guò)程以反復(fù)尋找更好的解,實(shí)現(xiàn)了對(duì)布局過(guò)程的加速;采用多線程方法對(duì)現(xiàn)有的基于擁擠協(xié)商PathFinder算法的布線方法進(jìn)行并行化改進(jìn)。本發(fā)明提供的布局布線的方法使得最終電路的時(shí)延和線長(zhǎng)兩個(gè)重要性能指標(biāo)基本不變的情況下,布局布線速度有了顯著加快。本發(fā)明方法簡(jiǎn)單,操作方便,較好的解決了現(xiàn)有Elf3D跨平臺(tái)引擎系統(tǒng)的布局、布線過(guò)程中CPU消耗時(shí)間長(zhǎng),效率低的問(wèn)題。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例提供的Elf3D跨平臺(tái)引擎系統(tǒng)示意圖。
圖2是本發(fā)明實(shí)施例提供的工具鏈?zhǔn)疽鈭D。
圖中:1、跨平臺(tái)多光源延遲渲染系統(tǒng);2、多線程渲染框架;3、多種主流VR平臺(tái);4、資源瀏覽器;5、真實(shí)游戲畫(huà)面編輯器;6、平臺(tái)模擬器;7、材質(zhì)編輯器;8、模型編輯器;9、粒子編輯器;10、FBX格式導(dǎo)入器;11、地形編輯器;12、動(dòng)畫(huà)曲線編輯器;13、聲音編輯器;14、光照烘培器;15、帖圖編輯器;16、資源發(fā)布器。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
下面結(jié)合對(duì)本發(fā)明的應(yīng)用原理作詳細(xì)描述。
如圖1所示,本發(fā)明實(shí)施例提供的Elf3D跨平臺(tái)引擎系統(tǒng)包括:
高效的跨平臺(tái)多光源延遲渲染系統(tǒng)1:
延遲渲染通過(guò)先渲染GBuffer(包含多張基礎(chǔ)材質(zhì)信息的場(chǎng)景渲染結(jié)果),在混合GBuffer進(jìn)行光照計(jì)算,輸出最終渲染結(jié)果的方式,使場(chǎng)景中動(dòng)態(tài)光的數(shù)量不再受限制,提升了多光源實(shí)時(shí)渲染的效率,將計(jì)算復(fù)雜度從O(n2)降為O(n)
多線程渲染框架2:
采用多線程渲染框架,能夠保證GPU的效率得到最大的利用,同時(shí)解放CPU的計(jì)算能力,用于更為復(fù)雜的傳統(tǒng)計(jì)算,例如,物理碰撞,粒子模擬等。多線程渲染框架能最大化的利用硬件并行化計(jì)算的能力,尤其是GPU的效率。多線程渲染框架,能夠從根本上解決CPU和GPU的耦合度的問(wèn)題,提升整體引擎效率。
多種主流VR平臺(tái)3:
VR是手機(jī)平臺(tái)后的有一個(gè)巨大的計(jì)算平臺(tái),Elf3D引擎支持多種主流VR設(shè)備,無(wú)需在傳統(tǒng)項(xiàng)目上進(jìn)行二次技術(shù)開(kāi)發(fā),支持輸出程序運(yùn)行時(shí)到VR設(shè)備。
Elf3D引擎提供成熟的VR運(yùn)行時(shí),同時(shí)使用工具鏈的支持,將原有項(xiàng)目的內(nèi)容,移植輸出到VR平臺(tái)上,無(wú)需二次開(kāi)發(fā)。
本發(fā)明實(shí)施例提供的Elf3D跨平臺(tái)引擎系統(tǒng)布局布線的方法具體步驟為:
第一步,將電路中每一個(gè)可配置邏輯單元CLB、I/O單元、異構(gòu)模塊等單元隨機(jī)地放置到Elf3D跨平臺(tái)引擎系統(tǒng)硬件內(nèi)部物理位置,得到一個(gè)初始布局;
第二步,計(jì)算初始溫度T0;
第三步,布局迭代;
第四步,局部?jī)?yōu)化布局;
第五步,如果累計(jì)第三步中對(duì)步驟一至步驟三過(guò)程迭代總次數(shù)超過(guò)TAS,則輸出當(dāng)前最優(yōu)布局并轉(zhuǎn)第六步進(jìn)行布線;否則令當(dāng)前溫度T為前一次執(zhí)行第三步過(guò)程中新布局的接受率第一次低于44%時(shí)的溫度,轉(zhuǎn)第三步開(kāi)始重復(fù)退火;
第六步,布線初始化;
第七步,為每個(gè)線程劃分任務(wù)集,假設(shè)處理器個(gè)數(shù)為P,則創(chuàng)建P個(gè)線程,并且為每個(gè)線程Thd[i]創(chuàng)建任務(wù)集SigSet[i],i∈{1,2,…,P};將布線資源圖RG劃分為P個(gè)大小相等的不交叉區(qū)域,對(duì)于每個(gè)信號(hào),如果落入?yún)^(qū)域i的目標(biāo)節(jié)點(diǎn)sink個(gè)數(shù)越多,就將分給區(qū)域i對(duì)應(yīng)的任務(wù)集SigSet[i],i∈{1,2,…,P},并保證每個(gè)任務(wù)集內(nèi)的sink總數(shù)一樣多;
第八步,對(duì)每個(gè)線程任務(wù)集SigSet[i]中所有信號(hào)按照sink個(gè)數(shù)從多到少排列;
第九步,啟動(dòng)P個(gè)線程,P個(gè)線程并行執(zhí)行第十步;
第十步,并行布線迭代;
第十一步,同步P個(gè)線程,即等待每個(gè)線程都執(zhí)行完第十步;由主線程檢查整個(gè)電路的布線是否合法,如果布線合法,即沒(méi)有重復(fù)被占用的布線資源節(jié)點(diǎn),則轉(zhuǎn)第十四步;否則,對(duì)所有重復(fù)被占用的布線資源節(jié)點(diǎn)的歷史占用度加1,并且加大擁擠懲罰度,進(jìn)行時(shí)序分析,轉(zhuǎn)第十二步;第十二步,主線程重新布線擁擠的信號(hào);
第十三步,檢查整個(gè)電路的布線是否合法,如果布線合法,則轉(zhuǎn)第十四步;否則如果布線迭代次數(shù)不超過(guò)指定值Max,則進(jìn)行時(shí)序分析并轉(zhuǎn)第十步執(zhí)行下一次布線迭代,否則轉(zhuǎn)第十四步;
第十四步,將其余P-1個(gè)線程合并到主線程,輸出布線結(jié)果并退出布線。
進(jìn)一步,在第三步中,布局迭代具體步驟為:
步驟一,在當(dāng)前布局上,通過(guò)隨機(jī)地選擇一對(duì)可配置邏輯單元CLB、I/O單元、異構(gòu)模塊等單元交換位置,或者選擇一個(gè)可配置邏輯單元CLB、I/O單元、異構(gòu)模塊等單元與一個(gè)空白位置進(jìn)行交換,得到一個(gè)新的布局,得到一個(gè)新布局,并計(jì)算新布局的花費(fèi)Cost:
其中Cost'表示當(dāng)前布局花費(fèi),初始布局時(shí)Cost'=1.0,tc、tc'、bc、bc'均為實(shí)數(shù),tc和bc分別表示新布局的時(shí)序量和擁擠量,tc'和bc'分別表示當(dāng)前布局的時(shí)序量和擁擠量,λ表示時(shí)序量的權(quán)重,1-λ表示擁擠量的權(quán)重,λ=0.5;
步驟二,根據(jù)當(dāng)前溫度T,用新布局的花費(fèi)Cost與當(dāng)前布局的花費(fèi)Cost'之差ΔC判斷是否接受新布局:若ΔC<0,則接受新布局為當(dāng)前布局,否則,設(shè)u為區(qū)間[0,1]內(nèi)的一個(gè)隨機(jī)數(shù),如果u<exp(-ΔC/T),則接受新布局為當(dāng)前布局;
步驟三,用VFSR退火函數(shù)更新當(dāng)前溫度T:
T=T0exp(-ck),
k為接受新布局的總次數(shù),c為實(shí)數(shù)常量,c=-log(TRS)×exp(-log(TAS));
TRS為退火尺度系數(shù),TRS=10-9,TAS為最大退火迭代次數(shù),TAS計(jì)算方法為:
TAS=log0.8(0.05×H/T0)×M,
其中H為電路中的信號(hào)個(gè)數(shù),M為馬可夫鏈長(zhǎng)度,M=10·N1.33;
步驟四,對(duì)步驟一至三過(guò)程進(jìn)行M次迭代;
步驟五,如果T<0.05×Cost/H,則執(zhí)行步驟四,否則轉(zhuǎn)步驟一繼續(xù)執(zhí)行。
進(jìn)一步,在第四步中,局部?jī)?yōu)化布局的具體方法為:
第一,令當(dāng)前溫度T=0,對(duì)第三步的步驟一至步驟二過(guò)程進(jìn)行M次迭代,由于當(dāng)前溫度T為0的情況下,只接受結(jié)果比當(dāng)前布局好的新布局,所以進(jìn)行M次迭代之后會(huì)找到局部最優(yōu)布局;
第二,如果步驟一獲得的局部最優(yōu)布局的結(jié)果好于當(dāng)前最優(yōu)布局,則替換當(dāng)前最優(yōu)布局為該局部最優(yōu)布局,當(dāng)前最優(yōu)布局為到目前為止找到的結(jié)果最好的布局;
進(jìn)一步,在第十步中,并行布線迭代的具體方法為:
(一),每個(gè)線程Thd[i]按序從任務(wù)集SigSet[i]中取一個(gè)信號(hào)j進(jìn)行拆線,即如果信號(hào)j已布線,則清空信號(hào)j在布線資源圖RG上的布線路徑,并對(duì)信號(hào)j的布線路徑經(jīng)歷的布線資源節(jié)點(diǎn)的占有度減1,P個(gè)線程互斥執(zhí)行此步驟,i∈{1,2,…,P};
(二),將信號(hào)j的源節(jié)點(diǎn)src加入到布線樹(shù)RT[j],布線樹(shù)RT[j]用來(lái)以樹(shù)形結(jié)構(gòu)保存信號(hào)j的源節(jié)點(diǎn)src到多個(gè)目標(biāo)節(jié)點(diǎn)sink的布線路徑;
(三),對(duì)信號(hào)j的每一個(gè)目標(biāo)節(jié)點(diǎn)sink用A*尋路算法在布線資源圖RG上尋找一條從布線樹(shù)RT[j]中節(jié)點(diǎn)到該目標(biāo)節(jié)點(diǎn)sink的花費(fèi)最低的路徑進(jìn)行布線,并保存布線路徑:
清空優(yōu)先隊(duì)列PQ,并將布線樹(shù)RT[j]中每個(gè)布線資源節(jié)點(diǎn)x的路徑成本PathCost(x)置為Crit(src,sink)×delay(x),加入到優(yōu)先隊(duì)列PQ中,優(yōu)先隊(duì)列PQ用來(lái)按總成本TotalCost(x)從小到大排序來(lái)存儲(chǔ)當(dāng)前搜索到的布線資源節(jié)點(diǎn),TotalCost(x)定義為:
TotalCost(x)=PathCost(x)+α·ExpectedCost(x,sink),
其中ExpectedCost(x,sink)代表從當(dāng)前布線資源節(jié)點(diǎn)x到目標(biāo)端點(diǎn)sink的期望成本估計(jì)值,α為啟發(fā)式參數(shù),α取值范圍為1.0至1.4,路徑成本PathCost(x)表示從源節(jié)點(diǎn)src到當(dāng)前搜索到的節(jié)點(diǎn)x的路徑上的每一個(gè)布線資源節(jié)點(diǎn)n的布線成本Cost(n)之和,Cost(n)表示布線資源節(jié)點(diǎn)n的布線成本:
Cost(n)=Crit(src,sink)×delay(n)+[1-Crit(src,sink)]×b(n)×p(n)×h(n),
其中Crit(src,sink)表示時(shí)序分析后信號(hào)j從源節(jié)點(diǎn)src到目標(biāo)節(jié)點(diǎn)sink的邊的關(guān)鍵度,delay(n)表示節(jié)點(diǎn)n的時(shí)序項(xiàng),b(n)表示節(jié)點(diǎn)n的基本花費(fèi),p(n)表示節(jié)點(diǎn)n當(dāng)前占有度,h(n)表示節(jié)點(diǎn)n的歷史占有度;
取信號(hào)j尚未布線的目標(biāo)節(jié)點(diǎn)中關(guān)鍵度Crit(src,sink)最大的目標(biāo)節(jié)點(diǎn)sink,如果目標(biāo)節(jié)點(diǎn)sink是優(yōu)先隊(duì)列PQ中第一個(gè)節(jié)點(diǎn),則表示源節(jié)點(diǎn)src到目標(biāo)節(jié)點(diǎn)sink的最佳路徑已找到,否則轉(zhuǎn)從優(yōu)先級(jí)隊(duì)列PQ中取出隊(duì)首布線資源節(jié)點(diǎn)y,對(duì)與y相連的布線資源節(jié)點(diǎn)z計(jì)算總成本TotalCost(z),并將z按TotalCost(z)加入到優(yōu)先級(jí)隊(duì)列PQ中,重復(fù)執(zhí)行直到找到目標(biāo)節(jié)點(diǎn)sink的路徑;
(四),對(duì)該路徑經(jīng)歷的布線資源節(jié)點(diǎn)的占有度加1,P個(gè)線程互斥執(zhí)行此步驟;
(五),將該路徑加入到布線樹(shù)RT[j],如果信號(hào)j還有目標(biāo)節(jié)點(diǎn)sink,則轉(zhuǎn)步驟步驟(三),對(duì)信號(hào)j下一個(gè)目標(biāo)節(jié)點(diǎn)sink尋路,否則,執(zhí)行步驟(六);
(六),如果任務(wù)集SigSet[i]中所有信號(hào)都完成了步驟一至步驟五過(guò)程,則轉(zhuǎn)第十一步,否則,繼續(xù)布線下一個(gè)信號(hào)。
本發(fā)明提供的布局布線的方法,將應(yīng)用于傳統(tǒng)集成電路布局的超快速模擬重復(fù)退火VFSR算法的退火函數(shù)應(yīng)用于Elf3D跨平臺(tái)引擎系統(tǒng)布局的溫度更新,采用了重復(fù)退火過(guò)程以反復(fù)尋找更好的解,實(shí)現(xiàn)了對(duì)布局過(guò)程的加速;采用多線程方法對(duì)現(xiàn)有的基于擁擠協(xié)商PathFinder算法的布線方法進(jìn)行并行化改進(jìn)。本發(fā)明提供的布局布線的方法使得最終電路的時(shí)延和線長(zhǎng)兩個(gè)重要性能指標(biāo)基本不變的情況下,布局布線速度有了顯著加快。本發(fā)明方法簡(jiǎn)單,操作方便,較好的解決了現(xiàn)有Elf3D跨平臺(tái)引擎系統(tǒng)的布局、布線過(guò)程中CPU消耗時(shí)間長(zhǎng),效率低的問(wèn)題。
本發(fā)明的布局布線方法與現(xiàn)有VPR6.0布局布線方法的質(zhì)量結(jié)果對(duì)比
從表中可以看出,在耗時(shí)方面本發(fā)明的布局布線方法優(yōu)于現(xiàn)有VPR6.0布局布線方法,平均加速比達(dá)到了2.173,從表2可以看出,在延時(shí)和線長(zhǎng)方面本發(fā)明的布局布線方法和現(xiàn)有VPR6.0布局布線方法基本相當(dāng),最終總的延時(shí)降低了1.4%,延時(shí)方面的質(zhì)量有所提高,總的線長(zhǎng)增加了1%,線長(zhǎng)方面的質(zhì)量有所下降,實(shí)際應(yīng)用中延時(shí)質(zhì)量比線長(zhǎng)質(zhì)量?jī)?yōu)先級(jí)更高。
下面結(jié)合具體實(shí)施例對(duì)本發(fā)明的應(yīng)用原理作進(jìn)一步描述。
本發(fā)明實(shí)施例提供的Elf3D跨平臺(tái)引擎系統(tǒng),包括:
1、支持平臺(tái):支持Windows XP及以上所有系統(tǒng)。支持DirectX9,DirectX10,DirectX11硬件。具有良好的兼容性和適應(yīng)性保證在各種配置下都能有出色的性能、效果表現(xiàn);還具有主流瀏覽器支持功能。
2、渲染特性具有:
1)多線程渲染特性:保證游戲在高CPU壓力下,依舊能夠達(dá)到較高的流
暢度。制作團(tuán)隊(duì)可以更加專(zhuān)注于游戲表現(xiàn)力和創(chuàng)造力。
2)64位HDR渲染管線:
64位顏色空間HDR,gamma校驗(yàn),豐富的后處理特性,保證游戲畫(huà)面真實(shí)性與豐富程度。
3)引擎支持所有現(xiàn)代材質(zhì)算法:
包括逐像素光照,normal map,Blinn-Phong光照模型,支持各向異性金屬光照。
4)多渲染器支持:
包括DirectX9,DirectX11,OpenGL 3.0,OpenGL ES 2.0。
5)自適應(yīng)shader系統(tǒng),根據(jù)硬件性能自動(dòng)適配合適shader,保證伸縮性。
6)支持大規(guī)模高質(zhì)量實(shí)時(shí)陰影,在室內(nèi)和室外都能有良好表現(xiàn)。
3、動(dòng)畫(huà)系統(tǒng)具有:
1)多線程驅(qū)動(dòng)動(dòng)畫(huà)系統(tǒng),支持大規(guī)模人物動(dòng)畫(huà);
2)使用GPU Quad蒙皮系統(tǒng),單個(gè)蒙皮支持100根骨頭;
3)蒙皮點(diǎn)支持1~4權(quán)重;
4)動(dòng)作融合與動(dòng)作拼接支持,讓動(dòng)作更加流暢、平滑,節(jié)省美術(shù)人工和游戲資源大?。?/p>
5)自動(dòng)GC系統(tǒng),針對(duì)大規(guī)模mmo游戲,能夠有更多豐富動(dòng)作。
4、場(chǎng)景管理具有:
1)八叉樹(shù)場(chǎng)景管理,能夠應(yīng)付復(fù)雜的室內(nèi)、室外場(chǎng)景;
2)SSE加速的場(chǎng)景可視性剔除;
3)自適應(yīng)LOD細(xì)節(jié)層級(jí),支持遠(yuǎn)視距室外開(kāi)闊場(chǎng)景;
4)針對(duì)開(kāi)闊大地形的優(yōu)化。
5、資源管理具有:
1)支持zip,7z壓縮檔案;
2)后臺(tái)流加載技術(shù);
3)下載與緩存技術(shù)。
6、GUI具有:
1)深度整合Scaleform 4x;
2)支持3D GUI;
3)國(guó)際化支持;
4)高質(zhì)量文字渲染;
5)支持AS2、AS3腳本開(kāi)發(fā)。
7、聲音系統(tǒng)具有:
1)在所有平臺(tái)上都能支持聲音壓縮文件;
2)針對(duì)OGG壓縮流播放進(jìn)行了優(yōu)化處理,保證運(yùn)行時(shí)內(nèi)存空間效率;
3)支持多聲道3D音效;
4)提供各種音效參數(shù)調(diào)節(jié)。
8、特效及粒子具有:
1)豐富的粒子系統(tǒng)能夠提供武器、環(huán)境、爆炸、技能效果更佳真實(shí)的表現(xiàn);
2)深度整合的粒子編輯器;
3)支持片面、閃電光束、模型、條帶等多種;
4)支持多種材質(zhì)系統(tǒng),可以使用扭曲效果、序列圖、UV動(dòng)畫(huà)等效果;
5)曲線驅(qū)動(dòng)參數(shù),美術(shù)更容易控制細(xì)節(jié)表現(xiàn)力。
如圖2所示,本發(fā)明實(shí)施例提供的工具鏈中各編輯器具體有:
資源瀏覽器4,可視化管理項(xiàng)目資源,支持拖拽操作,能夠支持從小項(xiàng)目到AAA大型項(xiàng)目管理;
真實(shí)游戲畫(huà)面編輯器5,“即見(jiàn)即所玩”編輯器,實(shí)時(shí)編輯和查看實(shí)際游戲畫(huà)面;
平臺(tái)模擬器6,在Windows上可以直接查看iOS,Android上實(shí)際游戲畫(huà)面;
材質(zhì)編輯器7,使用美術(shù)熟悉的3ds max材質(zhì)編輯器風(fēng)格,提供豐富的可調(diào)屬性;
模型編輯器8,檢查模型分組,指定材質(zhì),觀察相關(guān)物理屬性,支持自動(dòng)LOD和UV生成;
粒子編輯器9,提供豐富的發(fā)射器,修改器組件,可調(diào)參數(shù)列表,性能評(píng)估;
FBX格式導(dǎo)入器10,支持所有主流3D美術(shù)制作軟件,支持靜態(tài)模型,組合模型,剛體動(dòng)畫(huà),蒙皮動(dòng)畫(huà),內(nèi)建材質(zhì)、帖圖導(dǎo)入;
地形編輯器11,支持最大8層單獨(dú)材質(zhì),每層材質(zhì)可具有單獨(dú)的材質(zhì)參數(shù);
動(dòng)畫(huà)曲線編輯器12,美術(shù)在場(chǎng)景中對(duì)任意材質(zhì)動(dòng)畫(huà)、任意燈光參數(shù)進(jìn)行動(dòng)畫(huà)編輯,設(shè)置播放速度、循環(huán)屬性等操作;
聲音編輯器13,實(shí)時(shí)編輯、測(cè)試場(chǎng)景音效環(huán)境;
光照烘培器14,支持高細(xì)節(jié)全局光照和陰影,與編輯器深度整合,實(shí)時(shí)查看烘焙結(jié)果,一鍵烘焙,無(wú)需美術(shù)重復(fù)調(diào)節(jié)關(guān)卡;
帖圖編輯器15,貼圖查看,格式壓縮設(shè)置,跨平臺(tái)資源壓縮設(shè)置;
資源發(fā)布器16,支持跨平臺(tái)資源優(yōu)化,自動(dòng)記錄用戶(hù)設(shè)置,轉(zhuǎn)換資源到適應(yīng)目標(biāo)平臺(tái)的最優(yōu)格式,支持帖圖自動(dòng)縮放、格式轉(zhuǎn)換、shader和材質(zhì)自適應(yīng),一鍵部署。
本發(fā)明提供的Elf3D跨平臺(tái)引擎前端達(dá)到次時(shí)代畫(huà)面效果,在性能與伸縮性方面都具有良好的品質(zhì),跨平臺(tái)解決方案工具化,保證美術(shù)流程的統(tǒng)一。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。