GPU的作用及工作原理
在上一篇文章《什么是GPU?GPU有什么用?》曾提及可編程著色器,可編程著色器對(duì)于 3D 游戲的設(shè)計(jì)者來(lái)說(shuō)可謂有巨大的優(yōu)點(diǎn),不過(guò)同時(shí)也給 GPU 工程師帶來(lái)了一些和 CPU 類似的有趣的問(wèn)題。因需要發(fā)送指令(instruction)運(yùn)行,解碼(decode)和執(zhí)行指令(execute)過(guò)程必不可少,而著色器代碼中判斷語(yǔ)句和循環(huán)語(yǔ)句也會(huì)引起執(zhí)行次序的小問(wèn)題等等。這意味著著色器核心已經(jīng)能成為一個(gè)小型的計(jì)算引擎去執(zhí)行任何的編程任務(wù),盡管不如 CPU 那么靈活多變,但也能執(zhí)行有用的、非圖形相關(guān)的任務(wù)。
本文引用地址:http://www.ex-cimer.com/article/201710/366418.htmGPU 計(jì)算
而現(xiàn)在利用 GPU 計(jì)算的任務(wù)基本都是高度并行的——同時(shí)執(zhí)行大量小型的數(shù)學(xué)計(jì)算,所以當(dāng)前其發(fā)展方向是機(jī)器學(xué)習(xí)(machine learning)和計(jì)算機(jī)視覺(jué)(computer vision)。隨著 GPU 計(jì)算擴(kuò)展的領(lǐng)域越來(lái)越大,作用也會(huì)隨著越發(fā)重要,它就能成為和 CPU 并排的伙伴而不再是 CPU 附屬的一個(gè)部件。
在 2015 年 10 月 ARM 發(fā)布最新的 SoC 時(shí)順帶還有 CoreLink CCI-550,它的作用就是將 CPU、GPU、主存儲(chǔ)器和各種內(nèi)存緩沖區(qū)連接在一起。新的 GPU 代號(hào)為 Mimir,能夠從高速緩存內(nèi)存里直接獲取數(shù)據(jù),甚至在 CPU 執(zhí)行變動(dòng)時(shí),GPU 無(wú)需通過(guò)主存儲(chǔ)器就能獲得和 CPU 一樣的數(shù)據(jù)。CCI-550 也允許 CPU 和 GPU 共享相同的內(nèi)存,無(wú)需在 CPU 和 GPU 的緩沖區(qū)之間復(fù)制數(shù)據(jù)。
統(tǒng)一著色器(Unified shaders)和 Vulkan
OpenGL ES 3.0(或相近的 DirectX 版本) 對(duì)比 OpenGL ES 2.0 最大的變化就是統(tǒng)一著色器。查看 Mali-470 的模型圖,就能發(fā)現(xiàn)兼容 OpenGL ES 2.0 的 GPU 有兩種類型的著色器,分別稱作“頂點(diǎn)(Vertex Processor)”和“片段(Fragment Processor)”,就是之前介紹過(guò)的頂點(diǎn)著色器和片段著色器。Mali-470 有 1 個(gè)頂點(diǎn)著色器和 4 個(gè)片段著色器,而查看 Mali-T860 的模型圖就會(huì)發(fā)現(xiàn)它支持 16 個(gè)能作為頂點(diǎn)著色器或片段著色器的統(tǒng)一著色器,此前著色器可能會(huì)空閑的情況被消除了。
2016 年 2 月發(fā)布的 3D 圖形 API——Vulkan 是另一個(gè)重點(diǎn),它帶來(lái)了兩個(gè)重要的創(chuàng)新。一是通過(guò)降低驅(qū)動(dòng)程序的消耗和提高 CPU 多線程使用率,帶來(lái)顯著的性能提升;二是為桌面系統(tǒng)、移動(dòng)系統(tǒng)和控制臺(tái)提供了一個(gè)統(tǒng)一的 API。Vulkan 現(xiàn)支持 Windows 7/8/10、SteamOS、Android 和部分 Linux 發(fā)行版,首款支持 Vulkan 的 Android 機(jī)器是三星的 Galaxy S7。
電源問(wèn)題
不同于 PC 上的顯卡,它們擁有大的風(fēng)扇、復(fù)雜的冷卻系統(tǒng),部分有需要的還會(huì)直接供電,智能手機(jī)和平板上的 GPU 體積無(wú)法和這些顯卡相比。加上智能手機(jī)的 GPU 由電池供電,所以與桌面級(jí)的顯卡相比,這些移動(dòng)版的 GPU 不能大量的消耗能源,更要控制熱量的散發(fā)。然而作為消費(fèi)者的我們肯定是希望它能有更強(qiáng)的圖形性能,所以對(duì)于移動(dòng)版 GPU 工程師來(lái)說(shuō),最大的挑戰(zhàn)不是支持最新的 3D API,而是更高的圖形性能與發(fā)熱、能耗之間如何達(dá)到一個(gè)平衡。
總結(jié)
回顧一下這次兩篇文章的重點(diǎn):移動(dòng) 3D 圖形基于三角形,模型進(jìn)行移動(dòng)、縮放是對(duì)三角形的頂點(diǎn)進(jìn)行處理;GPU 里面的可編程執(zhí)行單元被稱為著色器核心,游戲開(kāi)發(fā)者可以編寫基于著色器核心的代碼;頂點(diǎn)著色器處理完后,交由片段著色器轉(zhuǎn)換為一個(gè)個(gè)像素,最終送到像素著色器設(shè)置顏色;3D 游戲開(kāi)發(fā)者可以根據(jù)需要編程自由調(diào)用頂點(diǎn)著色器和片段著色器;GPU 并行處理的特性讓其非常適合用于機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺(jué)。
評(píng)論