當前位置:
首頁 > 新聞 > GPU 加速是什麼

GPU 加速是什麼

雷鋒網按:本文作者 被單,原載於凹凸實驗室,雷鋒網獲授權轉載。

GPU 加速是什麼

眾所周知,網頁不僅應該被快速載入,同時還應該流暢運行,比如快速響應的交互,如絲般順滑的動畫……

一. GPU 加速能做什麼?

首先我們要了解什麼是 16ms 優化

  • 大多數設備的刷新頻率是 60 次/秒,(1000/60 = 16.6ms)也就說是瀏覽器對每一幀畫面的渲染工作要在 16ms 內完成,超出這個時間,頁面的渲染就會出現卡頓現象,影響用戶體驗。

  • 瀏覽器在一幀裡面,會依次執行以下這些動作。減少或者避免 layout,paint 可以讓頁面不卡頓,動畫效果更加流暢。

1. JavaScript:JavaScript 實現動畫效果,DOM 元素操作等。

2. Style(計算樣式):確定每個 DOM 元素應該應用什麼 CSS 規則。

3. Layout(布局):計算每個 DOM 元素在最終屏幕上顯示的大小和位置。由於 web 頁面的元素布局是相對的,所以其中任意一個元素的位置發生變化,都會聯動的引起其他元素髮生變化,這個過程叫 reflow。

4. Paint(繪製):在多個層上繪製 DOM 元素的的文字、顏色、圖像、邊框和陰影等。

5. Composite(渲染層合并):按照合理的順序合并圖層然後顯示到屏幕上。

利用 GPU 加速優先使用渲染層合并屬性,避免 layout,paint。

GPU 加速是什麼

從上圖可以看出,可以通過改變元素的 transform 實現移動,伸縮變換而非改變物體的 left,top,width,height 避免 layout,paint。讓動畫效果更加流暢。

GPU 加速是什麼

優化

GPU 加速是什麼

二. GPU 是什麼,如何用 Chrome devtools 進行分析 debug?

瀏覽器渲染一個頁面大致是按照下面這個步驟執行。


1. 獲取 DOM 並將其分割為多個層(RenderLayer)

2. 將每個層柵格化,並獨立的繪製進點陣圖中

3. 將這些點陣圖作為紋理上傳至 GPU

4. 複合多個層來生成最終的屏幕圖像(終極 layer )。

Chrome 開啟查看 renderlayer

GPU 加速是什麼

按上面的步驟之後,即可看到

GPU 加速是什麼

1. 黃色邊框:有動畫 3d 變換的元素,表示放到了一個新的複合層(composited layer)中渲染

2. 藍色的柵格:這些分塊可以看作是比層更低一級的單位,這些區域就是 RenderLayer打開一個頁面,如果該頁面的黃色邊框很多,那麼肯定要查看一下原因了

Chrome 查看 layer

  • 打開 timeline 進行錄製,選中 timeline 的某一幀,然後選擇下面的 layer ,可以左右拖動該模塊出現 3d。

    我們可以看到一個頁面實際是像下面一樣組成的

GPU 加速是什麼

  • 從上圖不難理解,雖然我們最終在瀏覽器上看到的只是一個複印版,即最終只有一個層。類似於PhotoShop軟體中的「圖層」概念,最後合并所有可視圖層,輸出一張圖片到屏幕上。但實際上一些dom會因為一些規則被提升成獨立的層(開啟 GPU 加速),一旦被獨立出來之後,便不會再影響其他dom的布局,因為它改變之後,只是「貼上」了頁面。

根據這個優點,我們可以把頁面中一些布局經常變換的dom(動畫)提升到獨立的層。那麼,瀏覽器在之後的 16ms 中,只需進行下面的幾個步驟。

三. 如何開啟 GPU 加速?

目前下面這些因素都會引起Chrome創建合成層:

1. 3D 或透視變換(perspective,transform) CSS 屬性

2. 使用加速視頻解碼的video元素

3. 擁有 3D (WebGL) 上下文或加速的 2D 上下文的 canvas 元素

4. 混合插件(如 Flash)

5. 對自己的 opacity 做 CSS 動畫或使用一個動畫 webkit 變換的元素

6. 擁有加速 CSS 過濾器的元素

7. 元素A有一個 z-index 比自己小的元素B,且元素B是一個合成層(換句話說就是該元素在複合層上面渲染),則元素A會提升為合成層。

上面7點都非常容易理解,在日常開發中,最容易出現問題的是第7點

四. GPU 加速隱藏的坑–隱式合成
  • 元素A有一個 z-index 比自己小的元素B,且元素B是一個合成層(換句話說就是該元素在複合層上面渲染)

拿實際項目舉個栗子,我們按照上面的步驟開啟 layer borders

GPU 加速是什麼

尚未給上圖右手添加高層級的 z-index 時,整個頁面在移動端打開後閃退。而添加了 z-index 之後,頁面正常顯示,不閃退了。仔細看上面的 gif ,僅僅改變了 z-index ,就會改變大批數量的層(黃色邊框)

為什麼 z-index 力量這麼大?

我們來看一個栗子,B 在做動畫,理所當然把B提到單獨的合成層。減少重繪。

GPU 加速是什麼

按照上圖,我們遇到一個邏輯問題,元素B應該在單獨的合成層上,並且屏幕的最終圖像應該在 GPU 上組成。但是A元素在B元素的頂部,我們沒有指定提升A元素自身層級的東西。那麼瀏覽器會做什麼?它將強製為元素A創建一個新的合成圖層。

這樣,A和B都被提升到單獨的複合層。

因此,使用 GPU 加速提升動畫性能時,最好給當前動畫元素增加一個高一點的 z-index 屬性,人為干擾複合層的排序,可以有效減少 Chrome 創建不必要的複合層,提升渲染性能。

注意:GPU 不僅需要發送渲染層圖像到 GPU ,而且還需存儲它們,以便稍後在動畫中重用。別盲目創建渲染層,一定要分析其實際性能表現。因為創建渲染層是有代價的,每創建一個新的渲染層,就意味著新的內存分配和更複雜的層的管理。對於使用移動設備的用戶來說是很坑的。移動設備沒有台式機那麼多的內存。過多的 GPU 加速會引起頁面卡頓甚至閃退。

找到 layers,點擊當前層,在右邊查看佔用的 memory(內存)

GPU 加速是什麼

GPU 加速是什麼

總結

整篇文章介紹了下面幾個部分


● GPU 加速能做什麼

● GPU 是什麼,如何用 Chrome devtools 進行分析 debug?

● 如何開啟 GPU 加速?

● GPU 加速隱藏的坑–隱式合成

參考:

http://www.jianshu.com/p/a32b890c29b1

http://div.io/topic/1348

雷鋒網相關閱讀:

黃仁勛親自撰文懟上 TPU:P40速度比你快 2 倍,帶寬是你的 10 倍

谷歌硬體工程師揭秘,TPU為何會比CPU、GPU快30倍?

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

歐洲央行:分布式賬本在歐元區還為時過早
5470元Nokia9發布日期曝光:搭配驍龍835+蔡司鏡頭
華為MateBook新品系列清晰大照曝光,或於5月23日發布
專訪Illumina公司CEO:中國基因檢測服務市場機會巨大,行業翹楚應聯手做這件事

TAG:雷鋒網 |

您可能感興趣

NVIDIA再次針對第二代TPU做回應強調GPU加速有更多元應用
淺談CPU,GPU,TPU,DPU,NPU,BPU
Atlas打造華為GPU 加速雲服務「硬實力」
都知道CPU 但GPU又是什麼鬼?
蘋果自主研發GPU噩耗:GPU比CPU難多了!
ARM公司公布CPU與GPU更新計劃——一切為了AI
CPUGPU顯示屏等硬體逐漸走上正軌,VR到底還缺什麼?
AMD GPU與Intel CPU粘在同一塊PCB上,就有了Kaby Lake-G
新5K iMac GPU性能有多強?AMD這麼說
谷歌說TPU比GPU更牛,Nvidia表示不服
聯發科中端殺器P30牛大了,不僅有CPU/GPU,還有VPU!
為什麼 TPU 運算速度比普通的 GPU、CPU 組合快 15-30 倍?
在座各位都是垃圾!ARM最新CPU/GPU曝光,性能炸裂
CPU和GPU雙低效,摩爾定律之後一萬倍——寫於TPU版AlphaGo重出江湖之際
Xilinx叫板Nvidia,FPGA在AI處理上比GPU更快速
IBM推出雲深度學習圖形晶元Tesla P100 GPU加速器
從CPU到GPU:AMD豪賭新款產品
AMD八代APU性能首曝:GPU提升巨大
拋棄PowerVR,蘋果九成自研GPU