這需要引入一個概念,處理器IPC(Instruction Per Clock),即CPU每一個頻率周期里處理的指令數量,這個指標越高越好。IPC基本可以看成一款CPU架構先進程度的體現。

翻譯成人話就是:

處理器工作=搬貨物上樓,一條指令集就是一包貨

處理器頻率=CPU一小時內能上下樓幾次

處理器IPC=CPU一次能扛幾包貨上樓

奔騰4這種老架構,身材瘦弱,一次只能扛一包貨上樓。

而新架構的9代i7,孔武有力,一次能扛十包貨上樓。

所以就算他們兩個上下樓的速度一樣,9代i7一小時內扛的貨物數量也比奔騰4高多了。

這就是簡單理解新舊處理器同頻率但不同性能的比喻。

題外話,孔武有力的九代i7搬完貨甚至還有餘力把樓上住戶的垃圾順道帶下樓去扔了,這就叫超線程。


啊這

CPU的性能是多個角度決定的,如果存在一個足夠理想的內存子系統,CPU頻率和流水線長度/執行周期,最大程度的決定了「速度」


如果覺得有問題,這裡引用一個參數,CPI rate(Clycle Per Instruction retired)。既每個指令平均消耗的周期,如果有一個4指令發射的CPU,那麼最理想就是0.25(1/4)。

那麼現實程序怎麼樣呢?以我巫師3血與酒的數據,在1.12,也就是說每個CPU周期都沒辦法執行一個指令。這個是程序的指令的並行度問題

多線程也一樣

簡單來說,CPU的寬度和多線程的作用都比很有限,更加重要的是周期數和流水線長度。超線程本身就是程序的指令並行度低而產生的技術


但是實際,CPU會消耗大量的周期等待內存子系統。再以實際測試,通常程序只有30%pipeline slot得到了執行。其中絕大部分都是為了等待內存子系統而消耗的。不是前端就是後端的延遲高了

也就是說這十年里,內存性能的提升就是提升性能的。同時更高密度的工藝,降低流水線長度/執行周期,都是提升性能的。(ARM那邊可能更真實,雖然ARM核心頻率越來越高,但是執行周期是一直在降低的。所以保持相當的PPC(Performance Per Clock,每周期性能)的增幅

同時還有別的要素,比如分支預測的命中率,但是分支預測很少有成為瓶頸的


如果只看最高頻率的話,的確頻率是沒有較大提升的,目前9代酷睿里的最高頻率 I9-9900KS能全核5G

十年前二代酷睿I7-2970X 最高加速頻率也能到4G

ps:其實是9年前,初代酷睿數據不在天梯圖裡,懶得重新查了

但CPU的性能不止看頻率的,相同頻率也不代表相同的性能.

這裡就要引入一個概念: IPC(Instruction Per Clock)翻譯過來就是每個時鐘周期CPU所執行的指令的多少.

所以CPU的性能粗略可以通過這個等式來計算 :

性能 = IPC * 頻率

而IPC可以通過CPU的架構/工藝製程等方式來提升.所以雖然現在一些CPU的頻率和十年前的CPU頻率相近,但性能確實天差地別的.

而且,前面說的其實只是單核性能的提升,通過將CPU核心的數量翻倍,也能實現CPU性能翻倍(近似)的效果.當然這些還遠遠不止!

我們還有超線程(Hyper-Threading)

通過這項技術,可以實現在一個實體核心上運行兩個邏輯線程.從而在操作系統層面實現線程翻倍的效果.當然相比於直接增加核心數量,超線程技術提供的線程翻倍效果是有損耗的而且還需要主板,晶元組,操作系統還有軟體的支持才行.當然你近似類比成翻倍也沒毛病.

其實增加核心數量和超線程技術都不是進十年來出現的.只是CPU廠商做的技術下放.

不過也正是由於這些下放的技術才促使消費領域的CPU性能突飛猛進的原因.

尤其是AMD 銳龍ThreadRipper 3990X 更是誇張的做到了64C128T(64核心128線程)

魯大師單個CPU跑分都高達100W+的變態地步.

以上


為啥我感覺這十年除了最近AMD yes事件,CPU性能提升主要還是頻率增加呢... _(:з)∠)_

以下表述順序並非計算機發展順序,只是為了說著方便。另外所有這些都不是近十年的技術,只是可以在提升頻率以外提升處理器性能的方法。

簡單說就是兩件事:一個是盡量減少平均執行一個操作所必須的時間,一個是盡量不閑著。

頻率決定了處理器工作的節奏。理想狀態下,你做一件事用同樣的步驟,工作節奏越快效率越高。比如一件事有兩步,你一分鐘完成兩步肯定比一分鐘完成一步要快。

但是頻率不能無限提高,會受其他客觀因素影響。比如讓你抄作業[劃掉],你寫每個字的速度是有極限的。如果限制了增加頻率,那麼最直接的辦法就是減少步驟。比如,你用草書抄作業[劃掉],減少字的筆畫數,同樣的節奏寫出來的字自然就多了。處理器設計上會試圖減少進行一個操作需要的時鐘周期,以此提升同頻率下的處理速度

顯然,減少步驟也有極限——一件事簡化到只有一個步驟就沒辦法再減了。另外,實際操作中減少步驟往往要靠消耗腦細胞來實現的。在技術本身沒問題的情況下,做一件事的步驟越少難度越大,越費腦子。而你並不只要做抄作業[劃掉]一件事。如果每件事都這麼費腦子,你的腦子就不夠用了。

怎麼辦?我相信很多人都干過用好幾支筆寫作業的事。處理器上,這稱為SIMD(每條指令多個數據)。你用同樣的節奏,同樣的步驟,同時處理幾件事。顯然效率蹭蹭地就上去了。

不過,你能同時抓的筆的數量還是有極限的(PS 你也未必總是同時有很多作業要抄[劃掉],不過暫時不考慮這種情況)。這個時候你已經被折騰的焦頭爛額,你希望——有人能來救你。對!多找幾個人就好。處理器多弄幾個核心就好。這沒什麼好說的,不過好像最近十年的前八年,桌面處理器的核心數量就沒變過...

那最近十年的前八年發生了什麼?還是加人,不過是另外一種辦法。多核心於其說是加人不如說是加團隊。真正的加人手的辦法是這樣的:

比如你抄作業[劃掉]減少到最後還是需要三個步驟:把作業拿來,抄,把作業送走。執行這三個操作的方法都在你腦子裡,而你執行其中一個操作的時候,其他兩個操作佔用的腦子是閑置的!浪費可恥啊!如果,有三個人,每個人只懂得其中一個操作,只做其中一個操作呢?鐺鐺鐺!流水線(pipeline)出現了!這樣如果你有很多作業要抄[劃掉],那麼每個人在絕大多數時間都是在工作的。佔用同樣的腦細胞,工作效率變成了原來的三倍!——雖然一個操作花的時間沒變,但是這個操作的吞吐能力(throughput)提高了。

人生不可能只抄作業[劃掉],可能...還需要寫作業。找來的人不只有會抄作業的,還可能有會寫作業的。我們顯然不會希望執行抄作業[劃掉]任務的時候不能執行寫作業的任務,或者反過來。如果他們可以同時工作,那麼在同時存在抄作業[劃掉]和寫作業兩種任務的時候,工作效率就進一步提高了(即便是SIMD沒辦法用的情況)。如果流水線是在一個操作流程上的縱向的責任劃分,這就是在不同操作上橫向的責任劃分。這稱為超標量(superscalar)

最後,如果你要抄大量作業[劃掉]的情況下,把以前抄過的作業[劃掉]拿過來的速度有時候也是會大大影響效率。這就是緩存(cache)功能。不過這個要細說就完全是另外一個話題了。

PS 超線程(hyperthreading,不過不同的處理器有不同的叫法)是在流水線和超標量基礎上衍生出來的功能,並不能直接提升工作效率。比如一個人找你幫忙抄作業[劃掉],那麼你寫作業的功能必然閑置。如果同時還有一個人找你寫作業,並且你能同時接受這兩個人的委託,你就能把寫作業的功能也利用起來。這就是超線程,上面這個例子是通過超線程將本來無法發揮作用的超標量激活。另外一種情況是如果一個人找你幫忙抄作業[劃掉],但是他提供作業很慢,不能讓你的工作飽和。這時候如果能同時接受另外一個抄作業[劃掉]的委託,就能讓抄作業的功能飽和。這是通過超線程為流水線填充更多的任務。最後出力氣的還是流水線和超標量。


這就像貨車送貨,都是跑兩趟,裝車一噸和裝車兩三噸送貨量肯定不一樣。

貨車能塞的進幾噸,除了跟載重量有關係以外,貨物怎麼打包也有關係。

CPU頻率就像是送貨的次數,製程決定的是能裝幾噸,架構決定就像是貨物打包的方法。


題目說的「速度」是個模糊的概念。

對於處理器的性能度量有多種標準。MIPS是貼近題目要求的一種度量,指每秒執行幾百萬條指令。這個結果確實是同一個cpu的情況下,頻率越高數值越大的。

CPU速度的提升同時來源於體系結構的優化和工藝的進步。雖然頻率都差不多,但因為有上述兩方面的進步,平均下來每周期執行的指令卻更多了。

比如:

內存頻率增加,預取變寬,導致平均一次緩存未命中後等待載入數據所浪費的時間更少了。

緩存變大或者更智能的緩存替換策略導致緩存命中率上升,訪存操作平局需要的時鐘數就變低。

更優秀的分支預測器也能降低錯誤預測帶來的代價。

更多的計算資源也讓每周期可以同時執行的計算增加。

更加高效的片內互聯網路讓數據同步平均需要的周期更少。

引入更新的SIMD指令集也可以利用並行性加速計算。

AMD64指令集也比十多年前的32位的指令集要強。

單個CPU里的核數也多了。

操作系統這十年來也會有與硬體相適應的優化,其他外圍硬體對提升性能也會有幫助,比如SSD。


cpu的製程或者工藝吧,原來有人把推土機超到8點多,但單核性能打不過默頻2600


推薦閱讀:
相关文章