? wiki中,馮·諾伊曼結(jié)構(gòu),有做說明,建議讀者直接去搜索查看.讀者本篇文章僅僅是做一個記錄.
存儲程序計算機在體系結(jié)構(gòu)上主要特點有:
- 以運算單元為中心
- 采用存儲程序原理
- 存儲器是按地址訪問骤素、線性編址的空間
- 控制流由指令流產(chǎn)生
- 指令由操作碼和地址碼組成
- 數(shù)據(jù)以二進制編碼
https://upload.wikimedia.org/wikipedia/commons/8/84/Von_Neumann_architecture.svg
將CPU與存儲器分開并非十全十美匙睹,反而會導致所謂的馮·諾伊曼瓶頸(von Neumann bottleneck):在CPU與存儲器之間的流量(數(shù)據(jù)傳輸率)與存儲器的容量相比起來相當小,在現(xiàn)代電腦中济竹,流量與CPU的工作效率相比之下非常小赞庶,在某些情況下(當CPU需要在巨大的數(shù)據(jù)上運行一些簡單指令時),數(shù)據(jù)流量就成了整體效率非常嚴重的限制监右。CPU將會在數(shù)據(jù)輸入或輸出存儲器時閑置督怜。由于CPU速度遠大于存儲器讀寫速率,因此瓶頸問題越來越嚴重袭景。
原文如下:
Surely there must be a less primitive way of making big changes in the store than by pushing vast numbers of words back and forth through the von Neumann bottleneck. Not only is this tube a literal bottleneck for the data traffic of a problem, but, more importantly, it is an intellectual bottleneck that has kept us tied to word-at-a-time thinking instead of encouraging us to think in terms of the larger conceptual units of the task at hand. Thus programming is basically planning and detailing the enormous traffic of words through the von Neumann bottleneck, and much of that traffic concerns not significant data itself, but where to find it.[[3]](https://zh.wikipedia.org/wiki/馮·諾伊曼結(jié)構(gòu)#cite_note-backus-3)[4]
? 在CPU與存儲器間的緩存存儲器抒解了馮·諾伊曼瓶頸的性能問題唁桩。另外,分支預測(branch prediction)算法的創(chuàng)建也幫助緩和了此問題耸棒。巴科斯在1977年論述的“智能瓶頸”已改變甚多荒澡。且巴科斯對于此問題的解決方案并沒有造成明顯影響。現(xiàn)代的函數(shù)式編程以及面向?qū)ο?/a>編程已較少運行如早期Fortran一般會“將大量數(shù)值從存儲器搬入搬出的操作”与殃,但平心而論单山,這些操作的確占用電腦大部分的運行時間捏肢。