在手機(jī)客戶端尤其是Android應(yīng)用的開(kāi)發(fā)過(guò)程中,中培偉業(yè)《Android APP開(kāi)發(fā)架構(gòu)應(yīng)用實(shí)戰(zhàn)》培訓(xùn)專家隋老師指出,我們經(jīng)常會(huì)接觸到“硬件加速”這個(gè)詞。由于操作系統(tǒng)對(duì)底層軟硬件封裝非常完善,上層軟件開(kāi)發(fā)者往往對(duì)硬件加速的底層原理了解很少,也不清楚了解底層原理的意義,因此常會(huì)有一些誤解,如硬件加速是不是通過(guò)特殊算法實(shí)現(xiàn)頁(yè)面渲染加速,或是通過(guò)硬件提高CPU/GPU運(yùn)算速率實(shí)現(xiàn)渲染加速。
隋老師指出,對(duì)于App開(kāi)發(fā)者,簡(jiǎn)單了解硬件加速原理及上層API實(shí)現(xiàn),開(kāi)發(fā)時(shí)就可以充分利用硬件加速提高頁(yè)面的性能。
硬件加速的主要原理,就是通過(guò)底層軟件代碼,將CPU不擅長(zhǎng)的圖形計(jì)算轉(zhuǎn)換成GPU專用指令,由GPU完成。
很多計(jì)算機(jī)中的GPU有自己獨(dú)立的顯存;沒(méi)有獨(dú)立顯存則使用共享內(nèi)存的形式,從內(nèi)存中劃分一塊區(qū)域作為顯存顯存可以保存GPU指令等信息。
由于電路的限制,不容易通過(guò)提高時(shí)鐘頻率、減小時(shí)鐘周期的方式提高運(yùn)算速度。并行結(jié)構(gòu)通過(guò)增加電路規(guī)模、并行處理,來(lái)實(shí)現(xiàn)更快的運(yùn)算。但并行結(jié)構(gòu)不容易實(shí)現(xiàn)復(fù)雜邏輯,因?yàn)橥瑫r(shí)考慮多個(gè)支路的輸出結(jié)果,并協(xié)調(diào)同步處理的過(guò)程很復(fù)雜。
CPU更擅長(zhǎng)復(fù)雜邏輯控制,而GPU得益于大量ALU和并行結(jié)構(gòu)設(shè)計(jì),更擅長(zhǎng)數(shù)學(xué)運(yùn)算。
隋老師最后總結(jié)道:頁(yè)面由各種基礎(chǔ)元素(DisplayList)構(gòu)成,渲染時(shí)需要進(jìn)行大量浮點(diǎn)運(yùn)算。硬件加速條件下,CPU用于控制復(fù)雜繪制邏輯、構(gòu)建或更新DisplayList;GPU用于完成圖形計(jì)算、渲染DisplayList。在此條件下,刷新界面尤其是播放動(dòng)畫(huà)時(shí),CPU只重建或更新必要的DisplayList,進(jìn)一步提高渲染效率。實(shí)現(xiàn)同樣效果,應(yīng)盡量使用更簡(jiǎn)單的DisplayList,從而達(dá)到更好的性能。