iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 19
1
Software Development

Golang入門到進階實戰系列 第 19

Day18 平行運算concurrency

馮諾伊曼 瓶頸

馮諾依曼

馮諾 依曼出生於1903年澳宏帝國布達佩 斯,1957年2月8日卒於美國,終年53歲。他是現代電子計算機與博弈論的重要創始人。在泛函分析、遍歷理論、幾何學、拓撲學和數值分析等眾多數學領域及計算機學、量子力學和經濟學中都有重大貢獻。

馮諾依曼架構

馮諾依曼在二戰及戰後受美國國防部邀請參與了"曼哈頓計畫",擔任美國軍方製造原子彈的顧問,由於在曼哈頓工程中需要大量的運算,因此馮諾依曼提出了存儲程序邏輯架構,此架構就是我們熟知的馮諾依曼架構,又稱為曼哈頓架構。
https://ithelp.ithome.com.tw/upload/images/20191004/20120698dIFaiveFs7.png
馮諾依曼架構的定義如下:

  • 以遲算單元為中心
  • 採用存儲程序原理
  • 存儲器是按照地址訪問、線性編址的空間
  • 控制流由指令流產生
  • 指令由操作碼和地址碼組成
  • 數據以二進制編碼

貢獻

馮諾 依曼架構將存儲器和運算單元分離,指令和數據 均放置於存儲器中,雖然在規範中計算單元依然是核心,但是馮諾依曼架構引導了日後以存儲器為該心的現代計算機誕生。

該架構的另一項重要項獻是用二進制取代十進制,大幅降低了運算電石的複雜度,這也成了電晶體時代超大規模集成電路誕生的重要基礎。

馮諾依曼瓶頸

將CPU與記憶體分開並非十全十美,反而會導致所謂的馮·諾伊曼瓶頸(von Neumann bottleneck)。在CPU與記憶體之間的流量(資料傳輸率)與記憶體的容量相比起來相當小,在某些情況下(當CPU需要在巨大的資料上執行一些簡單指令時),資料流量就成了整體效率非常嚴重的限制。CPU將會在資料輸入或輸出記憶體時閒置。由於CPU速度遠大於記憶體讀寫速率,因此瓶頸問題越來越嚴重。

而馮·諾伊曼瓶頸是約翰·巴科斯在1977年ACM圖靈獎得獎致詞時第一次出現,根據巴科斯所言:

“……確實有一個變更儲存裝置的方法,比藉由馮·諾伊曼瓶頸流通大量資料更為先進。瓶頸這詞不僅是對於問題本身資料流量的敘述,更重要地,也是個使我們的思考方法侷限在『一次一字元』模式的智能瓶頸。它使我們怯於思考更廣泛的概念。因此編程成為一種計畫與詳述通過馮·諾伊曼瓶頸的字元資料流,且大部分的問題不在於資料的特徵,而是如何找出資料。

CPU與記憶體間的快取記憶體抒解了馮·諾伊曼瓶頸的效能問題。另外,分支預測(branch prediction)演算法的建立也幫助緩和了此問題。巴科斯在1977年論述的「智能瓶頸」已改變甚多。且巴科斯對於此問題的解決方案並沒有造成明顯影響。現代的函數式編程以及物件導向編程已較少執行如早期Fortran一般會「將大量數值從記憶體搬入搬出的操作」,但平心而論,這些操作的確佔用電腦大部分的執行時間。


上一篇
Day 18 常用基本庫介紹
下一篇
Day20 Concurrency vs Parallelism
系列文
Golang入門到進階實戰30

尚未有邦友留言

立即登入留言