主板上來了一個新鄰居,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一味求快出事兒了!

哈希表哪家強?幾大編程語言吵起來了!

相關文章
相關標籤/搜索