手機發(fā)熱絕對是一個讓人頭疼的問題,日常的使用與通話時間過長都會導致手機發(fā)熱,更令人不爽的是,在飆大型手游時令人心驚膽戰(zhàn)的不是游戲帶來的快感,而是手機燙手的溫度。隨著手機的普及度越來越高,各手機廠商在降低手機發(fā)熱這個難題上也是下足了功夫,主打性價比的廠商更是把高端元件放在了低端手機里,更好的元件意味著更低的功耗。我們對注諸如玩久發(fā)熱、打手游發(fā)燒的現(xiàn)象可以說拜拜,大大地提升了手機的使用體驗。
安卓手機為何成暖手寶
手機發(fā)熱的主要原因有如下幾個,手機通話時發(fā)熱有兩個方面:1、手機通話時需耗費大量的電能,電池的放電電流比待機時要大得多,因此電池會產(chǎn)生一定的熱量;2、手機芯片中散發(fā)熱量的元件:功放,手機在通話時負責接收與發(fā)射信號的功放芯片會全速工作,因而釋放出來的熱量要比待機時要大得多。長時間通話以后,電池和功放散發(fā)出來的熱量積聚起來,沒有及時地散發(fā)出去,手機溫度便會升高。只要不是某個部位特別地熱,并且手機沒有其它的故障現(xiàn)象發(fā)生,通話二十多分鐘以后手機發(fā)熱是正常的。玩游戲也是兩方面,一方面是電池的放電產(chǎn)生的熱量,另外一方面是玩游戲時候CPU和GPU大量運算產(chǎn)生的熱量。
傳統(tǒng)印象中,性能和功耗總是成正比,這也就是為何越強大的PC主機要配上水冷甚至更強的冷卻系統(tǒng)。于是很多消費者會說其手機中的配置都是最高端大氣上檔次的,為何還有發(fā)熱的現(xiàn)象?難道是買了一臺假手機?
運用各位同學熟悉的排除法來看問題,頂級的GPU運行一個理論上綽綽有余的游戲時應該沒有如此大的發(fā)熱量,但事實擺在那,溫度就那么高。綜上所述安卓手機運行大型游戲體驗差的根本癥結(jié)并非在于GPU,起碼在高端手機芯片上GPU性能不是瓶頸,罪魁禍首是它的豬隊友CPU。小編可沒有冤枉他,CPU進行3D繪制時負載過高處理不過來,CPU不得不長時間運轉(zhuǎn)的結(jié)果就是手機溫度的升高。
講到這里各位看官可能有點想不明白了,怎么處理不過來,寡人的CPU性能可是頂棒的!那么這里就不得不提到CPU負載高的元兇OpenGL了。它是指定義了一個跨編程語言、跨平臺的編程接口規(guī)格的專業(yè)的圖形程序接口。它用于二三維圖像,是一個功能強大、調(diào)用方便的底層圖形庫。碼字的方式應該簡單點,CPU和GPU好比是兩個水箱,OPEN GL就是中間的供給管。至于這管為何如此不給力,不是因為各位騷年整天在打擼而是這個標準已經(jīng)在手機上使用了二十多年。
在1992年創(chuàng)立的行業(yè)標準,那個時候手機還在娘胎里呢。但是,隨著手機處理器性能的高速發(fā)展,無論是用戶還是廠商對此都怨聲載道,各種口誅筆伐。于是,Open GL的官方組織終于頂不住壓力,Khronos在2015年三月份推出了新一代API規(guī)范Vulkan,采用全新跨平臺設(shè)計,但最令人驚喜的是大幅度降低了繪制命令開銷,改善了多線程性能,渲染性能更快。
Vulkan也是一個跨平臺的2D和3D繪圖應用程序接口(API),最早由科納斯組織在2015年游戲開發(fā)者大會(GDC)上發(fā)表。同 OpenGL 一樣都是由 Khronos 集團開發(fā)。它是 AMD Mantle 的后續(xù)版本,繼承了前者強大的低開銷架構(gòu),使軟件開發(fā)人員能夠全面獲取 Radeon GPU 與多核 CPU 的性能、效率和功能。Vulkan支持的操作系統(tǒng)包括:Linux, Windows XP to Windows 10, Android等。Vulkan還可以支持更多的GPU,包括:AMD, NVIDIA, Adreno, PowerVR, Mali等桌面GPU和移動GPU。這對手機廠商與用戶來說可是一大福音。
下圖講解OpenGL/OpenGL ES與Vulkan區(qū)別之處,OpenGL驅(qū)動是一個龐大的接口層,應用不是直接的訪問GPU的資源,而必須按照OpenGL接口的方法去訪問則帶來了諸多問題:①復雜的驅(qū)動導致過度的CPU開銷,以及給設(shè)備運行帶來了許多不可預測性。這意味著應用無法到預測某個接口調(diào)用開銷,也就無法優(yōu)化代碼的運行。②驅(qū)動總是開啟錯誤檢測,給CPU帶來了額外的開銷。事實上如果應用自己做了錯誤檢查,那么驅(qū)動就沒必要再做一遍。③驅(qū)動需要重新編譯鏈接整個shader代碼,這樣應用啟動時便會消耗更多的初始化時間。④桌面系統(tǒng)和移動系統(tǒng)使用不一同的API接口,OpenGL ES被廣泛應用于移動設(shè)備中,但在桌面系統(tǒng)上面還是使用OpenGL,這使得應用無法便捷地跨平臺開發(fā)。
Vulkan提出的目的之一就是避免OpenGL驅(qū)動存在的缺點。相比之下Vulkan有:①更加簡單的驅(qū)動結(jié)構(gòu),使得開銷更小和更好的設(shè)備一致性。②提供分層架構(gòu),使得驅(qū)動執(zhí)行時的正確性驗證和調(diào)試信息可以按需加載。在良好驗證的應用情況下,我們可以節(jié)省掉錯誤檢測和調(diào)試代碼執(zhí)行的開銷。③Vulkan運行時并不需要處理整串shader代碼,而是處理SPIR-V中間代碼。這便大大地節(jié)省了shader編譯鏈接的時間。④為移動平臺,桌面系統(tǒng)以及嵌入式設(shè)備提供統(tǒng)一的API。Vulkan不負責內(nèi)存的管理,多線程的管理和并發(fā)訪問保護,把這些工作轉(zhuǎn)移到應用程序,而Vulkan只需要專注于為GPU提供服務,從而得到更加高效率的處理速度。
Vulkan能夠支持深入硬件底層的控制,為 Windows 7、Windows?8.1、Windows 10 和 Linux 帶來更快的性能和更高的影像質(zhì)量。Vulkan API 還提供超高的 OS 兼容性、渲染特性和硬件效率。不僅是電腦芯片廠商,也為手機芯片廠商提供了一個大舞臺。
蘋果的Metal
Metal是一個使用于在iPhone和iPad上GPU編程的高效框架。而Metal這個名稱的來源則是為了說明這個圖形框架的的確確是非常底層的——底層到已經(jīng)非常接近金屬板(Metal)。至少在圖形上更進一步,支持更多直接訪問底層硬件的操作,因為OpenGL或者Ios的圖形庫在手機芯片上跑,開銷始終太大以致增加了散熱難度,所以需要開放更多直接訪問。該框架的設(shè)計主要為了兩個目的:3D圖形渲染和并行運算。這也是平時圖形學上最常涉及的兩個東西,它們都是基于特殊的代碼在GPU上對大量的數(shù)據(jù)并行計算。
Metal相比OpenGL ES而言可以極大限度地的減少資源開銷。當使用OpenGL來創(chuàng)建一段緩存或者紋理,往往會產(chǎn)生一份備份以防GPU在使用這段數(shù)據(jù)時有其他的訪問。如果想要在確保數(shù)據(jù)安全的情況下拷貝緩存區(qū)或是紋理這樣的大資源,那么產(chǎn)生的消耗可想而知。而反觀Metal,就會發(fā)現(xiàn)它的處理方式更加簡單,開發(fā)者可以在CPU和GPU之間同步使用這些數(shù)據(jù)。
為此蘋果還提供了一個更為優(yōu)秀的接口使得這種同步訪問的情況變得更為容易:Grand Cnetral Dispatch(GCD技術(shù))。不過使用Metal同樣能做到這點,所謂先進的引擎就是能避免產(chǎn)生拷貝的情況下高效渲染那些需要加載或撤掉的資源。當然,大多數(shù)游戲開發(fā)者可能對深度的圖形接口不怎么感冒,不過不少主流引擎已經(jīng)開始青睞Metal,而開發(fā)者也將得益于在開發(fā)中不需要自己去創(chuàng)建API。此外,對那些游戲發(fā)燒友來說,Metal的出現(xiàn),會讓開發(fā)者們營造更加令人驚嘆的游戲畫面效果,同時運行也會更為流暢,對他們而言這無疑是一大利好。
結(jié)語
可能圖形接口知識看起來與我們相離甚遠,但它存在于我們的身邊卻如此真實。面對如今的圖形接口方案越來越多,若每個廠商都搞自己的硬件層API只會給開發(fā)者帶來麻煩。關(guān)于圖形接口,統(tǒng)一地進行更新?lián)Q代就最好不過了。