1. 程式人生 > >主機板上來了一個新鄰居,CPU慌了!

主機板上來了一個新鄰居,CPU慌了!

大家好,我是CPU一號車間的那個阿Q,好久不見,我想死你們了~

不認識我的請去這裡這裡補補課:完了!CPU一味求快出事兒了!

主機板上的新鄰居

“阿Q,快別忙了,馬上去一趟會議室,領導有重要事情開會”,一大早,咱們CPU廠裡的匯流排主任就挨個到8個車間通知大家開會,神色有些凝重。

“什麼事情,這麼著急?”

“聽說是主機板上新來了一家單位,來搶咱們CPU工廠的飯碗了”,主任小聲的說到。

“還有這種事情?”,我二話沒說趕緊起身出門了。

來到會議室,沒想到大家都已經到齊了,就差我了。

 

見我到來,領導開始講話:“諸位,想必大家可能都有所耳聞,就在昨天,在咱們CPU工廠的不遠處,主機板上新來了一家叫GPU的單位,公開搶我們飯碗,今天召集大家就是商討應對之策”

“GPU,我知道,就是圖形處理器,就是乾圖形計算的,怎麼能搶我們的活呢?領導你多慮了吧”,我回頭一看,原來是六號車間的代表小六在發言。

 

“哦,看來你對他們很瞭解嘛?”,領導問小六。

小六有些不好意思的說到:“實不相瞞,在跳槽到這裡來之前,我在另外一家CPU工廠上班,那裡的主機板上就有個GPU。他們主要承接一些圖形渲染相關的計算工作,不過他們都是執行一些固定的操作,計算電路都是固定的,根本都不具備可程式設計的能力,跟我們CPU那是沒法比的”

“小六,士別三日都當刮目相看,你有多久沒見他們了?現在他們不僅和我們一樣可以程式設計,據說團隊規模擴張,現在已經是通用計算架構了,名字都要改了,叫什麼GPGPU,連計算速度都比我們快了!”,領導說的擲地有聲,會場一下安靜了下來。

“阿Q、小六,你們兩個想辦法混進去他們工廠摸摸情況,彙報以後咱們再繼續討論,大家意下如何?”,領導望向大家。

我還沒反應過來,大家都紛紛說好,看來這份差事我是躲不掉了。

潛入GPU內部

當天夜裡,我與小六偷偷溜進了GPU工廠,沒想到雖然夜已深,但裡面還是燈火通明,一派繁忙的景象。

等到進入了他們工作的地方,我和我的小夥伴都驚呆了!好傢伙,這規模也太大了,放眼望去,全是一個個的工作車間,一眼望不到頭。

 

“Q哥,他們這也太猛了,咱們CPU也就8核,才8個車間,他們這我目測不下1000個車間,難道他們有1000多個核,看得我眼睛都花了!”,小六滿臉驚訝的說到。

“我看沒那麼簡單,你仔細看他們的工作車間,比我們的可簡陋多了”

“還真是,那些橙色的地方應該就是快取吧,比我們可小多了。還有他們好像大部分都是計算電路,邏輯控制電路很少”

“你們不去幹活,躲在這幹嘛?”,不好,我們被巡邏的給發現了!但好像他並沒有認出我們的身份,把我們當成這裡的員工了。

我倆尷尬的點頭笑著說到:“休息休息,我們這就回去”

“你倆快去1024號車間,那裡還缺人手”

“好嘞好嘞,這就去,這就去”

我堂堂CPU一號車間的指令執行長官阿Q,居然在這裡對這個小小巡邏點頭哈腰的,想想都氣!

GPU的祕密

找了好久,我倆終於來到1024號車間,這裡有一個小哥正忙的不可開交。見到我們到來,小哥高興的說到:“你們可算是來了,我這都忙死了”

“今天都這麼晚了,這是在忙著執行什麼程式啊”,我試探性的問到。

“今天有點背,程式設計師下班前留了一個深度學習的神經網路訓練任務給我們,今兒晚上大家肯定沒法休息了,搞不好得通宵”,小哥一邊忙著操作計算電路進行資料計算,一邊對我們說到。

小六給我使了個眼神,然後對小哥說到:“你空了給我們介紹下工作吧,讓我們也乾點活”

“對,對,讓我們也幫你分擔點”,我跟著附和。

“你們先坐坐,這一輪訓練馬上就要結束了,趁著空當給你們介紹介紹。”,小哥說完擦了擦額頭的汗。

趁著小哥在忙,我倆四處轉了轉,“小六啊,他們這車間比起咱們CPU確實顯得寒酸了許多。我們每個車間可都是標配了一二級快取的,少說也有幾百KB,他們可沒有這個待遇。而且他們的計算資源電路也簡單很多,像我們用於分支預測和亂序執行的邏輯控制電路這裡都沒有”

 

“Q哥高手啊,這裡這麼多電路你都能認得出來?”

“俺在CPU廠裡混了那麼多年,這都認不出來那不白乾了嗎?”

“不對啊,按照你說的,他們這裡的電路應該很少才對,可是你看怎麼這麼多”,小六的話引起了我的注意。

 

再仔細一看,計算電路雖然沒我們那麼複雜,但計算單元ALU卻有很多份!要知道在咱們CPU工廠,一個車間也只有一份。

正在納悶之際,小哥忙完了手裡的活,走了過來,“總算可以歇口氣了”。

“大哥辛苦了,想問一下這裡怎麼這麼多重複的計算電路啊?這不浪費嗎?”,我趕緊上前問到。

小哥不以為然,“這可不是浪費,在咱們GPU工廠的車間裡,每個車間都配置了很多個計算單元,我可以操作它們同時進行批量的資料計算,提升速度”

“批量計算?還能同時?”,小六問到。

“是啊,像我們GPU工廠承包的活基本都是這種型別,像3D影象渲染中每個畫素的計算,深度學習中張量和矩陣的計算,它們有一個特點,都是演算法固定,只是資料不一樣而已。同樣的計算邏輯,我餵給它們不同的資料就可以平行計算了!這個叫SIMT(Single Instruction,Multiple Threads)技術”,小哥得意的說到。

“SIMT?這技術怎麼感覺那麼眼熟呢?”,我問到。

小哥繼續笑著說到:“那可不,這一招CPU他們早就用過了,我們這是借鑑”

“哦,我想起來了,Q哥,他說的應該是SIMD(Single Instruction Multiple Data,單指令多資料流),一條指令中可以批量操作多個數據,提升效能”

小六一下點醒了我,“原來如此!我們,哦不,是他們CPU只是批量操作資料,GPU這裡是批量執行計算,真是妙啊!”

“Q哥,聽起來不錯啊,為什麼咱們CPU不能這樣搞呢?”,小六悄悄問我。

“你個笨蛋,咱們CPU內部有八個車間,每個車間同時執行一個執行緒不就是並行嗎?只不過咱們執行的多個執行緒都是功能各異,有些是IO密集,有些是計算密集,既有快取和邏輯控制電路的的建設成本,還要做到通用,沒有辦法像他們這樣搞很多個出來。”

接下來,小哥帶我們來到了操作平臺,告訴我們如何操作這一堆電路執行計算工作,我自然是輕車熟路了,這比在我們那兒簡單多了。

“那邊是暫存器和儲存執行上下文的地方,你們等會兒會用到。”,小哥指著一堆箱子說到。

“哎,老哥,這執行上下文怎麼這麼多,比計算單元ALU還多”,我問到。

小哥一拍腦袋說到:“嗨,瞧我這記性,忘記給你們說了。咱們GPU雖然以計算見長,但還是會遇到分支判斷的場景,咱們這又沒有CPU那樣的分支預測和亂序執行的能力,你們不知道記憶體那傢伙可慢了,有時候難免會遇到停頓等待的情況,浪費計算資源。後來領導交代了,為了充分利用計算資源,不讓ALU閒置著,遇到這種停頓的情況,就把計算資源ALU挪出來去執行別的計算程式碼。所以就需要多預留一些執行上下文來儲存現場了。”

 

“臥槽,這不就是超執行緒技術嘛!又抄襲我們CPU”,我幾乎突口而出,說完看了一眼小六。

“怎麼能叫抄襲呢,借鑑,是借鑑哈”,小哥齜著牙笑著。

小六突然問了一句:“咱們GPU這麼厲害,以後是不是都沒他們CPU啥事兒啦?”

小哥搖了搖頭:“這話說的有些吹牛皮了,我們連中斷處理和虛擬記憶體都沒有,還需要藉助CPU他們的幫忙才能工作呢,是不可能取代他們的。他們CPU太忙了,又要忙著計算,又要忙著執行IO,處理中斷,還有各種複雜邏輯的判斷處理,我們就簡單了,沒有那麼多顧慮,就是用人海戰術,做純粹的計算工作,人多力量大,又能並行,所以在數學計算方面我們要快得多。不過總體來說我們和CPU是合作關係,不是競爭關係!”

聽到小哥這麼一說,我倆懸著的心總算放了下來,這下回去可算是給領導有個交代了。

我正想的出神,小六從背後悄悄拍了拍我,使了個眼神。

順著他示意的地方望去,只見剛才那個巡邏正帶著幾個保安朝我們這邊走了過來。

來不及向小哥告別,我倆趕緊溜之大吉···

 

 

往期TOP5文章

那天,我被拉入一個Redis群聊···

CPU明明8個核,網絡卡為啥拼命折騰一號核?

因為一個跨域請求,我差點丟了飯碗

完了!CPU一味求快出事兒了!

雜湊表哪家強?幾大程式語言吵起來了!