未來已來:摩爾定律盡頭的計算科學

圖片來自pixabay.com

編者按

本篇演講整理自8月12日《未來論壇·理解未來》第30期講座。美國加州大學計算機系校長講席教授、電子工程系教授叢京生深入淺出地講述了摩爾定律的起源、發展、巔峰時刻以及在如今的「終結」時代,計算機行業該如何應對?作為可定製計算中心的主任,他重點介紹了他所在的研究組的工作,比如設計專門的測序晶元,專門的加密晶元,深度學習晶元。最後,他指出了其他的技術路徑,如三維電路,類腦晶元,量子計算等都可能是有效的路徑。

作者 | 叢京生(美國加州大學計算機系校長講席教授、電子工程系教授)

整理 | 邸利會

知識分子為更好的智趣生活IDThe-Intellectual

大家常常聽到計算機,有軟體,有硬體,你願意學軟體還是願意學硬體,有什麼區別呢?硬體和軟體之間有一個指令集,這個指令集定義了軟體和硬體的界面,定義一些最基本的操作。一般一個計算機大概有幾十個,甚至上百個指令,這些是最基本的機器的指令。你寫的程序分解成各種各樣的指令。做硬體,就是做一個最好的計算機,執行這些指令。軟體也是把你的程序分解成最基本的這些指令,不過,現在這個指令也造成了很大的問題。計算的時候有上百個指令,其實在早期沒有多少計算元件,你要執行這麼多指令怎麼辦?我們就用同一個數據通道,同一個計算單元執行所有的指令。指令進來之後我先分析一下是什麼指令,我按照你指令的需求把我的開關重新設置一下,這樣我來執行這個指令,這個執行完了,數據存了以後再執行下一個指令。所以,簡單的一個指令要經過幾個步驟:從獲取指令,解碼看一下什麼指令,進行計算,最後把數據存起來,是這麼一個循環往複的過程。

摩爾定律接近終點

摩爾定律是摩爾(Gordon Moore)1965年有一個預測,他看了英特爾做的幾個晶元,他覺得18到24個月可以把晶體管的個數翻一番。當時他看的只是幾個數據,沒想到這麼一個簡單的預言成真了,下面幾十年一直按這個節奏往前走。這真是一個了不起的事情,每次翻一番大家知道是指數型的發展。

摩爾定律已經50多年了,現在還在繼續,為什麼呢?是因為我們把晶體管不停地做小,否則同樣的大小,你的計算機已經把整個科技館都佔了還不止。每過18到26個月,每個晶體管比原來小了70%左右,這是非常可怕的。給大家一個概念,不知道大家有沒有玩過俄國的套娃,很有意思,你打開她以后里面又有一個小娃娃,據說最大的裡面有50多層套著。我女兒跟我前幾個星期坐著波爾地海游輪到俄國,買了個十層的娃娃,每個我算了一下差不多70%,經過十次以後,這個娃娃小到你基本上看不到了,所以為什麼能集成度這麼高,是因為晶體管越做越小。現在大概做到只是20納米。你今天應該很自豪,在你的兜里裝了一個有幾十億晶體管,每個都有20納米的這麼一個先進的儀器。

我們不但可以把它做得小,晶體管的速度也越來越快,而且是指數型的增長。有些同仁可能有點失望,我為什麼要聽你講,這種好事已經發生了50多年了。這確實是個很重要的問題,所有的好事都要結束了。到了2000年前後都是這樣的,晶體管越來越小,而且越來越快。但是到2000年前後發生問題了,發現晶體管可以做得越來越小,但是晶元的溫度越來越高,如果我不做任何的事情,我讓計算的頻率增快,就要接近原子能發電站的溫度了,要接近火箭口或太陽表面的溫度了。這是不可能的!今天你拿著你的筆記本擱在腿上比較燙,都比較緊張,如果到了溫度到了火箭口的溫度,你是不可能接受的。我不講具體的原因,其實是因為我們的電壓不能指數級的下降,原來之所以晶體管可以能耗越來越小,是因為在把它變小的同時把電壓也降下來了。一定時候電壓降不下來了,所以晶體管的能耗,晶元的能耗就越來越高了。

怎麼辦呢?今天不管花多少錢,你的主頻超不過2到4赫茲,但是你確實可以買到多核的計算機。一個英特爾晶元有8核,你稍微看一下集成電路的晶元就很明顯,原來每一個核都是一個單獨的計算器,現在全給集成在裡面了,雖然說每個晶體管的速度沒有提高,但是晶體管多了以後計算還是快了很多。

中國有全世界最快的超算計算機,最近叫「神威太湖之光」,晶元全是國產的晶元。「太湖之光」用了多核的計算,每個裡面有256個晶元,若干個晶元迭代起來搭了一個超大的計算機,現在是全球最大的計算機。有一個公司,他們做深度學慣用了圖形加速器,現在最新的GPU有3600個晶元,雖然說速度沒有增加,但是裡面集成度還是在增加。這裡可以看到,摩爾定律是集成度不停地增加,速度和並行在不停地提高。

你可能要問了,到最後有什麼問題要解決?其實還是有不少問題的。第一個,摩爾定律像所有的聚會一樣都是有聚有散的,你今天花錢買到的電子元件大概是22納米到16納米的晶體管,這已經是最超前的了。如果你是蘋果手機,是5和6是到不了,如果是蘋果7是在這麼一個區間。你有一個16到22納米的元件已經是非常非常不可思議的事情,這麼小的元件是怎麼製造,怎麼把它切出來?我們今天最快的刀不知道比它厚多少倍。最鋒利的刀是激光。激光的波長是193納米,我用一個大概200納米的刀去切除一個20納米的晶體管,所以這是很不容易的一個事情。就像寫書法,我讓你用一厘米粗的筆給我寫出一毫米小的字,可不可以寫呢?可以,但是不容易。我們往下能走多少呢,我不知道了。有人告訴我說是7納米、5納米、3納米,我取個中間值5納米,到這裡可能就要截止了,因為有工藝上的原因,有價格上的原因。這個就有意思了,如果這個結束了怎麼辦,計算的能力能不能接著提高?

定製計算的威力

我們一直在思考這個問題,即使在2007、2008年的時候離摩爾定律的終點還有不少距離的時候。我們提了這麼一個想法,以後的計算不應該簡單的並行,而且要定製化。我們給美國自然科學基金會送了一個提案,未來的計算叫定製計算(CustomizedComputing)。我們挺幸運的,這個提案被接收了,我們得到了1000萬美元做這樣一個很大的研究項目。前面若干年我們一直在做這方面的工作。我簡單講一下,為什麼定製計算有這麼大的作用。

這張表是UCLA(加州大學洛杉磯分校)教授十多年前做的一個研究,比較通用計算和專用計算之間的區別。他選了一個應用,實現一個加密演算法AES。你想買東西但同時不想信用卡的號被別人一下子拿到,那就加密以後送過去那邊再解密,加密解密是我們常做的事情。加密的演算法,首先做了一個特殊的晶元來實現,每秒鐘能加密多少比特,用了多少功耗,單位功耗可以加密多少個比特,作為一個參考值。這是一個專用的晶元,這個事不能幹別的,只能做加密這個事情。他同時又用了一個低功耗的CPU,他用通用的CPU做,這麼一來就差了85倍。他用了一個高性能的計算機,英特爾公司的,差了800倍。另外,如果用JAVA在通用計算機上來算,就差了300倍。通用和專用中間有很大的區別,如果我們能把專用晶元的優勢發揮起來,計算能力又能提高上百倍甚至更多,這是我們想做的工作之一。

你可能會問,計算機做了這麼多年,怎麼這麼沒有效率,跟專用晶元一比就差了幾十倍,甚至幾百倍,為什麼呢?因為計算機今天的結構都是沿用了50年代的結構,當時沒有那麼多計算元件,我用同一個元件執行各種各樣的指令,所以這個流水線就很長。我們計算了一下,這個流水線每一步的能耗。我們知道,要先把指令取來,再分析一下,再把數據取來做計算,再擱回去。你可以看一下具體的,光取指令大概就有7%的能耗,或者8%的能耗,你再來解碼一下,看看是什麼樣的指令,又花了6%,接下來可能有一些重新命名的指令,把名字更改一下要花12%,也可能其中一個數據,現在還沒有計算出來,要等一下,需要一個調度的過程,又要花11%,所以這個流水線非常複雜。正經有用的,做個加法,或者做個乘法,這些很簡單的數字或者邏輯計算,都要很多消耗。為了通用,處理器不是那麼有效,這是我們今天為什麼有這麼多提升空間的原因。

我們該怎麼做呢?我們的提議是,不要用通用的處理器,用各種各樣的加速器,加速器是不能幹太多的事,但是能夠把一件事幹得特別好。我們有一個提議,你要有很多的,或者是專用的,或者是可組合的加速器,把它擱在一起,絕大多數計算都應該在加速器上實現,而不是在處理器上。剛才我舉了例子,加密要用一個加密的加速器實現,它的效率有幾十倍、幾百倍的提高。你可能說,為什麼你現在提這麼個概念,以前不用這個辦法呢?這也是一個很好的問題,因為以前我們沒有那麼多的晶體管,我不可能做這麼多的加速器,因為我要做這麼多加速器,我晶元里就擱不下了。今天是完全不一樣的問題。我們每個人手裡都有幾十億晶體管的晶元,非常龐大,困難的是沒有足夠的功耗支持,所以是完全不同的問題。

早期的計算機要通用,因為沒有那麼多元件,算下來有幾百個,幾千個,幾萬個,今天有幾億個,幾十億個甚至上百億個,所以要專用,這就是區別。

還有一個啟示,我們看一下自然界的發展,一個是看看我們自己的人腦。人腦很有意思,我跟一些搞神經科學的專家有過探討。我說你告訴我,我們怎麼做計算?有沒有這麼一個流水線在那執行指令,一個接一個的,他說我們沒找到。但是確實我們看到腦子裡有各種各樣的區域,有的區域是管情緒的,有的區域是管語言的,有的區域是管圖像識別的,而且管語言的還挺複雜,有時候管中文,有時候管英文的。確實有一個例子,一個人本來能同時講中文和英文,後來有了創傷,他不能講中文,能講英文,說明他各個區域是管不同的事,所以這是我們人腦的有效性,因為有各種各樣的加速器,把計算做得非常有效。我們的大腦大概是一個最暗的電燈,20瓦的耗電就可以干這麼多事。

另外,社會發展也是同樣的道理。早期我們的祖先都是在打獵,後來慢慢就有分工了,到現在的社會就有醫生、律師、教授、計算機科學家。現在的社會分工也是非常明確的,這也提高了計算的有效性。

怎麼做這樣一個可以定製的晶元?其實有不少的例子。有一個比較有效的晶元,我們一直用的叫FPGA(field-programmablegatearray,現場可編程邏輯陣列)。這裡面有一些可定製的邏輯,而且有各種各樣的存儲器,還有可編程的互聯。這就是一個很神奇的晶元,你可以買回來擱在你家裡或者書桌上,你可以不停地改寫成各種各樣的晶元,做各種各樣的事情。你說這個怎麼可能,為什麼能有這樣的?其實原理很簡單,他有一個查值表,還有一個傳輸的晶體管和多路選擇器,決定怎麼做互聯。互聯的時候可以讓你走,可以不讓你走。我選哪個輸入,哪個輸出,通過一個查值表,可以把各種各樣的功能都實現了。這個聽起來有點玄乎,你說怎麼能有這麼神奇的東西,有一個查值表,可以把世界上所有邏輯的函數都實現了呢?其實不難。我們小時候做乘法的時候,很多時候不會做乘法,就會背一個九九表,這個表實際上定義了乘法運算。如果我把這個表改一下,三三得九,我把它改成六,我就是在做加法運算,但是我不能只改這一個地方,我要把整個表改了,這個表可以定義加法。我可以改成更複雜的,比如我定義成(A×B)-(A+B),如果我把這個表全都改成這樣一個東西,這個表實際上就實現了這麼一個比較複雜的函數。通過這樣一個查值表,我可以實現各種各樣的函數。有了這個之後我可以用它做各種各樣的計算。其中有一個例子我們最近做的比較成功,加速DNA的測序。這是大家很感興趣的問題,精準醫療。

定製計算的應用廣闊

原來我去看病,老中醫號號脈,我也不知道他怎麼算出來的,拿給我24副中藥,現在最起碼在西方是精準醫療,和DNA測序有關的。你跟我都有30億個DNA的鹼基序列,這個每個人都不太一樣,完全是因人而異。按照這個序列有什麼樣的特性,決定用什麼葯,甚至有人不幸得了癌症,可能因為突變,也是根據突變決定用什麼葯。測序過程非常複雜,測序測出來,不能一下子測出30億個序列,只能一次測一百個,他測了一大堆很短的序列,我們的任務是要把這些序列組合起來。像小時候我們玩的一個拼圖遊戲,有50個片,要把那些小片片拼出來。把整個序列找出來,這是計算量非常之大的工作,你可以看出來測序一出來之後,大概有300到500個GB(1GB等於十的九次方)。我有一個30億的參考序列,你跟我可能有點不太一樣,所以你要再重新排一下,看出有什麼區別。數據量之大,計算量也非常之大。我們把這個做到了FPGA上,每個單元做這個事情,把序列做比較,算出差異。我們組織起來有兩個層次,有第一個陣列還有若干陣列,最後我跟最先進的測序的儀器結合在一起,這個效率還是蠻高的。現在是多核的程序,跟一個核的處理器比,我們大概提高了300多倍計算的速度。今天市場上買到是多核的處理器,即使跟24核處理器比我們也有3倍的提高。我們用可編程的技術做成一個專用的晶元,這個晶元不能幹別的事,只能做DNA排序,但是排出來之後比通用計算機做出來的效率高很多。我們有一個個性化定製的癌症突變治療,癌症開始了以後有突變,突變以後你要找到對症下藥,這方面有很重大的突破。小時候我們看電視據說一個人得了白血病肯定就不行了,但是其中有20%的白血病,今天基本上百分之百治癒。辦法就是找到葯把突變的一點卡住了,癌細胞就不能複製了,對那一類白血病非常有用。

我跟做那個方面的科學家聊過,癌細胞也很聰明,你把這一塊卡住,我就變變變,別的地方出來,這是一個貓捉老鼠的遊戲。這個葯做得比較快,我們有這麼一個過程,不是用一個處理器,可以用一堆處理器。另外,還有一些癌症我們不知道是哪個基因突變,不是拿一個基因,要拿上千的基因。剛開始做基因測序的時候,光是計算這一步,用最快的英特爾處理器要用170個小時,170個小時基本上是一個星期,這還是速度很慢的,現在基本上可以加速到4、5個小時,像驗血一樣,當天就可以知道結果。

說到這一點,可能有的同學就想這個技術太有意思了,我要用到它,要用它必須解決一個問題,怎麼設計?剛才我講到今天的設計就是你寫軟體,把它分解成指令集,在硬體上執行。你現在有了FPGA,有成千上萬的邏輯單元,指令集在哪兒?其實是沒有指令集。把一個很複雜的計算分解成各種各樣的運算,邏輯的單元在這上面能進行運算,這是一個非常困難的事情。寫軟體的你或者用C,用C++或者JAVA,寫硬體的就是鳳毛麟角了。我們做了這麼一個工作,設計FPGA太難了,讓可以寫軟體的人自動設計FPGA。我們用自動編輯原理,做了一個編譯系統,你從傳統的軟體開始,我們生成硬體的描述語言。這個還是很成功的,工業界不少人用這個東西。我們成立一個創業公司AutoESL,有不少公司用這個公司的產品。谷歌有一個很好的功能,可以查一查所有的論文有哪些在應用這個詞,我們查了一下,光論文有1700個,所以工業界還是非常普遍地運用了這個技術。

但是,我們設計這個工具的時候,十年前的出發點是考慮讓晶元的設計者更容易一些,他不用寫這麼繁瑣的硬體描述語言,只需要寫軟體。但是今天我們想讓他做計算還是不夠的,因為計算時候必須把處理器、CPU和FPGA同時用到,我們有一個新的軟體開發了CMOST,其中你給我一個程序,我決定哪一部分在硬體,哪一部分在軟體,數據怎麼傳輸,怎麼共享內存,有一系列的工作。這個工作也做得很不錯,不但學術界認可,我們很多工業界的朋友也想用。我們又成立另外一家創業公司。這是很有效的軟體,你就寫C程序,進來以後自動一部分擱在CPU運行,一部分擱在處理器上運行,給你很大的加速。現在大家聽到很多的詞如深度學習。深度學習可以乾的事還真不少,比如我的中文雖說得不那麼好,尤其中文字忘了很多,但是我手機微信上還可以回中文,完全是靠語音識別。我跟微信講,我今天下午4點鐘會議結束,他就會打出中文來,這個語音識別的過程全是用深度學習的技術。圖像識別,也是用深度學習。深度學習是什麼技術,其實用了多層的神經網路,這個神經網路裡面做的是卷積的計算,你進來之後,第一副圖像很簡單,RGB,但是我在裡面再做一個卷積,提取更多特徵的值出來,我一層一層提取,做卷積,除了做卷積還有別的邏輯運算,取一個最大值,或者在最後再做一個分類。這個事情你也可以用計算機做,但是用計算機做不太有效,這個事情既然你那麼常用——我們不停做語音識別,不停做圖像識別,我們想可以用FPGA可以做一個加速的晶元。今天用軟體描述一下你想做的神經網路,這個神經網路有多個層次,每個層次有多少個神經源,講清楚之後,我們給你自動生成脈衝陣列。這裡有一個很有意思的特點,我只需要跟我的左右手的人互相通信息,這是很不容易的。今天如果要打電話給很遠的朋友或者親戚,能不能跟你鄰接的人通訊就可以把這個事情干成?我們做出來一個晶元,只需要把你鄰接的人交換信息就可以把數據傳遞。這個晶元有很多優良的特點,能耗、計算速度都會有提高。我們做出來以後跟最好的處理器結合,我們的速度可以提高46倍,功率可以降低2倍,能耗降低了100多倍,這又是一個很好的例子,通用和專用的區別。這個專用其實還有人可以做得更好,你可以設計一個專用的晶元。但是我們這個是用FPGA做出來的,你還可以改變它的功能。

FPGA也不是唯一的可以用來加速的元件,我們在加州大學洛杉磯分校還做了別的工作,我們用了可重組的加速器做新的處理器。這裡我有很多可以加速的單元,這個單元要比我剛才講的查值表要複雜很多,我可以用互聯的交互性連起來,你需要什麼樣的,比如要做一個開根號的運算,或者除法的運算,我們可以把一些加速單元組合起來做這個事情,我們可以在醫學成像加速上有很大的提高,大概幾十倍,上百倍的提高,而且有足夠多的靈活性,用於不同的應用。如果你有一些加速單元,如果忘了一些很重要的加速單元怎麼辦,那也沒關係,我們這裡又加了一些細膩度很高的可編程軟體,像FPGA元件一樣,你可以通過它生成我們需要的加速單元,這樣可以做進一步的計算。

值得一提的是,2014年IBM公司做了一個神經網路加速器,這個神經網路跟我剛才說的卷積計算不一樣,卷積計算是人工智慧的辦法。我不覺得我們腦子在不停地做卷積計算,如果不停地做卷積計算兩分鐘以後就摔倒了,能耗就用完了。IBM的結果有點像我們大腦里的神經網路的計算,以脈衝形式的,看到信號才發一個脈衝,有這個脈衝才可以激活若干個神經單元,不是每一個使用段都在不停做計算,所以它的能耗非常低,只有20個微瓦,而且它的集成度很高,4.5萬個晶體管在晶元上,所以是一個很好的加速器。

有一個很重要的問題,各種各樣的加速器,哪個加速器更好?說到各種各樣的加速器,我覺得很重要的一點就是我做完了之後可以重新用在別的應用上,也可能我剛開始的想法不夠完善,剛開始的軟體不夠精鍊,但是我可以用來做各種各樣的事情。

我想對剛要開始科學生涯的同學們說一下,你並不是生不逢時,有各種各樣的機會可以做。第一個,可定製的,可重構的體系結構,可以用來做各種各樣的加速器。我沒講的,其實我們也做過很多應用,今天的集成電路都是二維的,邏輯都是擱在一個平面上,互聯可能有若干層,但是我們十多年前做過很多的考慮,比如三維的電路。我剛才提到了一點,IBM的晶元,那個性能還是非常驚人的,我們能不能做成一個類腦晶元,跟我們腦子結構和工作原理比較接近的,那個絕對不是我們今天說的FPGA,我覺得應該是別的體系結構。再扯得遠一點,大家也聽到一個詞「量子計算」,量子計算提供了非常誘人的選擇。我歡迎所有的同學們來到一個新的計算新紀元。

演講者簡介

叢京生 Jason Cong

北京大學高能效計算與應用中心主任

北京大學信息科學技術學院千人計劃客座教授

北京大學-洛杉磯加州大學理工聯合研究所聯合主任

加州大學洛杉磯分校計算機系校長講席教授

加州大學洛杉磯分校協理教務長

VAST實驗室主任(原VLSI CAD實驗室)

製版編輯: 許逸|

本頁刊發內容未經書面許可禁止轉載及使用

公眾號、報刊等轉載請聯繫授權

知識分子為更好的智趣生活IDThe-Intellectual


推薦閱讀:

摸爬滾打學設計模式
做逆向工程該學x86彙編還是arm彙編,還是都要學?
機器學習的科學家如何判斷計算機或是機器人的人工智慧是否黑化,即覺醒但不表露?

TAG:计算机科学 | 摩尔定律 |