畫面顯示不全
在開始探討上述問題之前,先來看下畫面顯示不全

(這張圖只是為了比較形象的表示畫面顯示不全)
? 在早期的圖像技術(shù)中,CPU將圖像處理成圖像數(shù)據(jù),并放到幀緩沖區(qū)中,然后由顯示控制器去顯示,但由于早期的CPU性能較差(或者比較差的CPU同時(shí)處理了太多的工作),CPU還未將一張完整的圖片處理完畢,圖像控制器便將數(shù)據(jù)拿走了,導(dǎo)致光柵掃描時(shí),前半部分有信號,而后半部分并沒有圖像信號,便造成了圖片顯示不全。
雙重緩存技術(shù)
? 為了解決上述的問題,便在單緩沖區(qū)的基礎(chǔ)上,再添加了一個(gè)相同的緩沖區(qū),這樣,在一個(gè)緩沖區(qū)接受由CPU處理的數(shù)據(jù)的時(shí)候,另一個(gè)緩沖區(qū)便將已經(jīng)存儲的數(shù)據(jù)交給顯示控制器,顯示控制器便會將這個(gè)數(shù)據(jù)顯示出去,這樣,當(dāng)CPU與圖像控制器協(xié)調(diào)一致的時(shí)候,就會顯示出完整的圖像了
? 在這之后,為了減輕CPU的壓力,便將圖像處理相關(guān)的模塊完全獨(dú)立出來,CPU僅負(fù)責(zé)核心數(shù)據(jù)的處理,獨(dú)立出的這個(gè)模塊便被用來專門處理圖像相關(guān),這個(gè)模塊便是GPU。
圖像撕裂


GPU出現(xiàn)后,CPU由于不再處理圖像相關(guān)的工作,壓力大幅度減少,而GPU處理圖片的專職工作,二者協(xié)調(diào),在加載簡單內(nèi)容的時(shí)候,往往顯得比較輕松。但加載比較復(fù)雜的內(nèi)容時(shí),新的問題便出現(xiàn)了,由于CPU與GPU并無法完全的協(xié)調(diào)一致,甚至CPU的性能會明顯高于GPU,這時(shí)候,CPU將下一幀(C幀)的圖像數(shù)據(jù)處理完畢,并移交給GPU,并向圖像控制器發(fā)送顯示信號,但GPU并未將當(dāng)前幀(B幀)的圖像處理(處理成數(shù)字信號)完畢,此時(shí),顯示器上正在顯示上一幀(A幀)的圖像,而圖像控制器直接拿走了這一幀(B幀)的圖像數(shù)據(jù),并進(jìn)行掃描顯示,便出現(xiàn)了部分屏幕顯示這一幀(B幀)其他部分顯示上一幀(A幀)圖像的情況,也就是圖像撕裂。
垂直同步
? 為了解決圖像撕裂的問題,就需要在GPU處理圖像數(shù)據(jù)的時(shí)候,給正在處理的幀緩沖區(qū)加上一個(gè)鎖,這個(gè)鎖用于保證GPU在處理時(shí),圖像顯示器無法拿走這個(gè)幀緩沖區(qū)的數(shù)據(jù),并等待處理完成,之后再拿走數(shù)據(jù)并顯示,簡單來講,就是給每個(gè)幀緩沖區(qū)增加了一個(gè)紅綠燈,紅燈等待,綠燈拿走,這個(gè)紅綠燈便是垂直同步信號,這項(xiàng)技術(shù)稱為垂直同步
掉幀
? 引入垂直同步后,圖像撕裂的問題也算解決了,但這種拆東墻補(bǔ)西墻的方式并沒有將顯示變得更好,在很多N卡的優(yōu)化教程里面,都是推薦關(guān)掉垂直同步的,在處理簡單的任務(wù)時(shí)還好,處理復(fù)雜的任務(wù)(尤其是游戲)的時(shí)候,便會引起掉幀的問題。

? CPU在渲染完下下一幀(D幀)的圖像后,由于此時(shí)GPU并未處理完這一幀(B幀),而顯示控制器收到信號,由于垂直同步的存在,顯示完上一幀(A幀)后便一直在等待這一幀(B幀)完成,而此時(shí)CPU的下下一幀(D幀)的數(shù)據(jù)就會覆蓋掉交換了幀緩沖區(qū)后存放著的下一幀(C幀)的數(shù)據(jù),就丟失了C幀。

? 所以在玩游戲(比如LOL)的時(shí)候,因?yàn)榫W(wǎng)絡(luò)的不穩(wěn)定,在某一個(gè)時(shí)刻,從服務(wù)器里面下載大量的圖像數(shù)據(jù),此時(shí)CPU處理得過來,但是GPU處理不過來的時(shí)候,就會產(chǎn)生
掉幀的情況,而不開垂直同步的時(shí)候人物就會'漂移'甚至出現(xiàn)多個(gè)人物。
? 綜上所述,掉幀的根本原因是CPU與GPU的工作不協(xié)調(diào)所致。
三重緩存
? 為了解決這個(gè)問題,部分廠商將二重緩存拓展為三重緩存,在多了一個(gè)幀緩存的情況下,掉幀的情況有所緩解,但也只是稍微緩解,根本原因還是CPU和GPU的不協(xié)調(diào)所致。