在多個核心之間共享數據的效率最高。當然你可以使用共享內存,但這也是有代價的。說一個核心是不斷寫入一個變量,另一個核心必須不斷讀取它。使用MESI高速緩存一致性協議,寫入內核會導致讀核心立即使其高速緩存失效。所以在這種情況下,共享數據的最有效方式是什麼?在覈心之間共享數據的最有效方式
3
A
回答
3
在一個典型的共享內存機,場景,您所描述可能已經是最有效的方法是可行的:
- 核心A寫入內存位置。核心B的副本無效。
- 核心B抓取內存或核心A的緩存中的數據。
無論採用哪種方式,數據都必須從核心A發送到核心B.現代處理器中的高速緩存一致性有時會支持直接緩存到高速緩存的傳輸,而不會直接進入內存。
想要避免的情況(只要有可能)就是過度鎖定共享資源。這會增加雙向緩存一致性流量(和延遲)。
0
一種常見和普遍的方法是讓每個核心的數據結構可能時。
例如,在生產者 - 消費者場景中,每個消費者處理器可以具有隊列的一部分並在其上進行操作。只有當他們的工作項目用完時,他們才能聯繫生產者處理器。
當然,這並不總是可能的,但如果工作項可以架構這種方式,降低了核心之間的相互依存,並讓應用程序擴展到內核的數量。
此技術已在Solaris OS中得到廣泛使用。欲瞭解更多信息,請參閱Multicore Application Programming: for Windows, Linux, and Oracle Solaris。
0
相關問題
- 1. 在應用程序之間共享核心數據
- 2. 在iOS和OS X之間共享iCloud核心數據X
- 3. 核心數據 - 在多個線程之間共享NSManagedObjects
- 4. 如何在多個用戶之間共享核心數據?
- 5. 在應用程序之間共享核心數據存儲
- 6. 在類之間共享數據庫連接的最佳方式
- 7. iPhone應用程序之間的核心數據存儲共享
- 8. 核心數據的NSPrivateQueueConcurrencyType和線程之間共享對象
- 9. 商店之間的核心數據共享對象
- 10. 什麼是使用核心數據的最有效方式?
- 11. 在幾個php頁面之間共享功能的最有效方式
- 12. 共享核心數據的數據模型的應用程式
- 13. MVC在Contoller動作方法和視圖之間共享數據表的最有效方式
- 14. 備份/共享核心數據存儲
- 15. 在視圖之間傳遞數據的最有效方式
- 16. 在asp.net核心中的請求之間是否共享HttpContext.Items?
- 17. 在java中的類之間共享更新的數據的最佳方式
- 18. 在數據庫之間共享數據
- 19. 在.NET應用程序實例之間共享數據的最佳方式?
- 20. 在存儲過程和觸發器之間共享數據的最佳方式
- 21. 哪一個是在akka演員之間共享數據的最佳方式?
- 22. 在不同控制器之間共享數據的最佳角度方式
- 23. ViewControllers之間共享數據
- 24. 共享數據JVM之間
- 25. Solr字段類型如何在多個核心之間共享?
- 26. 在多個項目之間共享核心代碼庫
- 27. 將核心數據與JSON API同步的最有效方法
- 28. 在活動之間共享httpClient實例的最佳方式?
- 29. 在類之間共享Java變量的最佳方式
- 30. 在WPF和Silverlight之間共享代碼的最佳方式
那麼我讀過的是,MESI協議並不做緩存,緩存傳輸和MESI是Intel處理器使用的協議型。 AMD通過使用MOESI協議來實現這一點,但缺點是當緩存處於乾淨的共享狀態時從內存中讀取數據。 – pythonic 2012-04-08 19:45:22
據我所知,現代處理器實現比這更復雜的協議。他們都「基於」MESI及其變體,但通常更復雜。例如,Power7具有13狀態一致性協議。我不確定英特爾使用的是什麼(因爲它可能是專有的),但基於我讀過的內容,它具有窺探機制...... – Mysticial 2012-04-08 19:51:21
基本上,我試圖說依靠硬件緩存一致性是可能是共享內存機器上共享數據的最快(也是唯一)方式。在分佈式機器上,你沒有這個選項,所以你需要處理消息傳遞。 – Mysticial 2012-04-08 19:53:46