手機(jī)發(fā)熱絕對(duì)是一個(gè)讓人頭疼的問(wèn)題,日常的使用與通話(huà)時(shí)間過(guò)長(zhǎng)都會(huì)導(dǎo)致手機(jī)發(fā)熱,更令人不爽的是,在飆大型手游時(shí)令人心驚膽戰(zhàn)的不是游戲帶來(lái)的快感,而是手機(jī)燙手的溫度。隨著手機(jī)的普及度越來(lái)越高,各手機(jī)廠商在降低手機(jī)發(fā)熱這個(gè)難題上也是下足了功夫,主打性?xún)r(jià)比的廠商更是把高端元件放在了低端手機(jī)里,更好的元件意味著更低的功耗。我們對(duì)注諸如玩久發(fā)熱、打手游發(fā)燒的現(xiàn)象可以說(shuō)拜拜,大大地提升了手機(jī)的使用體驗(yàn)。

安卓手機(jī)為何成暖手寶

手機(jī)發(fā)熱的主要原因有如下幾個(gè),手機(jī)通話(huà)時(shí)發(fā)熱有兩個(gè)方面:1、手機(jī)通話(huà)時(shí)需耗費(fèi)大量的電能,電池的放電電流比待機(jī)時(shí)要大得多,因此電池會(huì)產(chǎn)生一定的熱量;2、手機(jī)芯片中散發(fā)熱量的元件:功放,手機(jī)在通話(huà)時(shí)負(fù)責(zé)接收與發(fā)射信號(hào)的功放芯片會(huì)全速工作,因而釋放出來(lái)的熱量要比待機(jī)時(shí)要大得多。長(zhǎng)時(shí)間通話(huà)以后,電池和功放散發(fā)出來(lái)的熱量積聚起來(lái),沒(méi)有及時(shí)地散發(fā)出去,手機(jī)溫度便會(huì)升高。只要不是某個(gè)部位特別地?zé),并且手機(jī)沒(méi)有其它的故障現(xiàn)象發(fā)生,通話(huà)二十多分鐘以后手機(jī)發(fā)熱是正常的。玩游戲也是兩方面,一方面是電池的放電產(chǎn)生的熱量,另外一方面是玩游戲時(shí)候CPU和GPU大量運(yùn)算產(chǎn)生的熱量。

傳統(tǒng)印象中,性能和功耗總是成正比,這也就是為何越強(qiáng)大的PC主機(jī)要配上水冷甚至更強(qiáng)的冷卻系統(tǒng)。于是很多消費(fèi)者會(huì)說(shuō)其手機(jī)中的配置都是最高端大氣上檔次的,為何還有發(fā)熱的現(xiàn)象?難道是買(mǎi)了一臺(tái)假手機(jī)?
運(yùn)用各位同學(xué)熟悉的排除法來(lái)看問(wèn)題,頂級(jí)的GPU運(yùn)行一個(gè)理論上綽綽有余的游戲時(shí)應(yīng)該沒(méi)有如此大的發(fā)熱量,但事實(shí)擺在那,溫度就那么高。綜上所述安卓手機(jī)運(yùn)行大型游戲體驗(yàn)差的根本癥結(jié)并非在于GPU,起碼在高端手機(jī)芯片上GPU性能不是瓶頸,罪魁禍?zhǔn)资撬呢i隊(duì)友CPU。小編可沒(méi)有冤枉他,CPU進(jìn)行3D繪制時(shí)負(fù)載過(guò)高處理不過(guò)來(lái),CPU不得不長(zhǎng)時(shí)間運(yùn)轉(zhuǎn)的結(jié)果就是手機(jī)溫度的升高。

講到這里各位看官可能有點(diǎn)想不明白了,怎么處理不過(guò)來(lái),寡人的CPU性能可是頂棒的!那么這里就不得不提到CPU負(fù)載高的元兇OpenGL了。它是指定義了一個(gè)跨編程語(yǔ)言、跨平臺(tái)的編程接口規(guī)格的專(zhuān)業(yè)的圖形程序接口。它用于二三維圖像,是一個(gè)功能強(qiáng)大、調(diào)用方便的底層圖形庫(kù)。碼字的方式應(yīng)該簡(jiǎn)單點(diǎn),CPU和GPU好比是兩個(gè)水箱,OPEN GL就是中間的供給管。至于這管為何如此不給力,不是因?yàn)楦魑或}年整天在打擼而是這個(gè)標(biāo)準(zhǔn)已經(jīng)在手機(jī)上使用了二十多年。
在1992年創(chuàng)立的行業(yè)標(biāo)準(zhǔn),那個(gè)時(shí)候手機(jī)還在娘胎里呢。但是,隨著手機(jī)處理器性能的高速發(fā)展,無(wú)論是用戶(hù)還是廠商對(duì)此都怨聲載道,各種口誅筆伐。于是,Open GL的官方組織終于頂不住壓力,Khronos在2015年三月份推出了新一代API規(guī)范Vulkan,采用全新跨平臺(tái)設(shè)計(jì),但最令人驚喜的是大幅度降低了繪制命令開(kāi)銷(xiāo),改善了多線(xiàn)程性能,渲染性能更快。

Vulkan也是一個(gè)跨平臺(tái)的2D和3D繪圖應(yīng)用程序接口(API),最早由科納斯組織在2015年游戲開(kāi)發(fā)者大會(huì)(GDC)上發(fā)表。同 OpenGL 一樣都是由 Khronos 集團(tuán)開(kāi)發(fā)。它是 AMD Mantle 的后續(xù)版本,繼承了前者強(qiáng)大的低開(kāi)銷(xiāo)架構(gòu),使軟件開(kāi)發(fā)人員能夠全面獲取 Radeon GPU 與多核 CPU 的性能、效率和功能。Vulkan支持的操作系統(tǒng)包括:Linux, Windows XP to Windows 10, Android等。Vulkan還可以支持更多的GPU,包括:AMD, NVIDIA, Adreno, PowerVR, Mali等桌面GPU和移動(dòng)GPU。這對(duì)手機(jī)廠商與用戶(hù)來(lái)說(shuō)可是一大福音。

下圖講解OpenGL/OpenGL ES與Vulkan區(qū)別之處,OpenGL驅(qū)動(dòng)是一個(gè)龐大的接口層,應(yīng)用不是直接的訪問(wèn)GPU的資源,而必須按照OpenGL接口的方法去訪問(wèn)則帶來(lái)了諸多問(wèn)題:①?gòu)?fù)雜的驅(qū)動(dòng)導(dǎo)致過(guò)度的CPU開(kāi)銷(xiāo),以及給設(shè)備運(yùn)行帶來(lái)了許多不可預(yù)測(cè)性。這意味著應(yīng)用無(wú)法到預(yù)測(cè)某個(gè)接口調(diào)用開(kāi)銷(xiāo),也就無(wú)法優(yōu)化代碼的運(yùn)行。②驅(qū)動(dòng)總是開(kāi)啟錯(cuò)誤檢測(cè),給CPU帶來(lái)了額外的開(kāi)銷(xiāo)。事實(shí)上如果應(yīng)用自己做了錯(cuò)誤檢查,那么驅(qū)動(dòng)就沒(méi)必要再做一遍。③驅(qū)動(dòng)需要重新編譯鏈接整個(gè)shader代碼,這樣應(yīng)用啟動(dòng)時(shí)便會(huì)消耗更多的初始化時(shí)間。④桌面系統(tǒng)和移動(dòng)系統(tǒng)使用不一同的API接口,OpenGL ES被廣泛應(yīng)用于移動(dòng)設(shè)備中,但在桌面系統(tǒng)上面還是使用OpenGL,這使得應(yīng)用無(wú)法便捷地跨平臺(tái)開(kāi)發(fā)。

Vulkan提出的目的之一就是避免OpenGL驅(qū)動(dòng)存在的缺點(diǎn)。相比之下Vulkan有:①更加簡(jiǎn)單的驅(qū)動(dòng)結(jié)構(gòu),使得開(kāi)銷(xiāo)更小和更好的設(shè)備一致性。②提供分層架構(gòu),使得驅(qū)動(dòng)執(zhí)行時(shí)的正確性驗(yàn)證和調(diào)試信息可以按需加載。在良好驗(yàn)證的應(yīng)用情況下,我們可以節(jié)省掉錯(cuò)誤檢測(cè)和調(diào)試代碼執(zhí)行的開(kāi)銷(xiāo)。③Vulkan運(yùn)行時(shí)并不需要處理整串shader代碼,而是處理SPIR-V中間代碼。這便大大地節(jié)省了shader編譯鏈接的時(shí)間。④為移動(dòng)平臺(tái),桌面系統(tǒng)以及嵌入式設(shè)備提供統(tǒng)一的API。Vulkan不負(fù)責(zé)內(nèi)存的管理,多線(xiàn)程的管理和并發(fā)訪問(wèn)保護(hù),把這些工作轉(zhuǎn)移到應(yīng)用程序,而Vulkan只需要專(zhuān)注于為GPU提供服務(wù),從而得到更加高效率的處理速度。
Vulkan能夠支持深入硬件底層的控制,為 Windows 7、Windows?8.1、Windows 10 和 Linux 帶來(lái)更快的性能和更高的影像質(zhì)量。Vulkan API 還提供超高的 OS 兼容性、渲染特性和硬件效率。不僅是電腦芯片廠商,也為手機(jī)芯片廠商提供了一個(gè)大舞臺(tái)。
蘋(píng)果的Metal

Metal是一個(gè)使用于在iPhone和iPad上GPU編程的高效框架。而Metal這個(gè)名稱(chēng)的來(lái)源則是為了說(shuō)明這個(gè)圖形框架的的確確是非常底層的——底層到已經(jīng)非常接近金屬板(Metal)。至少在圖形上更進(jìn)一步,支持更多直接訪問(wèn)底層硬件的操作,因?yàn)镺penGL或者Ios的圖形庫(kù)在手機(jī)芯片上跑,開(kāi)銷(xiāo)始終太大以致增加了散熱難度,所以需要開(kāi)放更多直接訪問(wèn)。該框架的設(shè)計(jì)主要為了兩個(gè)目的:3D圖形渲染和并行運(yùn)算。這也是平時(shí)圖形學(xué)上最常涉及的兩個(gè)東西,它們都是基于特殊的代碼在GPU上對(duì)大量的數(shù)據(jù)并行計(jì)算。

Metal相比OpenGL ES而言可以極大限度地的減少資源開(kāi)銷(xiāo)。當(dāng)使用OpenGL來(lái)創(chuàng)建一段緩存或者紋理,往往會(huì)產(chǎn)生一份備份以防GPU在使用這段數(shù)據(jù)時(shí)有其他的訪問(wèn)。如果想要在確保數(shù)據(jù)安全的情況下拷貝緩存區(qū)或是紋理這樣的大資源,那么產(chǎn)生的消耗可想而知。而反觀Metal,就會(huì)發(fā)現(xiàn)它的處理方式更加簡(jiǎn)單,開(kāi)發(fā)者可以在CPU和GPU之間同步使用這些數(shù)據(jù)。
為此蘋(píng)果還提供了一個(gè)更為優(yōu)秀的接口使得這種同步訪問(wèn)的情況變得更為容易:Grand Cnetral Dispatch(GCD技術(shù))。不過(guò)使用Metal同樣能做到這點(diǎn),所謂先進(jìn)的引擎就是能避免產(chǎn)生拷貝的情況下高效渲染那些需要加載或撤掉的資源。當(dāng)然,大多數(shù)游戲開(kāi)發(fā)者可能對(duì)深度的圖形接口不怎么感冒,不過(guò)不少主流引擎已經(jīng)開(kāi)始青睞Metal,而開(kāi)發(fā)者也將得益于在開(kāi)發(fā)中不需要自己去創(chuàng)建API。此外,對(duì)那些游戲發(fā)燒友來(lái)說(shuō),Metal的出現(xiàn),會(huì)讓開(kāi)發(fā)者們營(yíng)造更加令人驚嘆的游戲畫(huà)面效果,同時(shí)運(yùn)行也會(huì)更為流暢,對(duì)他們而言這無(wú)疑是一大利好。
結(jié)語(yǔ)
可能圖形接口知識(shí)看起來(lái)與我們相離甚遠(yuǎn),但它存在于我們的身邊卻如此真實(shí)。面對(duì)如今的圖形接口方案越來(lái)越多,若每個(gè)廠商都搞自己的硬件層API只會(huì)給開(kāi)發(fā)者帶來(lái)麻煩。關(guān)于圖形接口,統(tǒng)一地進(jìn)行更新?lián)Q代就最好不過(guò)了。