您當前的位置:首頁 > 書法

那是尋找七龍珠的故事(1)

作者:由 夏晶晶 發表于 書法時間:2021-12-04

最近參加海思設計驗證大賽有點頹……我打算寫點噁心的東西傳播一下我的心情( ー̀εー́ )

我曾經回答過PTG的ARM晶片的一些猜測,在其後聽到的一些傳言也證實了我的猜測,ARM公版方案的多核scale-up可能是有些問題的|ω・)

其實很多人並不知道,多核scale-up的技術,和光刻機一樣,是屬於美國禁止出口中國範疇的。當然,掌握這個技術的公司(能做到可商用)並不多,IBM是所有人的老師,然後就是AMD和intel,其中intel的QPI和UPI最為著名,而nvidia的nvlink都算不得scale-up技術的。你說你有錢,想買QPI的技術? 不行的,對中國禁售,不是錢的事,ARM公版的技術方案你別嫌差,也是市面唯一能買到的了。

但為什麼scale-up的技術大家都不太關注呢? 因為他並不炫,它的本質,是體系結構的吃喝拉撒睡、是柴米油鹽醬醋茶。在這個萬眾創新、顛覆為王的時代,就如李敖所講,風花雪月的世界哪容得下美人便秘…………

ps:當年制定某司scale-up協議的五個人,兩人流失海外,一人轉崗,一人去了PTG,經歷過一切歷史的就還就剩下我了,如果這些下里巴人的故事沒人想聽,那再過個幾年,有些principle大致也就該消逝了。

體系結構中的重要一環就是load/store,這是圖靈機的一個重大特徵,它實質上代表了計算過程中的狀態擴充套件,計算隨著不斷的L/S像一個生命一樣不斷迴圈,直至結束……

load和store是不等價的,而我喜歡把load比喻為吃,把store比喻為拉。

不過這裡需要額外更噁心地形容一下,絕大多數同學學習體系結構的時候,都把store當做一種耿直的一捅到底地A寫到B的行為,實際上呢,除非是有特殊的語義,例如寫暫存器或者noncacheable的某些行為,99%的store都是posted的,也就是逐級一節一節地進行的。想想也是嘛,誰拉屎是從頭到尾完整一長條的,都是一節一節的嘛。posted write通常都基於cache或者buffer進行,最終表達為shitback,哦,copyback。其中每個POS都會提前反饋response,以提升拉屎的CPU的效能,即通常CPU並不存在write latency bound這個說法。

為什麼要這麼惡趣味地比擬呢,因為處理器和人是一樣的,得不停吃東西才能工作,否則得餓死,當然稍微餓一下倒不一定馬上死。

那是尋找七龍珠的故事(1)

但拉屎那是真不一樣,想象一下菊花被堵住,拉不出來的感覺,那是不是很酸爽? 拉不出屎,那就得憋死。

一個CPU,當他想吃的時候,一定是他有胃口的時候,他一定是吃得下的,如果喂得快呢,那麼就是CPU效率高一點,喂得慢了,也就是稍微餓一下,一般來講,並不存在撐死這種情況,但拉屎不一樣,人有三急,要拉就必須得拉,如果因為一直吃吃吃,導致了拉不出去,晶片內部能夠存放的空間是有限的,就如人的肚子一樣,裝滿了,還吃,得炸。

那是尋找七龍珠的故事(1)

當我們面對一個多核系統時,如果你把系統看成各個獨立的個體的時候,其實也沒那麼難,因為若干個獨立的個體,只要是生活能夠自理的,你想吃就吃,想拉就拉,最多也就是搶食堂搶廁所罷了,大機率死不了人。

但是scaleup不一樣,此時整個系統需要成為一個統一的整體,所有的吃喝拉撒,都做得像是一個人在吃,一個人在拉。也就是說,人與人不同的的吃和拉之間,存在了耦合關係。有人得等著另一個人拉完才能吃 _(:3」∠❀)_

嗯,再進一步說,所謂的cache coherence,用非常直白的一句話來表達,就是所有人的吃和拉,都必須被記錄在案,嚴格按照有跡可查的方式執行。你吃下去的所有東西,都打上了標籤,而標籤具有和資料完全不同的生滅狀態。獨立自由世界允許一個人吃完拉褲子上,或者不知道吃了啥就拉,反正也沒記錄,但scale-up的世界,吃進去的一粒米,最後變成了米田共,都必須是精確記錄在案的(當然某些一致性協議有一定的放鬆)。這些記錄是萬萬不能出錯的,要一個不小心出了錯,就會導致某個下游的CPU發現……

那是尋找七龍珠的故事(1)

其實我講到這裡,真正懂得做scale-up的人,他就該理解我在說什麼了。不能懂得這個梗的,包括我在公司內培訓,很多人聽著看著一臉懵逼的的樣子,入不了門的話,帶不動也是沒辦法。

做一個處理器scale-up的系統,一個非常非常重要的技術點,就是要解決多核、多DIE、多晶片之間,如何順暢拉屎的問題。是的,

七顆龍珠的其中一顆,在屎裡

。呵呵,PTG或其他cpu startup,想要超越ARM解決scaleup的問題,這個 問題你避不過,不要嫌髒,這裡就是沒有仙女飄飄,只有吃喝拉撒。想當年吧,以我做scaleup的經驗,有40%左右的scaleup功能的致命級bug,都是屎拉不出來憋死的。

到此為止還不是最惡趣味的……

因為單die或者單SOC的情況下,這個問題不算特別難,真正難的是多die和多晶片之間,特別是存在類似daisy chain菊花鏈(當年誰起名這麼騷的)的topology的時候,問題難度指數上升。

曾經有一個非常經典的電影表達過類似的境況。。

嗯,你知道我在指什麼。

《人體蜈蚣》

那是尋找七龍珠的故事(1)

我不敢貼成品的效果圖,我怕被舉報。

〇rz〇rz〇rz〇rz〇rz〇rz〇rz〇rz〇rz〇rz〇rz〇rz

但事實上,如果要在通用2P之上更進一步,解決記憶體資料庫級別、小型機級別的scaleup,你就得完整地完成一個蜈蚣實驗,並且量產! 它的難度在於,每個DIE/chip不僅僅要為本地的CPU拉屎留空間,作為B,還得為上游A拉出來要給到下游C的屎留足夠的胃口,必須吃得下,拉得出。

其實到這個級別,我也沒做得太好,這個級別還是IBM老師厲害,我還是太單純不夠變態(/ω\)

寫了半天,感覺上除了噁心啥都沒講? 嘿嘿,也算是吧,相當於加密了,但其實這是計算機體系結構中,書本上不會講,但真實存在也非常重要的大糞坑!

標簽: rz  scale  up  CPU  Store