冯 . 诺依曼体系结构对计算机发展的限制
馮 . 諾依曼體系結構對計算機發(fā)展的限制
劉愛貴
( 高能物理研究所計算中心 北京 ? 2003年)
摘要 : ?? 本文簡單介紹了傳統(tǒng)馮 . 諾依曼體系結構的原理和特點,從計算模型和存儲模型兩個方面分析了這種體系結構的局限性,并對目前非馮體系結構的發(fā)展情況作了淺出的分析和展望。
關鍵詞 : 計算模型 存儲模型 語義間隔 映射
?
?
從計算機誕生那天起,馮 . 諾依曼體系結構占據(jù)著主導地位,幾十年來計算機體系結構理論并沒有新理論出現(xiàn)。隨著計算機應用范圍的迅速擴大,使用計算機解決的問題規(guī)模也越來越大,因此對計算機運算速度的要求也越來越高。而改進計算機的體系結構是提高計算機速度的重要途徑,從而促進了計算機體系結構的發(fā)展,出現(xiàn)了諸如數(shù)據(jù)流結構、并行邏輯結構、歸約結構等新的非馮諾依曼體系結構。
馮 . 諾依曼體系結構是現(xiàn)代計算機的基礎,現(xiàn)在大多計算機仍是馮 . 諾依曼計算機的組織結構,只是作了一些改進而已,并沒有從根本上突破馮體系結構的束縛。馮 . 諾依曼也因此被人們稱為“計算機之父”。然而由于傳統(tǒng)馮 . 諾依曼計算機體系結構天然所具有的局限性,從根本上限制了計算機的發(fā)展。
馮 . 諾依曼型計算機以存儲程序原理為基礎。存儲程序原理的基本思想是指令驅動(或控制驅動),指令和數(shù)據(jù)混合存儲。程序執(zhí)行時, CPU 就能按照程序指定的邏輯順序逐條把指令和數(shù)據(jù)從存儲器中取出并加以執(zhí)行,自動地完成由程序所描述的處理工作。馮 . 諾依曼型計算機主要由控制器、運算器、存儲器、輸入和輸出設備五大部件組成,以運算器為中心,系統(tǒng)內各部件間的信息傳送都要經(jīng)過運算器中的寄存器。馮 . 諾依曼體系結構的基本特征有:
(1) 采用存儲程序方式,指令和數(shù)據(jù)不加區(qū)別混合存儲在同一個存儲器中,指令和數(shù)據(jù)都可以送到運算器進行運算,即由指令組成的程序是可以修改的。
(2) 存儲器是按地址訪問的線性編址的一維結構,每個單元的位數(shù)是固定的。
(3) 指令由操作碼和地址組成。操作碼指明本指令的操作類型 , 地址碼指明操作數(shù)和地址。操作數(shù)本身無數(shù)據(jù)類型的標志,它的數(shù)據(jù)類型由操作碼確定。
(4) 通過執(zhí)行指令直接發(fā)出控制信號控制計算機的操作。指令在存儲器中按其執(zhí)行順序存放,由指令計數(shù)器指明要執(zhí)行的指令所在的單元地址。指令計數(shù)器只有一個,一般按順序遞增,但執(zhí)行順序可按運算結果或當時的外界條件而改變。
(5) 以運算器為中心, I/O 設備與存儲器間的數(shù)據(jù)傳送都要經(jīng)過運算器。
(6) 數(shù)據(jù)以二進制表示。
從本質上講,馮 . 諾依曼體系結構的本征屬性就是二個一維性,即一維的計算模型和一維的存儲模型,簡單地說“存儲程序”是不確切的。而正是這二個一維性,成就了現(xiàn)代計算機的輝煌,也限制了計算機的進一步的發(fā)展,真可謂“成也馮,敗也馮”。
馮·諾依曼計算機的軟件和硬件完全分離,適用于作數(shù)值計算。這種計算機的機器語言同高級語言在語義上存在很大的間隔,稱之為馮 . 依曼語義間隔。造成這個差距的其中一個重要原因就是存儲器組織方式不同,馮·諾依曼機存儲器是一維的線性排列的單元,按順序排列的地址訪問。而高級語言表示的存儲器則是一組有名字的變量,按名字調用變量,不考慮訪問方法,而且數(shù)據(jù)結構經(jīng)常是多維的(如數(shù)組,表格)。另外,在大多數(shù)高級語言中,數(shù)據(jù)和指令截然不同,并無指令可以像數(shù)據(jù)一樣進行運算操作的概念。同時,高級語言中的每種操作對于任何數(shù)據(jù)類型都是通用的,數(shù)據(jù)類型屬于數(shù)據(jù)本身,而馮 . 諾依曼機的數(shù)據(jù)本身沒有屬性標志,同一種操作要用不同的操作碼來對數(shù)據(jù)加以區(qū)分。這些因素導致了語義的差距。如何消除如此大的語義間隔,這成了計算機面臨的一大難題和發(fā)展障礙。
高級語言程序設計的過程,就是一個“分析問題——建立數(shù)學模型——選擇數(shù)據(jù)結構——設計算法——翻譯成計算機語言”的過程。最后通過編譯器編譯成機器識別的可執(zhí)行代碼由計算機運行。在馮諾依曼體系結構中,程序就是數(shù)據(jù)和代碼的集合,數(shù)據(jù)是程序操縱的對象,其組織方式就是數(shù)據(jù)結構;代碼則是程序的控制流程,負責對數(shù)據(jù)作某種變換,建立輸入和輸出數(shù)據(jù)之間的某種一一映射關系,這種映射變換的流就是所謂的算法步驟。由于機器語言與高級語言存在嚴重的語義間隔,不管你在高級語言中采用何種數(shù)據(jù)結構,多維數(shù)組、二叉樹還是圖,最終在存儲器上都將轉換成一維的線性存儲模型進行存儲。因而將高級語言翻譯成機器語言就需要設計復雜的算法來進行映射,將高級語言的指令和數(shù)據(jù)結構變換成能被計算機識別的指令和數(shù)據(jù)。這些語義差距間的變換工作絕大部分要由編譯程序來承擔,從而給編譯程序增加了很多的工作量。
馮 . 諾依曼計算機一維存儲模型要求 CPU 訪問 MEMORY 時嚴格按照地址順序,從頭至尾進行查找訪問。而指令和數(shù)據(jù)是離散地存儲在存儲器上的,造成內存訪問 50% 以上的微操作都是空操作,只作地址變化,而沒有進行實際的存取操作。并且每次只能對一個存儲單元進行操作,指令需要多個數(shù)據(jù)就必須事先從 MEMORY 中一個一個存儲單元取出,而無法一次性取出,等所需數(shù)據(jù)全部就緒后指令才能得以執(zhí)行。指令寫存儲器操作也是如此,只能一個一個存儲單元寫回,不可以一次完成多個存儲單元的寫操作。這些都浪費了大量的處理器時間。雖然高級語言支持各種數(shù)據(jù)結構,但是這是提供給程序員使用的,機器并不識別,只有通過編譯程序進行復雜的語義轉換,本質上沒有改變這種存儲模型。
馮 . 諾依曼體系結構的最大特點是“共享數(shù)據(jù),串行執(zhí)行”的一維計算模型。按照這種結構,指令和數(shù)據(jù)存放在共享的存儲器中內, CPU 從中取出指令和數(shù)據(jù)進行相應的運算。由于存儲器存取速度遠低于 CPU 運算速度,而且每一時刻只能訪問存儲器的一個單元,從而使計算機的運算速度受到很大限制, CPU 與共享存儲器間的數(shù)據(jù)交換造成了影響高速計算和系統(tǒng)性能的“瓶頸”。在馮 . 諾依曼機結構中,指令的執(zhí)行次序受計數(shù)器的控制。 CPU 根據(jù)計數(shù)器指出的存儲器地址訪問相應的單元,指令計數(shù)器值增 1 指向下一條指令,因而指令是串行執(zhí)行的。這種計算方式稱為“控制驅動”,就是說由指令控制器控制指令執(zhí)行的次序和時機,當它指向某條指令時才驅動該指令的執(zhí)行。在實際程序中雖然可能存在大量的可以并行執(zhí)行的指令,但是馮 . 諾依曼體系結構卻難以支持這些指令的并行執(zhí)行。這種順序控制流結構從根本上限制了計算過程并行性的開發(fā)和利用,迫使程序員受制于“逐字思維方式”的傳統(tǒng)程序設計風格的缺陷,語言臃腫無力,缺少必要的數(shù)學性質,從而使程序復雜性無法控制,軟件質量無法保證,生產(chǎn)率無法提高。所以從理論上講,不存在真正意義上的并行計算機,這就從根本上限制了計算機性能的提高。
在實際的程序中可能大量存在這樣的指令序列:前面的某些指令所需的操作數(shù)據(jù)還沒到,正在等待或正在進行 MEMORY 訪問;然而之后的若干指令所需要的操作數(shù)據(jù)已在前面取出,或者就是無操作數(shù)指令。原本后面的指令可以提前或者并發(fā)執(zhí)行,由于馮 . 諾依曼計算機一維的計算模型,指令只能串行執(zhí)行,使得這種可能成為了不可能,指令序列只能按照事先按排好的次序順序地執(zhí)行。這樣的計算模型嚴重浪費了有限的計算機資源,不僅工作效率低而且容易形成提高性能的系統(tǒng)瓶頸,使得計算機的運算速度很難從根本上得到提高,成了制約計算機發(fā)展的枷鎖。
馮 . 諾依曼體系結構的局限嚴重束縛了現(xiàn)代計算機的進一步發(fā)展,而非數(shù)值處理應用領域對計算機性能的要求越來越高,這就亟待需要突破傳統(tǒng)計算機體系結構的框架,尋求新的體系結構來解決實際應用問題。目前在體系結構方面已經(jīng)有了重大的變化和改進,如文章開頭提到的并行計算機、數(shù)據(jù)流計算機以及量子計算機、 DNA 計算機等非馮計算機,它們部分或完全不同于傳統(tǒng)的馮 . 諾依曼型計算機,很大程度上提高了計算機的計算性能。
如并行計算機,它采用一種所謂的并行計算模型,將并行處理引入了計算機體系結構設計中。并行處理將一個傳統(tǒng)串行處理的任務分解開來,并采用并行算法將其分配給多個處理器同時處理,即在同一時間間隔內增加計算機的操作數(shù)量。直覺上,我們認為串行計算模型解決不了的問題完全可以用并行計算模型來解決,甚至會想,并行計算機系統(tǒng)求解問題的速度將隨著處理器數(shù)目的不斷增加而不斷提高,從而解決難解性問題,其實這是一種誤解。當將一個問題分解到多個處理器解決時,由于算法中不可避免地存在必須串行執(zhí)行的操作,從而大大限制了并行計算機系統(tǒng)的加速能力。根據(jù)阿達爾定律,當串行操作僅占全部操作 1% 時,即使 CPU 數(shù)目無窮多,也只能獲得 100 倍串行執(zhí)行的加速比。
這些新的非馮計算機體系結構,于傳統(tǒng)馮 . 諾依曼體系結構相比較,在提高計算機性能上顯現(xiàn)出了很大的優(yōu)勢。但仍然存在許多需要改進和突破的地方,計算機體系結構領域存在著很多發(fā)展機遇和挑戰(zhàn)。
?
?
?
參考文獻:
[1] 計算機科學與技術方法論 董榮勝、古天龍著――人民郵電出版社
[2] 計算機系統(tǒng)結構 孫強南、孫昱東著――科學出版社
[3] 并行計算機系統(tǒng)結構 白中英、楊旭東著――科學出版社
總結
以上是生活随笔為你收集整理的冯 . 诺依曼体系结构对计算机发展的限制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3操作USB设备
- 下一篇: Vue+Django REST fram