腦芯編 | 窺腦究竟,結網造芯(三)
作者 痴笑
〈三〉
夢裡不知形與令
世界上有兩種管家
一種是Batman的Alfred
能服務能做飯能偽裝能打架
狠起來超人也不是干不過
有了神經元,知道了怎麼把神經元連成網路,這個系列終於進入了主題——怎麼實現神經網路。如果在這個問題上加一個條件,那就是「怎樣用晶元實現神經網路的計算」?
在回答這個問題以前,讓我們先去拜訪兩位長者——Alan Turing和John Von Neumann,目前大家公認的計算機之父。話說前者才是真的「苟利國家生死以,豈因禍福避趨之」,詳見卷福主演的奧斯卡獲獎電影《模仿遊戲》。
Turing-Von-Neumann架構
為了表達對大師的尊敬,我起了個很乾脆的標題。大師之所以是大師,是因為他們定義了在80年前定義了通用計算機的數學模型和體系結構。在這過去的80年里,任何試圖推翻這些結構的「投機」分子幾乎都沒什麼好下場。但是,總有人希望推翻這個架構。先簡單的描述下兩位長者幹了什麼。
Alan Turing在1936年提出了一種具有普適性的邏輯計算模型,證明通過有限狀態機完成輸入數據的操作,可以實現任意複雜的邏輯運算。圖靈機本身描述的場景在現在看來已經沒什麼意義,但是他第一次完整的定義普適計算機體系機構——一卷很長很長的帶子(infinite lengthtape)通過一個有磁頭(head)的有限狀態表(finite state table)進行讀取/處理/改寫的機器。
圖靈機:帶子、磁頭和狀態機
9年後,Von Neumann把帶子改叫做「Memory」,狀態表叫做「CPU」,磁頭改叫做「Connection (Bus) 」,換了一副圖,就有了史稱「馮諾依曼架構」的現代計算機體系結構。
教科書上會說這個結構有啥特點,這是讓你背的。其實很簡單,圖靈-馮諾依曼架構最大的特點是把計算任務分為了2個部分——數據存儲(memory)和數據處理(processor)。處理器幾乎不能存數據,存儲器幾乎不能算數據。兩部分用一種連接方式(bus)按一定規則通信。涇渭分明的特點讓馮諾依曼架構處理事情起來特別有條理,就像「男主外女主內」的家庭角色分配一樣,在硬體資源極度受限的情況下,成為了自動化發展的中堅力量。
馮諾依曼架構有一個升級版,叫做哈佛(Harvard)架構,把存儲空間分為了指令(instruction)存儲和數據存儲,對應不一樣的操作。目前的主流嵌入式微處理器基本採用這個架構,但Anyway這並不重要。
馮諾依曼架構在過去的60年稱霸人間,如果這項專利申請成功的話,這一定是史上最賺錢的專利。可是,馮諾依曼架構在經歷了各種法院撕逼後,被判定為一項沒有收益人的專利……(Youyou Tu和青蒿素在這面前簡直不值一提)
成也蕭何 - x86的不可一世
雖然馮老爺子在自己的架構下發明了人類第一台計算機,ENIAC和EDVAC,但諾依曼的真正崛起還是要歸功於x86。如果你不知道80x86是什麼,那隻能說明我們已經有代溝了,嗯,很深深的代溝。
Intel自1978年推出8086後,x86體系架構就一直是電腦(上到伺服器,下到平板電腦)核心處理晶元的不二選擇。
Intel x86 i7 版圖順便做個普及,在馮諾依曼架構下,每個處理器會幹的事情是有限制的,通常這個限制叫做指令集。它規定CPU的基本操作,沒有指令集(instruction set)定義的複雜操作可以通過基本操作的組合來完成,比如指令集里沒有乘法,那我們可以通過一定數量的加法來完成。
在馮老爺子的機構里,誰的指令集越大,可以訪問的存儲空間越大,誰就越牛逼。x86的指令集從8086到i7不斷擴張與膨脹,最終成為了一個會算雙精單精、矢量圖像,多核多線程多Cache的巨無霸。簡單的說,到2013年的時候,史上最強core已經無所不能了。可是歷史不斷在重演一幕就是,當絕頂高手號稱要獨孤求敗的時候,不知道哪裡竄出來的毛小夥子可能一個起手式就把你撂倒了。聖經里大衛王這麼幹掉了Goliath,《倚天屠龍記》里,張無忌這麼稱霸了光明頂。
那誰是x86的張無忌呢?
移動設備,RISC的春天
獨孤求敗的x86其實有個致命的缺陷——能效,通俗地說就是「做一次」要花費的能量。可是每塊肌肉都很發達的muscleman總是要比一般人多吃幾碗飯吧。我們現在能買到的i7即使在省電模式也要消費超過47W的功耗。本身47W不算什麼,但是蘋果喬大叔的出現,讓47W一下子很麻煩。
iPhone/iPad和一系列手持的充電設備對瓦級以上的功耗是非常敏感的!x86的功耗導致它「充電2小時使用5分鐘」的悲慘結局。肌肉男瘦身變成筋肉男的必然的命運。
這時,x86,或者說是intel的張無忌出現了—ARM Cortex RISC. 所謂RSIC就是精簡指令集(Reduced Instruction Set),他能幹的事情很有限,但是他的功耗低。X86在其巔峰時期無數次地戰勝過RISC,以至於ARM出現時並有沒足夠重視他,那時候Intel還在和AMD搶64位x86的主導權呢。
為什麼無數次敗下陣來的RISC可以最終成功呢?因為這次,他尋找到了一個partner——加速器。在移動端的應用設備里,其實也有很對需要強大計算消耗的進程,這是RISC本身無法勝任的。但是,實際應用上,往往這些進程是有固定的模式和使用場景的。比如手機在通話時的語音編解碼,拍照時的圖像處理(俗稱「美顏」)和無線通信是的編解碼。對於這樣一個經常重複,且模式固定的高通量計算,可以在匯流排上加入一個專用模塊(ASIC)加速,在處理專用任務是ASIC的能效又比通用處理器高很多。下圖就是ARM有名的產品之一A9,除了CPU外,它的浮點與超標量計算(NEON)都被移到了CPU外(一般來說,這不能算作加速器)
這就是開頭的那個故事,你每天充的電不夠「超人」吃的,與只能換個塊頭小,但是能夠指揮其他人的總管。
敗也蕭何 -- 馮諾依曼瓶頸
「涇渭分明,靠匯流排連」的馮諾依曼架構帶來了單核/少核時代計算機的春天,但馮諾依曼架構的致命缺陷——馮諾依曼瓶頸——也悄悄地增長。隨著摩爾定律的發展,遠距離的搬移大規模數據早已取代了計算本身,成為制約高效計算的重要瓶頸,對於x86結構,有太多指令可以直接穿過匯流排訪問存儲空間。
在RISC+加速器的體系結構里,匯流排作為「總管」和「內務府」、「上書房」、「御膳房」間的橋樑,更是好不吃緊。當瓶頸出現在通信上時,馮諾依曼架構就體現出了它垂垂老矣的一面。
這個問題,在實時處理的人工智慧場景下顯得格外突出,信號從入到出,都是按照是數據流(Data flow)的傳輸模式一幀一幀地來。這一特徵在類腦的神經網路實現中就更加明顯。如果每一個卷積的係數都要去雲深不知處的存儲海洋里去尋找,那神經元的處理效率會非常低。簡單地說:
誰腦子TM的是一半純記憶
一半純分析的呢?腦子么,都是左右開工的。邊走邊忘,雁過留痕,卻也是舊相識,恢復不出來一個一毛一樣的。
所以,擺在類腦芯面前的路有三條:
(1) 採用馮諾依曼經典架構,把神經元計算寫在指令集里,反正是超人,技多不壓身;
(2) 採用RISC+神經元/神經網路加速器,給「總管」再開個府唄;
(3) 放棄馮諾依曼架構,完全分散式硬體,像「數據流「一樣的風騷走位。
這三個選項都有不錯的代表,我們慢慢來。
夢裡不問形與令,你知道計算機形(體系結構)和令(指令集)了么?
特別鳴謝 復旦大學腦晶元研究中心 提供技術諮詢,歡迎有志青年報考。
人工智慧晶元硬體群加入方法:
請訪問
http://www.diaochapai.com/survey/69e11a55-6f6d-44b9-baf0-31ccf8a946f7
經群管理員審核通過後即會邀請您入群!
========
歡迎加入我們的讀者群,與志同道合的人一起交流一起吐槽!點下面的鏈接填寫您的信息我們會邀請您入群!
鏈接:矽說讀者交流群
我們同時也開通了微信平台(微信號:silicon_talks),將會發布更多半導體行業深度解讀和福利,歡迎搜索公眾號!
推薦閱讀:
※《人工智慧》第一周問題集agent & enviroment
※余凱:不做AI晶元,如何改變世界?
※找點書看,也不用那麼難(峰哥做個 community)
※從NNVM和ONNX看AI晶元的基礎運算運算元
※人人生而平等,AI讓社會更平等