畫面顯示不全
在開始探討上述問題之前,先來看下畫面顯示不全
(這張圖只是為了比較形象的表示畫面顯示不全
)
? 在早期的圖像技術(shù)中嘀粱,CPU將圖像處理成圖像數(shù)據(jù)矾瘾,并放到幀緩沖區(qū)中亚再,然后由顯示控制器去顯示勉盅,但由于早期的CPU性能較差(或者比較差的CPU同時處理了太多的工作)强胰,CPU還未將一張完整的圖片處理完畢翘簇,圖像控制器便將數(shù)據(jù)拿走了缠沈,導致光柵掃描
時摩渺,前半部分有信號简烤,而后半部分并沒有圖像信號,便造成了圖片顯示不全
摇幻。
雙重緩存
技術(shù)
? 為了解決上述的問題横侦,便在單緩沖區(qū)的基礎(chǔ)上挥萌,再添加了一個相同的緩沖區(qū),這樣枉侧,在一個緩沖區(qū)接受由CPU處理的數(shù)據(jù)的時候引瀑,另一個緩沖區(qū)便將已經(jīng)存儲的數(shù)據(jù)交給顯示控制器,顯示控制器便會將這個數(shù)據(jù)顯示出去榨馁,這樣憨栽,當CPU與圖像控制器協(xié)調(diào)一致的時候,就會顯示出完整的圖像了
? 在這之后翼虫,為了減輕CPU的壓力屑柔,便將圖像處理相關(guān)的模塊完全獨立出來,CPU僅負責核心數(shù)據(jù)的處理珍剑,獨立出的這個模塊便被用來專門處理圖像相關(guān)掸宛,這個模塊便是GPU
。
圖像撕裂
GPU出現(xiàn)后招拙,CPU由于不再處理圖像相關(guān)的工作唧瘾,壓力大幅度減少,而GPU處理圖片的專職工作迫像,二者協(xié)調(diào)劈愚,在加載簡單內(nèi)容的時候瞳遍,往往顯得比較輕松闻妓。但加載比較復雜的內(nèi)容時,新的問題便出現(xiàn)了掠械,由于CPU與GPU并無法完全的協(xié)調(diào)一致由缆,甚至CPU的性能會明顯高于GPU,這時候猾蒂,CPU將下一幀(C幀)的圖像數(shù)據(jù)處理完畢均唉,并移交給GPU,并向圖像控制器發(fā)送顯示信號肚菠,但GPU并未將當前幀(B幀)的圖像處理(處理成數(shù)字信號)完畢舔箭,此時,顯示器上正在顯示上一幀(A幀)的圖像蚊逢,而圖像控制器直接拿走了這一幀(B幀)的圖像數(shù)據(jù)层扶,并進行掃描顯示,便出現(xiàn)了部分屏幕顯示這一幀(B幀)其他部分顯示上一幀(A幀)圖像的情況烙荷,也就是圖像撕裂
镜会。
垂直同步
? 為了解決圖像撕裂
的問題,就需要在GPU處理圖像數(shù)據(jù)的時候终抽,給正在處理的幀緩沖區(qū)加上一個鎖戳表,這個鎖用于保證GPU在處理時桶至,圖像顯示器無法拿走這個幀緩沖區(qū)的數(shù)據(jù),并等待處理完成匾旭,之后再拿走數(shù)據(jù)并顯示镣屹,簡單來講,就是給每個幀緩沖區(qū)增加了一個紅綠燈季率,紅燈等待野瘦,綠燈拿走,這個紅綠燈便是垂直同步信號
飒泻,這項技術(shù)稱為垂直同步
掉幀
? 引入垂直同步后鞭光,圖像撕裂
的問題也算解決了,但這種拆東墻補西墻的方式并沒有將顯示變得更好泞遗,在很多N卡的優(yōu)化教程里面惰许,都是推薦關(guān)掉垂直同步
的,在處理簡單的任務時還好史辙,處理復雜的任務(尤其是游戲)的時候汹买,便會引起掉幀
的問題。
? CPU在渲染完下下一幀(D幀)的圖像后聊倔,由于此時GPU并未處理完這一幀(B幀)晦毙,而顯示控制器收到信號,由于垂直同步的存在耙蔑,顯示完上一幀(A幀)后便一直在等待這一幀(B幀)完成见妒,而此時CPU的下下一幀(D幀)的數(shù)據(jù)就會覆蓋掉交換了幀緩沖區(qū)后存放著的下一幀(C幀)的數(shù)據(jù),就丟失了C幀甸陌。
? 所以在玩游戲(比如LOL)的時候须揣,因為網(wǎng)絡(luò)的不穩(wěn)定,在某一個時刻钱豁,從服務器里面下載大量的圖像數(shù)據(jù)耻卡,此時CPU處理得過來,但是GPU處理不過來的時候牲尺,就會產(chǎn)生
掉幀
的情況卵酪,而不開垂直同步
的時候人物就會'漂移'甚至出現(xiàn)多個人物。
? 綜上所述谤碳,掉幀
的根本原因是CPU與GPU的工作不協(xié)調(diào)所致溃卡。
三重緩存
? 為了解決這個問題,部分廠商將二重緩存拓展為三重緩存估蹄,在多了一個幀緩存的情況下塑煎,掉幀
的情況有所緩解,但也只是稍微緩解臭蚁,根本原因還是CPU和GPU的不協(xié)調(diào)所致最铁。