爲什麼在設計個人電腦時,基於馮諾依曼體系結構的計算機體系結構優於哈佛體系結構;而哈佛架構用於設計基於微機的計算機系統和基於DSP的計算機系統?von neumann vs harvard architecture
8
A
回答
10
目前用於PC的CPU設計同時具有哈佛和馮諾依曼元素(,更多馮諾依曼,儘管)。
如果你看看L1緩存,你會發現在AMD,ARM和Intel系統中有指令L1緩存和數據L1緩存,可以獨立並行訪問。這是哈佛部分。但是,在L2,L3或DRAM中,數據和代碼是混合的。這是馮諾伊曼部分。
那麼爲什麼不是採用PC的純哈佛架構?我的意見是它沒有意義。如果您對大多數應用程序進行概要分析,您會發現L1指令緩存未命中率非常小,爲。這意味着通常代碼大小不是問題。因此,爲代碼設計一個完全獨立的路徑是沒有意義的。數據可能變得非常大,但代碼不能真正。
在DSP中,使用單獨的代碼和數據路徑是有意義的。這是因爲DSP的工作主要是「流數據」,這意味着對緩存的需求相當小。此外,DSP代碼可以包含增加代碼大小的預先計算的係數。所以在數據大小和代碼大小之間取得平衡,這意味着使用哈佛架構是有意義的。
4
馮諾依曼體系結構和哈佛體系結構之間的根本區別在於,在哈佛體系結構中,指令存儲器與數據存儲器不同,在馮諾依曼中它們是相同的。這反映了PC的實際情況(其中程序存儲和讀取來自同一介質的數據,通常是磁盤和RAM)以及微控制器(其中程序存儲在非易失性存儲器中,數據存儲在易失性存儲器中)。
相關問題
- 1. Hortonworks vs Cloudera Architecture Difference
- 2. asp.net中的Connected vs Disconnected Architecture
- 3. SSAS Dimension architecture
- 4. win forms architecture c#
- 5. CLRMD Architecture MisMatch
- 6. Domain-Event-Driven Architecture
- 7. Android Clean Architecture
- 8. S#arp Architecture + NHibernate.Search + DocumentId
- 9. Neumann的隨機生成器 - Python 3
- 10. 更新命令-architecture問題
- 11. Flux Architecture中的測試店
- 12. T4 for Sharp Architecture/Northwind問題
- 13. 在Clean Architecture中使用NSFetchedResultsController
- 14. Wordpress - Harvard Gazette - 他們是怎麼做X的?
- 15. .NET培訓課程幫助(Architecture/TDD)
- 16. S#arp Architecture Repository.DbContext.CommitTransaction()不尋常的行爲
- 17. Sharp Architecture Repository中的實體驗證
- 18. 製作WCF Northwind Sharp Architecture作品
- 19. Microsoft ASP .NET Web API,MVC 4和SPA Architecture
- 20. 關於Shared Nothing Architecture的體驗文檔
- 21. 「architecture-neutral」和「portable」有什麼區別?
- 22. 從哪裏可以在Clean Architecture中展示MFMailComposeViewController?
- 23. (ARCHITECTURE pcarch OF ENTITY program_counter):錯誤:類型不匹配
- 24. 使用Fluent配置替換Sharp Architecture的NHibernate.config
- 25. 如何在RecyclerView適配器內部使用Architecture Components ViewModel?
- 26. Zend Architecture在網站上的最佳使用方式
- 27. 在控制器之間共享非單體狀態(Angular Architecture)
- 28. nvcc fatal:值'sm_13'沒有爲選項'gpu-architecture'定義
- 29. Android Clean Architecture UseCase用於存儲庫的每種方法?
- 30. PHP會話與Share-Nothing-Architecture有衝突嗎?
*純粹*哈佛將意味着單獨的RAM(或ROM),而不僅僅是分割高速緩存。因此,您剛編譯的代碼可能必須從數據存儲器寫入磁盤,並從磁盤重新加載到程序存儲器中。只有當代碼是固定的,並在ROM中才有意義。 (即便如此,正如你指出的那樣,統一緩存在L1之前是有意義的)。拆分緩存的部分原因是吞吐量/延遲:您無法構建與兩個單獨的32k緩存的總吞吐量一樣快的64k緩存。 [也見這個答案](http://stackoverflow.com/a/38549736/224132)關於小緩存的速度技巧。 – 2016-09-21 01:37:18