1
A
回答
2
如果您使用的機器具有連貫的緩存(大多數主流機器),則通常不需要緩存行刷新,並且flush指令不太可能對緩存做任何明確的操作。在一個連貫的系統中,任何寫入一個內核緩存的內容都可以立即被所有其他內核看到。
但是,FLUSH指令可能充當內存屏障或fence,並且它還會強制編譯器爲其可能已存儲在寄存器中的值生成存儲指令。
有指令here,包括本說明的一個很好的說明:
Q17:是對$ OMP沖水指令所必需的高速緩存一致性的系統上!?
A17:是的flush指令是必要的。查看OpenMP規範中的使用示例。該指示對於指示編譯器必須將該變量寫入存儲器系統/從存儲器系統讀取是必需的,即,該變量不能通過代碼中的刷新「語句」保存在本地CPU寄存器中。
緩存一致性確保瞭如果一個CPU執行從/到內存的讀取或寫入指令,則系統中的所有其他CPU在訪問時都會從該內存地址獲取相同的值。所有緩存都將顯示一個連貫的值。但是,在OpenMP標準中,必須有一種方法來指示編譯器實際插入讀/寫機器指令,而不是延遲它。爲循環生成高效的機器語言代碼時,將循環變量保存在寄存器中是非常常見的。
如果您使用的機器具有非一致性緩存,那麼您可能正在使用超級計算機,並應諮詢熟悉您的體系結構和工具集的本地專家。
相關問題
- 1. MemoryError是否會導致python刷新其緩存?
- 2. OpenMP flush與flush(列表)
- 3. 高速緩存行刷新是否將整行寫入內存?
- 4. registerTempTable是否會導致表被緩存?
- 5. php 5.3導致flush()失敗?
- 6. 存在新對象的緩存策略導致緩存失效
- 7. 由於CUcontext緩存,Matlab是否會導致Cuda泄漏內存?
- 8. Akamai緩存刷新
- 9. 刷新LRU緩存
- 10. Flush iOS指令緩存
- 11. SqlCE刷新間隔 - 默認設置是否會導致損壞?
- 12. 由於實際刷新高速緩存,是否可以「統計」大量文件導致性能影響?
- 13. onclick刷新但不是從緩存?
- 14. 是否加入std :: thread flush內存?
- 15. 刷新iFrame(緩存問題)
- 16. 進程跳轉內核時是否刷新了L1緩存?
- 17. 的Android - ION緩存導致
- 18. iis6中的刷新緩存
- 19. 刷新指令的緩存
- 20. Symfony的app.php刷新緩存
- 21. Symfony的緩存明確
- 22. Haml的 - 端緩存明確
- 23. 自動刷新緩存
- 24. django刷新查詢緩存
- 25. SolrJ是否執行緩存?
- 26. NSFetchedResultsController〜緩存導致問題?
- 27. 如果未明確關閉,是否會導致ResultSet泄漏?
- 28. Rails行動緩存刷新後過期
- 29. print_r導致頁面刷新?
- 30. GUI刷新導致異常
謝謝,這解釋了它。 – user2887306