如果我有一個OpenMP並行化的C++程序,其中不同的線程不斷地使用一些小的共享數組,只爲讀取數據,在這種情況下會發生錯誤共享嗎?換句話說,錯誤共享只涉及內存寫入操作,或者也可能發生在內存讀取操作中。在openmp中讀取數據時是否發生錯誤共享?
1
A
回答
2
通常使用的緩存一致性協議(如MESI(修改,排他,共享,無效))對稱爲「共享」的緩存行具有特定狀態。如果多個處理器讀取高速緩存行,則處於這種狀態。每個處理器都有一個高速緩存行的副本,並且可以安全地從中讀取,而不會發生虛假共享。在寫入時,通知所有處理器使作爲虛假共享的主要原因的緩存線無效
3
虛假共享是一個性能問題,因爲它會導致需要時間的緩存行的額外移動。當兩個並不真正共享的變量駐留在同一行中並且單獨的線程更新每個變量時,線必須在機器周圍反彈,這會增加每個訪問的延遲。在這種情況下,如果變量位於不同的行中,則每個線程將保留「其」行的本地修改副本,並且不需要數據移動。
但是,如果您沒有更新某行,則不需要進行數據移動,並且分享對性能沒有影響,除了您可能已經能夠獲得每個線程確實需要的數據,而不是它沒有的數據。這是一個小的,次要的效果。雖然。所以除非你知道你的緩存容量有限,否則忽略它!
相關問題
- 1. OpenMP共享數據
- 2. 共享時發生錯誤(iOS共享套件用於推特)
- 3. 在Firefox中讀取單選按鈕值時發生jQuery錯誤,但在Safari中未讀取時發生錯誤
- 4. 在讀取數據文件時發生段錯誤
- 5. 嘗試共享D.錯誤的功能時發生錯誤。
- 6. 如果您只讀取共享數據,是否存在數據競爭?
- 7. 併發讀寫OpenMp中的共享變量
- 8. C和OpenMP的:指向共享只讀數據減慢執行
- 9. Java從MySql數據庫讀取時發生PreparedStatement錯誤
- 10. Xamarin.forms共享項目在創建時發生錯誤
- 11. OpenMP的錯誤:「X」是預先確定的「共享」的「私人」
- 12. openmp共享陣列
- 13. OpenMP虛假共享
- 14. OpenMP中的共享向量
- 15. 在OpenMP共享陣列
- 16. OpenMP:'共享'的預定'共享'?
- 17. 讀取內存是否可能發生分段錯誤?
- 18. 在Android中從包裹中讀取時發生錯誤
- 19. (OAuthException - #1)(#1)創建共享時發生錯誤
- 20. 創建共享庫時發生鐺聲錯誤
- 21. Multipule帖子給出:OAuthException ::(#1)時發生錯誤,創建共享
- 22. 編譯共享庫時發生Knitr和Rcpp錯誤1
- 23. Facebook OAuthException,代碼:1,創建共享[HTTP 400]時發生錯誤)
- 24. 從DataReader讀取數據時發生OutOfMemoryException
- 25. 從Firebase讀取數據時發生UnrecognizedPropertyException
- 26. 在Android錯誤中使用共享首選項時獲取舊數據?
- 27. 發送數據時發生ElasticSearch錯誤
- 28. 發送數據時發生curl錯誤
- 29. 在Excel中讀取空白單元格時發生錯誤
- 30. 在Coldfusion中讀取ms-excel文件時發生錯誤
afaik錯誤分享是關於不必更改數據的不必要的重新加載,因爲它與確實發生更改的數據在同一頁面上。如果什麼都沒有寫,那麼就沒有必要重新加載任何東西,因此沒有虛假的共享 – user463035818
在這裏看到:https://en.wikipedia.org/wiki/False_sharing – user463035818
我想到了假分享的情況下,當幾個線程工作使用相同的緩存行,處理器必須同步它們才能維持一致性,如此處所述http://www.drdobbs.com/architecture-and-design/sharing-is-the-root-of-all-contention/214100002 –