高效能CPU設計

2021-08-02 15:51:18 字數 2607 閱讀 1959

cpu從出現到現在,已有幾十年歷史,經過多次迭代改進,由原始的五級流水擴充套件到現在的n級流水,從一次只能執行一條指令到現在的多核超標量處理器,cpu的效能得到巨大提公升。

當前,提公升cpu的效能主要有兩個方向:

第一,努力提公升cpu單核core的效能,採用超標量技術,支援同時多執行緒;

第二,擴充套件多核平行計算技術;

下面結合筆者的工作經驗,多談談關於提公升單核效能的看法。

考核cpu的效能,就不得不考慮不同的使用場合。不同的使用場合,不同的資料型別,對cpu的要求是不一樣的,也因此,從cpu衍生出各種更加專業的處理器,比如gpu。

單核cpu,只有乙個核心core,core內部分為ifu(instruction fetch unit)、isu(instruction issue unit)、fxu(fix-point unit)、fpu(floating-point unit)、lsu(load-store unit)等模組。

鑑於目前處理資料的發展趨勢,浮點資料的計算越來越多,而浮點資料的計算往往是最複雜的模組,所以浮點單元的設計也是最核心的。目前國內公司向國外先進公司引進的cpu核心的浮點單元都不強,或者直接就不給浮點單元的**。

所以,高效能浮點單元的設計,是我國自主設計高效能cpu難以逾越卻又不得不攻克的難關。

說道這裡不得不吐槽一下!

網上很多鍵盤俠,只知道噴:花了那麼多錢,還是設計不出自主的cpu,辣雞!!

光動嘴不動手的人,都是看人挑擔不累的貨色,那麼多優秀的碩士博士這麼多年都搞不定的東西,你以為是簡單的東西?

筆者花了快半年時間,也就敢說對浮點單元的功能有了一小部分的認識。

浮點單元的複雜程度,已經遠遠超出一般人的理解範疇。

那麼放大到整個core,甚至多個core組成的soc,那又是什麼概念!!

在學習過程中發現,**中用到的許多演算法,根本沒有推導過程,只有乙個最終結果。而為了徹底掌握這些公式的推導,往往一行**就需要耗費數週的時間,而實際設計中的**往往是多少萬行!!

不相信?

相信看這篇部落格的讀者都經歷過高考吧。就好比做高考數學的證明題。**中用到的公式必然是對的,這點不用去質疑。然後就是想方設法去證明。

但是,這些公式在網上或者能輕易找到的資料上,經常只有淺顯的說明,推導都算不上。然後就是自己想各種可能和假設去試著證明。

有時候突然有了靈感,可以很快搞定一行**的證明。

有時候沒有靈感,困擾幾周都是可能的。

好了,廢話不多說,咱言歸正傳,下面就把最近掌握的一點東西寫一些出來,與同樣試圖攻克核心設計的做交流吧。當然,涉及到保密問題,文章只會**網上能夠查到的東西,至於查不到的,那就恕無可奉告了。

內容或許比較初級,讓諸位賤笑了!

1、cpu原理

cpu的工作是根據指令去運算,並在一定時間後給出計算結果。

指令,一般都是32位的。包含的資訊有:指令操作型別,運算元據,操作的暫存器等。

cpu如何處理一條指令呢?

一般包括五個步驟:取指、解碼、執行、訪存、寫回。

五個步驟用到的邏輯電路功能不同,所以一條指令執行到哪一步,那一部分的邏輯就會工作,其他部分的就都閒置,在一邊打麻將消遣。

這就給提高cpu工作效率留下了突破口。

那能不能讓所有步驟的邏輯都同時工作,不浪費時間及資源呢?

當然有!

這就不得不提流水線。流水線就是把工作劃分成多個步驟,順序執行,然後安排不同的模組去做不同的事,同時大家都不閒著。

2、cpu效能

如果cpu是乙個吃貨,那麼指令就是cpu的食物。

如何評價乙個吃貨的能力呢?

容易想到,多久吃一口及一口吃多少。

同理,簡單評價吃貨cpu的能力如下:

cpu效能 = 每1秒有多少週期 * 一週期處理多少指令 = 一秒鐘處理多少指令

一秒鐘有多少週期,這個就是指cpu的時鐘頻率,主要由工藝決定,另外流水線的劃分也至關重要。

一週期處理多少指令,這個指cpu的並行度,這個引數越大,代表cpu乙個週期處理的指令越多,但是同時意味著需要的邏輯資源越多,功耗越大。最起初的cpu,一週期只執行一條指令。但是,現實的需求遠遠比這個巨大,所以,目前的cpu往往一週期處理多條指令,比如ibm的power8每週期最多可同時處理8條指令。

有人要問了,那麼為什麼不大量增加每週期處理指令的數量呢?比如,增加到80條,800條?

嗯,有道理。

太有道理了。

不過,這就涉及到人有多大膽地有多大產的問題了。

因為涉及到許多專業知識,比較冷門,所以就不深入了,簡單來說就是,單純增加每週期處理指令的數量,必然需要按照同樣規模增大晶元運算邏輯,造成晶元面積大、功耗高,控制變得複雜,這些都會導致設計複雜度大幅度增加。同時,晶元面積增大,導致訊號傳播延遲增大,對時鐘頻率的提公升是巨大挑戰。所以,優秀英雄的設計人員經過各種折中後,每週期處理的指令數量並未有大幅提公升。

3、如何提高效能?

上面介紹了cpu的工作原理及效能的定義,那麼就可以對症下藥,去提高cpu效能。

一、浮點乘加部件maf(multiply-add-fused)

顧名思義,該單元實現浮點資料的乘加操作指令,同時可以支援浮點的乘法、加法、減法、乘減指令,並且支援部分定點指令,以及定點和浮點的vector及scalar指令。

maf是浮點單元的乙個子模組,即subunit。

高效能計算中FPGA,GPU和CPU

1.高效能計算中fpga,gpu和cpu的簡介 近年來,傳統用於影象處理的gpu逐漸被發掘用來進行高效能計算,並且達到了相當好的效果,在單精度浮點運算中的速度達到5tflops,在雙精度浮點運算中的速度可以達到1tflops。如今效能最好的gpu處理器 比如nvidea的tesla k20和k40 ...

mysql高效能索引設計

索引是儲存引擎用於快速找到記錄的一種資料結構,這是索引的基本功能。可以把資料庫的理解成一本書,而索引就是這本書的索引 每個章節在第幾頁 如果你知道你想查詢的章節名稱,就可以快速的通過索引找到這一章索引的頁數,而在資料庫中也類似,儲存引擎會先在索引中找到對應的值 主鍵或者實體地址,不同的儲存引擎儲存的...

架構設計 9 高效能設計

架構設計學習思維導圖 架構設計系列主要的adm 架構開發方法 主要基於togaf9或者togaf9.1來論述。這是個人學習實踐和總結筆記,專注並不斷積累和更新,努力精進自己。個人拙見,僅供參考。1 架構概述 了解架構基礎知識 架構定義 分類 級別 應用架構演進 架構是否合理 架構誤區等。談談架構 2...