2
最近我們看到一篇文章,說FPGA可能會取代CPU和GPU成為將來機器人研發(fā)領(lǐng)域的主要芯片。文章列舉了很多表格和實驗數(shù)據(jù),證明了在很多領(lǐng)域FPGA的性能會極大優(yōu)于CPU。并且預(yù)言FPGA將來可能會取代CPU和GPU現(xiàn)在的地位。但事實真的是這樣嗎?要搞清楚這個問題,我們首先得對CPU和FPGA都有足夠的了解。
FPGA這個詞可能很多人都有所耳聞,尤其是理工科的同學(xué)們大多數(shù)應(yīng)該都自愿或被迫被這個詞刷屏過。但要真追究起來FPGA到底是個什么東西。很多非相關(guān)專業(yè)的人都會陷入一臉迷茫。不過說起開發(fā)板,可能知道的人就很多了,有些人會以為FPGA就是開發(fā)板。但實際上FPGA指的只是開發(fā)板上面的那一小塊芯片而已(下圖黃圈處),整個開發(fā)板的其余部件都是為了協(xié)同它工作,讓它發(fā)揮出它的性能而存在的。
FPGA開發(fā)板,via google.com/youtube
可即使有心的同學(xué)曾經(jīng)查到了這里,或許也搞不懂它和CPU到底有什么區(qū)別,畢竟把它的位置換成CPU,整個開發(fā)板看起來就變成一塊普通的電腦主板了嘛,感覺簡直分分鐘接上硬盤和顯示器就可以開始LOL了。確實,不管從外形上來看還是實際的功能上來看,F(xiàn)PGA和CPU都表現(xiàn)得太像了,但在這兩者相似的外表之下,其內(nèi)部構(gòu)造其實有著根本性的差別,而這種差別也正是FPGA會被很多人認為適合機器人開發(fā)的原因,因為它的構(gòu)造決定了它在處理機器人需要的很多運算,尤其是在機器感知這方面的處理時的速度會比CPU快很多,同時還能將功耗控制在很低的水平。
在講FPGA之前,我們先從大家比較熟悉的CPU的數(shù)據(jù)處理方式講起。首先需要強調(diào)的一點是,處理我們指令的計算機元件本身是無法理解我們的指令的,它們只能理解作為組成CPU最基本的元件——晶體管能實現(xiàn)的兩種狀態(tài):“開”和“關(guān)”的含義,對應(yīng)的就是1和0這兩個機器碼數(shù)字,這也是計算機的整個體系都基于二進制建立的原因。而為了讓我們下達的各種各樣的指令變成CPU能理解的0和1,CPU需要一個專門的譯碼器來翻譯我們的指令。這個過程分為兩步:“取指”(從一個專門存放指令的存儲器中將需要執(zhí)行的指令提取出來)和“譯碼”(根據(jù)特定的規(guī)則將指令翻譯成計算單元能夠理解的數(shù)據(jù))。CPU的結(jié)構(gòu)大概是這樣的
via wikipedia
其中的Control部分就是控制取指、譯碼等整個流程的部分,Cache是在高速的CPU與相對低速的內(nèi)存間為了提高從內(nèi)存獲得指令的效率而設(shè)置的一個臨時指令存儲器,DRAM則是速度比較慢的那一部分指令存儲器??梢钥吹?,真正的計算單元ALU只占了CPU結(jié)構(gòu)中不大的一部分。這樣的設(shè)計是有原因的。CPU存在的目的是作為通用計算機的處理核心,注意“通用”二字,這意味著塊核心必須具備處理各式各樣千奇百怪的指令要求的能力,并且因為要處理來自多個設(shè)備的請求,它必須擁有隨時中止目前的運算轉(zhuǎn)而進行其他運算,完成后再從中斷點繼續(xù)當(dāng)前運算的能力。把這些話看完你可能都快睡著了,但在CPU內(nèi)這些都要求在一瞬間完成。所以CPU需要有非常復(fù)雜的邏輯控制單元和這套獨特的指令翻譯結(jié)構(gòu)。這都是保證CPU能順利完成它的使命的必須的東西??梢哉f,在計算效率和通用性上CPU犧牲前者選擇了后者。
而FPGA最早是從專用集成電路發(fā)展而來的半定制化的可編程電路。從誕生的那一天起它的身世就決定了它不像CPU那樣可以靈活的處理各種沒有見過的指令,而只能根據(jù)一個固定的模式來處理輸入的數(shù)據(jù)然后輸出,F(xiàn)PGA的結(jié)構(gòu)是這樣的
via CSDN
很簡單,絕大部分都是計算單元(上圖中黃色部分其實就相當(dāng)于CPU結(jié)構(gòu)圖中綠色的部分),但沒有控制單元并不代表FPGA就不會執(zhí)行指令了,事實上FPGA里控制單元的角色就是由圖中的每個控制單元和單元之間可編程的邏輯連接線來完成的,通過FPGA編程,開發(fā)者可以更改FPGA的每個單元的運算邏輯和單元之間的連接方式,從而使其達到和一般的運行程序差不多的效果。它與CPU的不同,在于它無法應(yīng)對沒有被編程過的指令。編程方式一旦確定,F(xiàn)PGA就只能根據(jù)被編程的處理邏輯和方式來處理特定的數(shù)據(jù)輸入。但這樣的架構(gòu)換來的是FPGA內(nèi)部幾乎全是計算單元,因此FPGA的實際運算能力會比看起來強得多,尤其是在運行簡單但重復(fù)性高的任務(wù)的時候,由于簡單,因此很少的幾個邏輯單元,甚至一個就能獨立輸出這個運算的結(jié)果。而由于省去了CPU的取指和譯碼兩個步驟,F(xiàn)PGA重復(fù)運行相同代碼的效率得到了極大的提高。
有一個比喻打得很恰當(dāng),CPU就像大學(xué)里一位德高望重的老教授,積分微分啥都會算,但畢竟它只有一個人,當(dāng)計算任務(wù)太重的時候也會被累趴下,而FPGA這樣的結(jié)構(gòu),就像是整個小學(xué)里所有小學(xué)生組成的隊列,每個人都只會算簡單的加減乘除,但有些量大但不復(fù)雜的運算任務(wù)交給他們就是會比較快。
具體表現(xiàn)在性能上,很明顯的一點就是一般的CPU只能同時處理4到8個指令,而不算太差的只要FPGA優(yōu)化得當(dāng),可以同時處理256個甚至更多的指令。其實GPU的設(shè)計思路同F(xiàn)PGA類似,都是為了處理大量簡單重復(fù)的運算而出現(xiàn)的設(shè)備。但GPU的性能強悍的同時耗能也很高,而FPGA因為編程和優(yōu)化都是直接在硬件層面進行的,能耗會低很多。
現(xiàn)在我們可以敘述正題了。前文提到,F(xiàn)PGA在處理機器人需要的某些數(shù)據(jù)的時候的優(yōu)勢會比CPU大很多。沒錯,就是感知計算。我們不需要懂得太多專業(yè)知識,只需要想象一下就可以明白其中原理。就像文章中提到的那套主流的位置追蹤算法SIFT的例子:SIFT的主要工作步驟有三步:1:通過特定的算法找出圖片中的關(guān)鍵點,2:對關(guān)鍵點附加一個詳細的標識,3:通過不斷的對比新舊兩幅圖片上每個關(guān)鍵點的位置求出兩幅圖之間對應(yīng)位置的差別。
不難發(fā)現(xiàn),整個過程重復(fù)性極高,并且其中并沒有過于復(fù)雜的運算。因此使用FPGA進行該算法的計算會比使用CPU快很多。事實上,文章中表示根據(jù)加州大學(xué)洛杉磯分校的一項相關(guān)的實驗結(jié)果,F(xiàn)PGA在運行SIFT指令時的執(zhí)行效率是CPU的足足30倍。處理速度快這么多,耗能又如此小。也難怪有些人會認為FPGA擁有取代CPU和GPU的能力了。
FPGA相對于CPU和GPU,在進行感知處理等簡單重復(fù)的任務(wù)的時候的優(yōu)勢很明顯,按照現(xiàn)在的趨勢發(fā)展下去,F(xiàn)PGA或許會在未來取代機器人開發(fā)中GPU的工作。因為FPGA和GPU雖然都精于大量的重復(fù)運算,但FPGA的能耗會遠低于GPU??墒?strong>FPGA或許永遠沒有辦法取代CPU的地位,而事實上目前的各類應(yīng)用中,F(xiàn)PGA也多作為CPU的協(xié)處理器而出現(xiàn),而不是真正的核心運算單元。而個中原因其實也很簡單,正是我們之前提到過數(shù)次的一個詞:設(shè)計目的。
人類設(shè)計機器人的最終目的是希望它們能變得像我們一樣,用跟我們類似的方式思考,擁有獨立判斷形勢、處理任務(wù)的能力。我們目前還不是很了解大腦工作的具體原理,但無論從經(jīng)驗還是直覺來看,類似人類的思維都不是由無數(shù)邏輯簡單的堆積起來的。因為思維這件事物的復(fù)雜程度已經(jīng)遠遠超出了運算的范疇。比如說,如果你想計算213 x 312而你想將它簡化,你只需要很簡單的將它分解成213個312相加,甚至是重復(fù)213次312個1相加。但如果你想算2的64次方呢?如果你想算sin(27°)呢?甚至如果你想算log230呢?如果你一定要將其分拆成簡單的運算,你就會發(fā)現(xiàn)你需要的資源會以難以想象的速度增長,直到就連把全市的小學(xué)生都叫來也做不完的程度。
就目前的表現(xiàn)來看,人腦顯然不適合大規(guī)模并行計算。而更像是CPU那樣精于單一且深度的思考(運算)。并且人腦的功能也與CPU的設(shè)計定位更吻合。因此無論如何,在腦科學(xué)有突破性進展之前,人們還是會傾向于使用看起來更有潛力的CPU來作為機器人的核心運算部件。或許隨著FPGA的發(fā)展,機器人的越來越多感知部件的數(shù)據(jù)運算會由FPGA來承擔(dān)(就像人類的小腦),但很明顯,一個部件的地位主要、核心與否,不是靠數(shù)量來判斷的。
不能否認FPGA確實能在機器人開發(fā)中發(fā)揮很大的作用。但綜合來看,它和CPU,甚至GPU更像是一種各司其職的地位,動不動就談替代,或許有失嚴謹。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。