在網(wǎng)上有朋友問這個問題:什么是通用計算,有無哲學(xué)上的意義,怎么聯(lián)系上FPGA,DSP,GPU,CPU等等? 這些問題不好回答,要講得有趣且有意義,很不容易。還是要來努力一下,對通用計算做一些解釋,而且希望用此機(jī)會來解釋一下通用學(xué)習(xí)和對通用學(xué)習(xí)的展望。 其實如果要談通用計算,可以從一個非常簡單但是有意思的例子開始。這是著名的書《可計算性和數(shù)理邏輯》中給的。我們有兩個數(shù):XXXIX和XLVIII,這是羅馬數(shù)字,求它們的乘積(也要表達(dá)為羅馬數(shù)字)?先給答案:MDCCCLXXII。但是怎么算出來的呢?如果停留在希臘羅馬的記數(shù)體系中,究竟怎么算,我其實不知道。但是,我可以感受到希臘羅馬人做這個計算的痛苦(你們也能感受到嗎?)。但是,我們可以這樣做,先把羅馬記數(shù)轉(zhuǎn)換成印度-阿拉伯記數(shù),那就是39和48兩個數(shù),然后做我們熟悉的乘法,得到1872,然后再轉(zhuǎn)換回羅馬記數(shù)。這就容易了很多。 其實通用計算的最根本思想,就是這個思想:把可以算的東西變換成標(biāo)準(zhǔn)的東西,用標(biāo)準(zhǔn)的方式來計算,然后再變換回去。 此處說個題外的話。希臘羅馬人做計算非常糟糕,因為他們的記數(shù)體系非常糟糕,而我們中國人做計算非常內(nèi)行,因為我們的記數(shù)體系很先進(jìn)。他們不能很好計算,是極大的壞事,但是他們就朝另一個方向發(fā)展:抽象,公理,完善的推理。焉知非福。這是有哲學(xué)意義的。 回到計算。那么什么是標(biāo)準(zhǔn)的?什么是變換?什么是可以算的? 對于代碼狗來說,這太容易理解,因為是我們天天時時在做的事情??梢运愕木褪浅绦?,標(biāo)準(zhǔn)的就是機(jī)器代碼,變換就是各種編譯器。當(dāng)然,其實,對CTO來說,還可以更高一層次:可以算的是算法,標(biāo)準(zhǔn)的是機(jī)器代碼,變換就是代碼狗加軟件工具,哈哈哈! 這些事情,對我們來說,很容易理解,因為我們現(xiàn)在天天時時在看到這些東西。但是,在80多年前,計算時代正在開啟的那個年代,能夠懂這個道理的,開始時僅有圖靈(其實他當(dāng)時也是模模糊糊的),然后通過讀圖靈的那篇著名文章,以及和圖靈交流,才有了另外一個人也模模糊糊懂了,那就是馮諾曼。再然后,才是逐漸逐漸的更多的人懂了,然后才是我們的這個計算時代,每人都有很多通用計算設(shè)備,每人的正常生活和工作都離不開這些計算設(shè)備。 所以,要懂這些道理非常不容易。要知道,這些人是最厲害的大腦。打岔說一個馮諾曼的故事。據(jù)說,在制作電子計算機(jī)時,一些電子工程師搞幾天都搞不定線路圖,爭論不休,最好只好去找大老板馮諾曼,他安靜聽了雙方的陳述,然后思考了10分鐘,就說應(yīng)該如此如此,結(jié)果就成了。他不是電子工程師,完全是憑邏輯推演得出。可見這些人的厲害。連他們都要花費很多年的時間,才最終理解了通用計算,可見這個概念并不容易。 再講一個故事。馮諾曼發(fā)明了計算機(jī)架構(gòu),現(xiàn)在我們?nèi)匀辉谟?。按說,他應(yīng)該以此為一生中的最重大貢獻(xiàn)為榮。但是,當(dāng)他病危時,有記者去問他,什么是他最驕傲的科學(xué)貢獻(xiàn),他只說了量子力學(xué)的數(shù)學(xué)理論,遍歷理論等,完全沒有提到對計算技術(shù)的貢獻(xiàn)。難道說他不理解他的發(fā)明的極端重要?當(dāng)然不是。他是極端自尊,僅提他自己的完全獨創(chuàng),不提跟隨別人的。他心目中,計算機(jī)就是圖靈的發(fā)明,就是圖靈機(jī),通用圖靈機(jī)已經(jīng)有了通用計算的完整思想,他僅是把圖靈的思想在技術(shù)上實現(xiàn)得更好更具體而已,因此他不提。一嘆!這種極端自尊,現(xiàn)在已經(jīng)很少見了! 那么什么是圖靈機(jī)的關(guān)鍵思想呢?雖然我們天天時時在用,其實也要費一些口舌來講。抄Michael Rabin教授(圖靈獎獲得者)在紀(jì)念圖靈誕生100周年(在以色列)的會上講演中的一段話。 圖靈機(jī)的最基本的原則: 1. 記憶體,符號集 2. 很小的一個指令集(可以小于100個指令) 3. 指令周期 4. 程序存儲 5. 通用計算設(shè)備(一個機(jī)器可以通過編程來計算任何可以計算的函數(shù)/程 序) 這些全部都在圖靈的那篇著名文章《論可計算數(shù)》里面講到。 當(dāng)然,當(dāng)時是非常模糊和含混的,還沒有能夠如此清晰地提煉出來。非??赡墚?dāng)圖靈寫下文章時,就是想到了一個模型可以解決他當(dāng)時的問題,并沒有想到這個模型有那么重大的意義和作用,將開啟一個時代。但是,他肯定清楚,要做機(jī)械式計算,恐怕就是這個路子了,絕對不是一個專用硬件去解決一個特殊問題。 可以用今天的術(shù)語來解說一下,就比較清楚了。1,記憶體就是我們的內(nèi)存,符號集就是{0,1}。2,指令集就是CPU(GPU等等)的指令集,當(dāng)然現(xiàn)在的指令集比較大,因為現(xiàn)在的CPU要復(fù)雜很多。3,指令周期就是CPU的一個周期,就是讀數(shù)據(jù),然后根據(jù)程序,做一些簡單操作,再寫數(shù)據(jù)。4,程序其實也是數(shù)據(jù),存儲在機(jī)器中。5,CPU(其實FPGA,DSP,GPU也都如此)就是通用計算設(shè)備。就是說,我們的程序通過編譯器,變換成了一串機(jī)器指令,而執(zhí)行機(jī)器指令就完成了計算。 這里就CPU和FPGA,DSP,GPU的差別講幾句話。可以比較抽象講,這些芯片都是硬件,也都相當(dāng)于一堆布爾函數(shù)(香農(nóng)的理論),而這些布爾函數(shù)可以執(zhí)行各種指令。注意,在原則上,一個很小的指令集就可以了,而要完成這個小指令集的布爾函數(shù)也不會很復(fù)雜。這對計算機(jī)的早期發(fā)展很重要。當(dāng)然,現(xiàn)在的芯片都很復(fù)雜,指令集很大了,因為要做多得多的事情。特別要說的,現(xiàn)代的芯片都是同時運行多個程序,因此復(fù)雜。FPGA可以說是可以修改的硬件,其代表的布爾函數(shù)可以修改。而DSP是專門用于處理信號的,就是那些布爾函數(shù)中,有很多是專門為信號處理設(shè)置的。GPU中的有很多布爾函數(shù)是專門處理浮點數(shù)運算和圖像處理的。 但是,我們還沒有講一個非常關(guān)鍵點:什么是可以算的?這是一個非常重要的問題。其實到了現(xiàn)在,80多年后,對什么是機(jī)械式計算可以算的,很多人仍然模糊,可能還包括若干專業(yè)人士。不過,這個問題可以說是解決了的,在30年代就有了3個獨立發(fā)展起來的理論,也明確了這3個理論完全等價。這就是哥德爾的遞歸函數(shù)理論,圖靈的圖靈機(jī)理論,丘奇的蘭姆達(dá)運算理論。這3個理論從不同的角度出發(fā),都對什么是機(jī)械式計算做了嚴(yán)格規(guī)定。后來,還發(fā)展出更多的獨立理論,也完全等價??梢杂嬎愕模褪歉绲聽柕倪f歸函數(shù),或者是圖靈機(jī)能計算的,或者是可以用蘭姆達(dá)運算表達(dá)的。其實,用現(xiàn)代語言來說,就是:可以用某種編程語言寫出來的程序就是可以計算的(基本上等于用蘭姆達(dá)運算表達(dá))。對這種程序,我們可以通過工具轉(zhuǎn)換成機(jī)器碼,機(jī)器就可以執(zhí)行這些碼,計算就完成了。最簡單的意義上講,和最前面的那個羅馬數(shù)字的例子所表達(dá)的一樣。注意到,是任何計算,從放歌曲,到玩游戲,到導(dǎo)彈控制,到電網(wǎng)管理,到手機(jī)通訊,到登陸月球,到證明數(shù)學(xué)定理,到機(jī)器人運行,等等,等等??傊?,是任何計算。所以是通用計算。 推薦對計算理論有興趣的朋友讀讀張寅生教授的書《證明和計算》。 說到這里,可以對照一下通用計算和專用計算的這兩條發(fā)展路線。在上世紀(jì)30年代,有非常多的計算設(shè)備被開發(fā)出來。通用計算這條路線我們前面說了,是在理論探討成功的基礎(chǔ)上,再開發(fā)出來的。不過,那時工業(yè)界的主流正是專用計算,就是說用一套專門的硬件來做一些專門的計算。可以看附圖,這是IBM當(dāng)初開發(fā)的公司會計帳目計算機(jī)。但是現(xiàn)在的人已經(jīng)完全忘記了這條曾經(jīng)的主流。為什么呢?這就是有理論和沒有理論的差別,通用和專用的差別。沒有理論,其實就是死路。 這些都是過去了。現(xiàn)在我們在一個全新的時代,面臨全新的問題。那么,我們這個時代的最重要問題是什么?每個人都有自己的看法。我的看法是:最重要的問題是,程序是從哪里來的? 迄今為止,絕大多數(shù)程序都是人編的。但是,這不會繼續(xù)下去了,事實上已經(jīng)很難繼續(xù)了。為什么呢?請大家一定要分清楚,可以計算的,和可以人來編程的,是非常不同的。事實上,已經(jīng)出現(xiàn)了很多領(lǐng)域,人編程的東西完全不夠用了。最典型的例子,就是圍棋程序。AlphaGo的下棋的程序就不是人能夠編出來的。 可以預(yù)見,以后的絕大多數(shù)程序,不是人編的,而是人教的。這就需要建立通用學(xué)習(xí)理論。什么是通用學(xué)習(xí)?就是一個機(jī)器可以學(xué)會所有可能學(xué)會的事情(對照通用計算:一個機(jī)器可以計算所有可能計算的事情)。這就是我們這個時代的任務(wù)。我們需要理解這種機(jī)器的基本性質(zhì),理清這種機(jī)器的基本規(guī)律,建立這種機(jī)器的基本原則,并且逐步工程實現(xiàn),然后應(yīng)用于實際問題。這條路才是和歷史上的通用計算的路一樣的光明偉大的路。 局限于專用學(xué)習(xí),不可能到達(dá)高的境界獲得高的成功。 建立通用學(xué)習(xí)是偉大的任務(wù),是我們這個時代的任務(wù)。我們正在朝這個方向努力。歡迎有志的朋友來加入來參與。 計算已定,學(xué)習(xí)當(dāng)立! 附: 山川馬拉松途中有感 晨曦春林綠耀金, 越嶺馳奔思緒欣。 哥圖馮丘新舊意, 斜陽細(xì)雨釋機(jī)心。 注1,山川馬拉松在紐約上州的山嶺里面穿行,超過26英里,上下1500米。 完成全程花了13個小時多。在山林中獨自穿行,每有新的思想火花產(chǎn)生。 注2,哥圖馮丘,哥德爾,圖靈,馮諾曼,丘奇在80多年前發(fā)展出計算理 論,指導(dǎo)了這幾十年的計算技術(shù)發(fā)展。但是現(xiàn)在這些理論已經(jīng)不足指導(dǎo)新 的發(fā)展,亟需發(fā)展新的理論。 注3,機(jī)心,機(jī)器認(rèn)識論的核心理論。 |
|