Mali GPU : Abstract Machine Part 1 - Frame Pipelining 2019-11-24

https://community.arm.com/developer/tools-software/graphics/b/blog/posts/the-mali-gpu-an-abstract-machine-part-1---frame-pipelining

Render機(jī)制概述

要分析AP的graphics performance榜轿,需要了解OGL ES API的模型,觀察其行為進(jìn)行推測(cè)碴里。
下面是這個(gè)機(jī)制的3個(gè)有用的部分:

  1. CPU-GPU rendering pipeline
  2. Tile-based rendering
  3. Shader core architecture

Synchronous API, Asynchronous Execution

很重要的基礎(chǔ)是何乎,了解AP調(diào)用的OGLES API需要執(zhí)行的render操作较屿。AP執(zhí)行一系列func calls最爬,以設(shè)置下一個(gè)draw task所需的state凫岖,然后調(diào)用glDrawxxx來(lái)觸發(fā)一次真正的draw operation. 由于API是synchronous同步的,就會(huì)感覺(jué)后續(xù)的render操作都是立即發(fā)生的返咱,其實(shí)不是這樣钥庇,這是driver造成的錯(cuò)覺(jué)。

與draw calls類(lèi)型咖摹,第二個(gè)錯(cuò)覺(jué)來(lái)自driver的end-of-frame buffer flip评姨。
我們知道用eglSwapBuffer來(lái)swap front and back-buffer,這也是driver造成的同步假象萤晴,實(shí)際硬件的buffer swap都在很長(zhǎng)時(shí)間以后發(fā)生吐句。

Pipelining

這么做是為了performance。
如果我們強(qiáng)制把render做同步店读,就可能發(fā)生:

  • GPU idle嗦枢,但CPU忙于為下一個(gè)draw創(chuàng)建state
  • CPU idle,但GPU在渲染

這不利于performance两入,所有的idle都不該有净宵。


GLES sync

為了去除idle,GLES driver維護(hù)了synchronous rendering的假象裹纳,實(shí)際底層render和frame swaps 是異步的(asynchronously under the hood)择葡。通過(guò)async可以建立一個(gè)小backlog of work,允許創(chuàng)建一個(gè)pipeline:GPU處理一個(gè)pipeline尾的older workloads剃氧,而CPU向另一個(gè) push new work敏储。這樣就可以時(shí)pipeline一直是full的,GPU總有工作可以做朋鞍,以提高performance已添。

GLES async

Mali GPU pipeline的units根據(jù)per rendertarget basis來(lái)schedule,render target可能是window surface或者是off-screen render buffer滥酥。一個(gè)render target被處理為兩個(gè)步驟:

  1. GPU處理所有render target的draw calls的vertex shading更舞,
  2. 處理整個(gè)render target的fragment shading
GLES mali

可以看到,CPU處理比較快坎吻,Geometry就是頂點(diǎn)著色階段缆蝉,F(xiàn)ragment就是Pixel著色,時(shí)間最長(zhǎng)瘦真。

Pipeline Throttling

圖中可以看到刊头,fragment work是3個(gè)操作里面最慢的,它愈發(fā)落后于CPU處理和geometry stages诸尽。
這種延遲是用戶受不了的原杂,不該因fragment stage而使backlog of work過(guò)大。所以需要機(jī)制周期性的降低CPU thread的速度您机,當(dāng)pipeline full時(shí)不再enqueue穿肄,

這種throttling mechanism節(jié)流機(jī)制一般由host windowing system處理年局,而不是graphic driver。
比如被碗,adnroid上某宪,在指定buffer的orientation前,我們不能做任何draw操作锐朴,因?yàn)閡ser可能會(huì)rotate device,change frame size兴喂。Surfaceflinger, Android的window surface manager,就會(huì)控制pipeline depeth: 在排隊(duì)等待render的queue如果超過(guò)了N個(gè)buffer焚志,就不再給AP的graphics stack返回buffer.

只要達(dá)到N衣迷,CPU就會(huì)idle,阻塞在EGL或者OGLES API func酱酬,直到display consume pending buffer壶谒,釋放一個(gè)新buffer去做render。

這種機(jī)制下膳沽,如果graphics stack跑的比顯示的刷新率塊汗菜,就也會(huì)劍指pipeline buffering。
這個(gè)圖里挑社,vsync limited陨界,等待vertical blank signal,他用來(lái)告訴display controller何時(shí)switch to next front-buffer痛阻。如果GPU處理frame比display顯示的速度快菌瘪,那SF就會(huì)積攢大量早已render好的buffer,等待顯示阱当。

GLES mali vsync

如圖俏扩,vsync limited,這時(shí)CPU和GPU會(huì)周期性的idel弊添。
然后DVFS(dynamic voltage and frequency scaling)就會(huì)試圖降低工作頻率從而降低電壓和功耗录淡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市油坝,隨后出現(xiàn)的幾起案子嫉戚,更是在濱河造成了極大的恐慌,老刑警劉巖免钻,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彼水,死亡現(xiàn)場(chǎng)離奇詭異崔拥,居然都是意外死亡极舔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)链瓦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拆魏,“玉大人盯桦,你說(shuō)我怎么就攤上這事〔橙校” “怎么了拥峦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)卖子。 經(jīng)常有香客問(wèn)我略号,道長(zhǎng),這世上最難降的妖魔是什么洋闽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任玄柠,我火速辦了婚禮,結(jié)果婚禮上诫舅,老公的妹妹穿的比我還像新娘羽利。我一直安慰自己,他們只是感情好刊懈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布这弧。 她就那樣靜靜地躺著,像睡著了一般虚汛。 火紅的嫁衣襯著肌膚如雪匾浪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天泽疆,我揣著相機(jī)與錄音户矢,去河邊找鬼。 笑死殉疼,一個(gè)胖子當(dāng)著我的面吹牛梯浪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓢娜,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼挂洛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了眠砾?” 一聲冷哼從身側(cè)響起虏劲,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎褒颈,沒(méi)想到半個(gè)月后柒巫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谷丸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年堡掏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刨疼。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泉唁,死狀恐怖鹅龄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亭畜,我是刑警寧澤扮休,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拴鸵,受9級(jí)特大地震影響玷坠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劲藐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一侨糟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘩燥,春花似錦秕重、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至服鹅,卻和暖如春凳兵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背企软。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工庐扫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仗哨。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓形庭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親厌漂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萨醒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容