科個普:處理器是如何工作的?
處理器是整個電腦的核心,不過這個核心是如何工作的,它們除了頻率還有什么差異?這些問題恐怕在很多評測中也少有提及,處理器的運算能力究竟是因何而生。今天,智趣東西就和大家分享一些關于處理器是如何計算的,它們又是如何工作的。

處理器其實是縮寫,全稱為Central Processing Unit,即中央處理器,它的功能作用就是“翻譯”電腦的指令,并且處理計算機中軟件生成的數(shù)據(jù),并得到結果。所謂的電腦可編程性,其實主要就是指處理器的編程能力。在上世紀70年代之前,處理器其實是由多個獨立單元構成的,而不是像今天這樣一顆芯片。當集成電路普及應用后,元件大幅度“微縮”到一起,這就是所謂的“微處理器”由來。

現(xiàn)代處理器的“核心”
這里提及的“核心”不是現(xiàn)今通常意義上的核心,而是處理器的主要組成部分:控制單元、整數(shù)邏輯單元、浮點運算器。任何一款處理器,實際上都離不開這三個單元,無論處理器的框架設計如何變化,增加多少技術,這三個基本構成是不會改變的。

那么,這三個構成處理器的基本單元究竟都有什么作用呢?控制單元,簡稱CU,是Control unit的縮寫,它的作用其實可以被看做是一個“協(xié)調者”,負責協(xié)調指令的執(zhí)行。諸如寄存器、算術邏輯單元、指令寄存器、總線、甚至包括處理器外部的輸入輸出,都要依靠控制單元的協(xié)調管理。

當有需要執(zhí)行的命令“發(fā)送到”處理器,第一個“接收者”就是控制單元,由其分配工作給不同的單元,例如整數(shù)邏輯單元、浮點運算器等等。
整數(shù)邏輯單元又是做什么的呢?整數(shù)邏輯單元,簡稱ALU,是Arithmetic logic unit的縮寫,一如其名,它的作用就是進行算術、邏輯計算的。簡單點理解,例如加法、減法等等計算工作,都是由整數(shù)邏輯單元來完成的。到實際的應用層面,例如我們的壓縮、解壓縮文件、計算機進程的調度,編譯器語法分析、游戲的AI處理……諸如此類的計算工作,都是由整數(shù)邏輯單元負責。
至于浮點運算器,它的簡稱為FPU,是Floating point unit的縮寫,浮點運算單元主要影響處理器的科學計算性能,如流體力學,量子力學等,而更貼近我們日常能見到的應用就是多媒體相關的應用,如音視頻的編解碼,圖像處理等操作。

一般針對處理器的評測中,像AIDA 64、Super Pi、wPrime,F(xiàn)ritz Chess Benchmark、GeekBench、WinRAR、7-zip、處理器 Passmark等等軟件,都是盡力在“挖掘”處理器的浮點、整數(shù)運算性能,用它來衡量處理器的性能優(yōu)劣。

處理器對游戲的影響
我們直接了當一點,游戲是首當其沖考驗電腦性能的一個“法寶”,而且,不止是顯卡,處理器時至今日都對游戲性能高低有著決定性的作用。首先,處理器承擔著電腦的任務進程分配,如果游戲的優(yōu)化不好,會進行頻繁的進程調用申請,這樣極度消耗處理器的資源。而且,現(xiàn)在的游戲引擎不僅僅要針對畫面優(yōu)化,在AI方面同樣是游戲引擎的重要方向。舉個例子,游戲中的NPC(non-player character,電腦控制的游戲角色或者事物)要做什么、會做什么,會有什么樣的行為,這些,現(xiàn)在都是依靠AI計算獲得的。而AI計算的主力,并非是顯卡,而是處理器。

此外,可能大家不太了解的事情是,目前游戲的反盜版機制,在游戲的運行過程中,會頻繁的加密、驗證,這些都會消耗浮點運算性能,也就是處理器的性能。所以這也是為什么較老規(guī)格的電腦會在運行游戲時幀率不高的原因,即便它擁有一塊性能不錯的顯卡,也無濟于事。
顯然,處理器無論是整數(shù)運算還是浮點運算,都是必不可少的計算單元,輔以控制器的調度,才能形成一個完整的計算。無論處理器的架構如何變化,這些基本的概念依舊存在,而且,隨著應用的發(fā)展變化,浮點運算的能力強弱,甚至一度決定了處理器的評價——要知道,早期的處理器,浮點運算單元甚至都不包含在內,而是以單獨的“協(xié)處理芯片”方式存在。
浮點運算的重要性
雖然芯片都是邏輯電路,但是早期的處理器還是很簡陋的,浮點計算單元以協(xié)處理器的形式存在(FPU),一臺沒有浮點處理能力的電腦性能極差,但是限于當時的技術能力,還做不到一顆處理器就擁有浮點計算能力的程度。例如Intel在生產(chǎn)8086、8088 處理器的同時,還推出了一款8087協(xié)處理器產(chǎn)品。這種情況一直持續(xù)到80486DX 處理器上,才第一次集成了浮點計算單元。

現(xiàn)在的處理器,不僅僅是擁有浮點運算單元那么簡單,還通過SIMD技術實現(xiàn)了并行計算。所謂SIMD,即Single Instruction Multiple Data單指令多數(shù)據(jù)流,單指令流多數(shù)據(jù)流技術其實是一個控制器控制多個平行的處理微元,例如Intel的MMX或SSE,以及AMD的3D Now!指令集,都屬于SIMD范疇。當你使用處理器-Z這類軟件查看處理器信息時,你會看到很多指令集,例如MMX、3DNow!、SSE~SSE4.1、AVX等等,這些都是屬于SIMD范疇的。

正是因為浮點運算的存在,讓我們的電腦在應用中表現(xiàn)愈發(fā)出色,而且不止是處理器,顯卡的浮點運算能力更是突出,甚至遠超處理器。但是這又引來另一個問題,既然顯卡的浮點運算能力這么強大,為何處理器還要保留浮點運算呢?這里就要提到一個失敗的例子了。2011年AMD發(fā)布了一個全新的處理器架構推土機架構(Bulldozer),它最大的特點是放棄了通常意義上一個核心中,擁有一整套整數(shù)邏輯單元+浮點運算單元的組合方式,改成了兩個核心共享一個浮點運算單元的方式,然后,將自家優(yōu)秀的顯卡核心集成到處理器中,以期用顯卡的強悍浮點性能,最終增強整體的性能表現(xiàn)。然而,這個框架極為失敗,也讓AMD精力了絕無僅有的“暗淡時光”,處理器性能孱弱的地步令人發(fā)指——這和其奇思妙想的兩核心共用一套浮點運算單元有離不開的關系。

而且,顯卡的浮點性能強大是相對的,處理器的浮點運算能力比不過顯卡也是有原因的——顯卡更擅長大規(guī)模并行計算,舉個簡單的例子,如果說處理器的浮點計算是幾個數(shù)學家在解高階方程式,那么顯卡的浮點運算就是一群學生在做加減乘除的基礎運算,更注重規(guī)模效應。

處理器計算還需要這些
計算好或者待計算的數(shù)據(jù),究竟如何“輸入、輸出”呢?這就需要用到寄存器了。它實際是一個用來存儲輸出數(shù)據(jù)的單元,而且它是一個中間數(shù)據(jù)的“轉存站”。它擁有有限存貯容量的高速存貯部件,它們可用來暫存指令、數(shù)據(jù)和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計數(shù)器(PC)。在中央處理器的算術及邏輯部件中,包含的寄存器有累加器(ACC)。
這些數(shù)據(jù)通過寄存器之后按理應該是輸出到內存中的,但實際上,因為速度之間的差異過大,不得不進一步“緩沖”一下,這便有了緩存的存在。緩存英文為Cache,全稱是高速緩沖存儲器,它是處理器與主內存間的一種容量較小但速度很高的存儲器。由于處理器的速度遠高于主內存,處理器直接從內存中存取數(shù)據(jù)要等待一定時間周期,緩存中保存著處理器剛用過或循環(huán)使用的一部分數(shù)據(jù),當處理器再次使用該部分數(shù)據(jù)時可從緩存中直接調用,這樣就減少了處理器的等待時間,提高了系統(tǒng)效率。

當處理器需要調用數(shù)據(jù)的時候,它會先到緩存中去尋找,如果數(shù)據(jù)因之前的操作已經(jīng)讀取而被暫存其中,就不需要再從隨機存取存儲器中讀取數(shù)據(jù)——由于處理器的運行速度一般比主內存的讀取速度快,主存儲器周期(訪問主存儲器所需要的時間)為數(shù)個時鐘周期。因此若要訪問主內存的話,就必須等待數(shù)個處理器周期從而造成浪費。

提供“緩存”的目的是為了讓數(shù)據(jù)訪問的速度適應處理器的處理速度,其基于的原理是內存中“程序執(zhí)行與數(shù)據(jù)訪問的局域性行為”,即一定程序執(zhí)行時間和空間內,被訪問的代碼集中于一部分。為了充分發(fā)揮緩存的作用,不僅依靠“暫存剛剛訪問過的數(shù)據(jù)”,還要使用硬件實現(xiàn)的指令預測與數(shù)據(jù)預取技術——盡可能把將要使用的數(shù)據(jù)預先從內存中取到緩存里。

為了進一步提高性能,緩存被分成指令和數(shù)據(jù)分區(qū)兩個部分,而且還會分級,即我們常常講到的處理器一、二、三級緩存。尤其是多核心時代,一級緩存幾乎是各個處理器核心的專用緩存,二次級緩存則是多核心共享的結構,用以進一步提高性能。

時鐘頻率
時鐘頻率,英文Clock rate,意即同步電路中時鐘的基礎頻率,它以“每秒時鐘周期”(Clock cycles per second)來度量,量度單位采用Hz。

這個處理器的時鐘頻率通常是由晶體振蕩器的頻率決定的。在一個時鐘脈沖后,處理器的信號線需要時間穩(wěn)定它的新狀態(tài)。如果上一個脈沖的信號還沒有處理完成,而下一個時鐘脈沖來的太快(在所有信號線完成從0到1或者從1到0的轉換前),就會產(chǎn)生錯誤的結果。芯片制造商制定了“最高時鐘頻率”的規(guī)范,并且在出售芯片之前對它們進行測試確保它們符合“最高時鐘頻率”的規(guī)范。測試將執(zhí)行最復雜的指令,處理最復雜的數(shù)據(jù)模型確定使用的最長處理時間(測試在最合適的電壓和穩(wěn)定保證處理器在最低性能下運行),保證最高時鐘頻率時不會發(fā)生沖突。
因此,早年間時鐘頻率幾乎是唯一評判處理器性能的依據(jù),例如1990年代,大多數(shù)電腦的性能如何判斷快慢,主要就依靠處理器頻率,100MHz就是比90MHz的處理器性能快。時至今日它依然是判斷處理器性能的重要標準之一,但不是唯一了。
多核心
讓更多的核心參與到計算中來用以提高系統(tǒng)性能,是近年來處理器的“標準配置”,單核心處理器早已走入歷史舞臺。多核心處理器的開端其實要追溯到2000年,當時IBM發(fā)布了Power4處理器,這是世界上第一個雙核心處理器產(chǎn)品。由于多核心處理器具有高主頻、設計和驗證周期短、控制邏輯簡單、擴展性好、易于實現(xiàn)、功耗低和通信延遲低等優(yōu)點,因此它得以迅速成為處理器“標配”。此外,多核心處理器還能充分利用不同應用的指令級并行和線程級并行,具有較高線程級并行性的應用可以很好地利用這種結構來提高性能。

但是,如何發(fā)揮多核心處理器的性能,還需要軟件優(yōu)化,比如有些應用可以最大限度調度所有處理器核心參與到計算中,而部分應用只會調用到4至6個核心,所以,單一核心的絕對性能依舊是當前最重要的。

超線程
然而這還不夠,如何讓每一份電力供應都能轉換為性能,讓處理器的工作盡可能“滿坑滿谷”,提高執(zhí)行效率一直是人們的追求。一般來說,單個時間單位內,一個處理器核心一次只能執(zhí)行個線程的工作。如果想并行工作,提升效率,似乎只能是使用更多的核心。這樣一來效率并不是很高,如何進一步“壓榨”處理器呢?那就要使用超線程技術了。超線程技術說簡單一些,就是在單位時間內,一個核心可以處理兩個線程的工作,單核心模擬雙核心執(zhí)行雙線程運作,用以提升執(zhí)行效率。

Intel在奔騰處理器上就開始引入超標量、亂序執(zhí)行、大量的寄存器及寄存器重命名、多指令解碼器、預測執(zhí)行等特性,這些特性的原理是讓處理器擁有大量資源,并可以預先執(zhí)行及平行執(zhí)行指令,以增加指令執(zhí)行效率,可是在現(xiàn)實中這些資源經(jīng)常閑置。為了盡可能的利用處理器資源,于是在現(xiàn)有單核心的基礎上,只增加必要的資源,讓閑置的處理器核心資源模擬第二個線程,這就是超線程的由來。這個必要的資源其實非常少,只是在一個核心內增加一個邏輯處理器單元,而整數(shù)邏輯單元、浮點運算器、緩存依舊共享同一個核心資源。

處理器性能的第一要素
衡量處理器性能究竟是看主頻還是看核心?都不是,而是一個計算公式——CPU性能=IPC×頻率。IPC即Instruction Per Clock,意為每周期指令。這個指標是衡量處理器性能最直觀的體現(xiàn),它是指每個時鐘周期執(zhí)行的平均指令數(shù)。

處理器在執(zhí)行指令的時候,一共分為三個步驟,即“獲取指令(Fetch)”、“譯碼(Decode)”和“指令執(zhí)行(Execute)”。大致的工作原理是這樣的,在獲取指令階段,處理器的寄存器中找到對應的指令地址,然后根據(jù)指令地址從內存中把具體的指令加載到寄存器中,并準備未來執(zhí)行下一條指令;剛剛加載到寄存器中的指令這個時候會由處理器控制單元進行的解析,“翻譯”成對應的操作執(zhí)行,然后確定要操作哪些寄存器、數(shù)據(jù)或者內存地址,用以后續(xù)執(zhí)行操作;到了指令執(zhí)行階段,這些操作會指派給整數(shù)邏輯單元操作。這樣一個“三部曲”的操作流程,電腦完成運行代碼所需的機器級指令的數(shù)量,在同一個時鐘周期內,能夠執(zhí)行多少次“三部曲”就是IPC的意義所在。此時,處理器的性能判斷也就有了依據(jù),用這個IPC數(shù)乘以×頻率就可以得到處理器的性能。例如,同樣是4GHz兩個的處理器,其中一個的IPC性能提升了15%,則整體性能要比另一個提升15%。我們都知道處理器的制程工藝很大程度上決定著性能,主要作用就是在盡可能小的體積下容納更多的積體電路,通過更多的積體電路來提升IPC性能;同時在更先進的制程工藝下,可以控制功耗的同時,穩(wěn)定處理器的高頻運作。所以,處理器的性能實際上要綜合來看,而不是單純的依靠頻率、核心數(shù)量來確定它的性能。

處理器的異構崛起?
處理器增強性能的方法其實不止提升IPC性能,例如我們之前也提到過的緩存,如果能夠增加緩存自然也能提升性能——數(shù)據(jù)交互能力越強,處理器的處理效率就越高。例如,AMD的銳龍7 5800X3D處理器就是這樣來提升性能的。這里就要提到一個名為3D V-Cache堆疊緩存的技術了。
簡單說,在原有Zen3架構的基礎上,為每個CCD計算芯片上堆疊64MB SRAM作為額外的三級緩存,加上原本就有的32B,合計達96MB。之所以采用這個3D V-Cache堆疊緩存技術,是為了在最小的成本提升情況下,進一步擴展緩存容量,通過垂直堆疊(可以簡單理解為在芯片內部堆疊到處理器核心之上,但并不是在處理器核心之中,這樣有助于控制成本)這樣的方式提升處理器的數(shù)據(jù)緩存交互能力。

經(jīng)過這樣一個“簡單”的設計,銳龍7 5800X3D對比銳龍9 5900X在1080p高畫質下游戲幀率平均提升15%左右,例如《看門狗》最高達到了40%;《Far Cry 6》、《戰(zhàn)爭機器5》、《最終幻想14》等則可以提升20%的性能。顯然, 擴大緩存帶來的性能提升,一點也不亞于提升IPC效率——其實,電腦經(jīng)過這么多年的發(fā)展,數(shù)據(jù)瓶頸問題一直存在,這也是制約系統(tǒng)性能的一個重要癥結,甚至要比優(yōu)化處理器的計算能力重要。
除了AMD,Intel也對處理器的設計上有著另一個思路——異構設計,這無疑是借鑒了ARM架構處理器的特點。例如將12代、13代酷睿處理器核心分為性能核心和能效核心。那么,他們的結構區(qū)別在哪里呢?先說說這個 能效核心。能效核心的最顯著特點就是后端執(zhí)行能力增強,尤其是整數(shù)邏輯單元的計算能力(浮點運算部分也有一定提升),而功耗也能被控制在一個合理的范圍區(qū)間,這也是一直以來能效核心的主要特點——這些所謂的能效核心,其實就是由著名的Atom系列處理器發(fā)展而來。而在性能核心上,Intel著重加強了IPC性能,相比于11代酷睿處理器的核心,有多達19%的提升,其中浮點性能刻意加強,當然代價就是功耗增高。不過由于有了大小核心的異構設計,實際的功耗可以得到很好的平衡——在任務調度協(xié)調上,控制單元起到了關鍵性作用。想不到吧,處理器時至今日,無論核心如何變化,大框架實際沒有什么改變。

處理器的技術名詞越來越多,但是總體的框架設計依舊是“原來的樣子”,很長時間內這一點都無可改變的——如果有變更的那一天,必然是電腦產(chǎn)業(yè)界翻天覆地的變化,所有的體系都將改變。而且,隨著技術的發(fā)展,我們將會看到更多諸如3D V-Cache堆疊緩存、大小核心設計等等“出圈”的處理器設計“思路”——在現(xiàn)有技術條件下,僅僅依靠制程工藝增加積體電路增強性能、控制功耗的方法越加困難,制程工藝正在走向“死胡同”,唯有“挖空心思”在其他方面進行優(yōu)化設計、尤其在數(shù)據(jù)傳輸瓶頸上多下功夫,才有機會進一步提升處理器的計算能力,不過,它們的工作基本原理依舊不會改變,這是處理器“先天基因”決定的。