簡體   English   中英

是否有什么可以阻止CPU在執行預定的set操作之前等待很長時間?

[英]Is there anything that prevents the CPU from waiting a long time before executing its scheduled set operations?

假設我有兩個共享全局變量x線程。 Thread A的工作是將值設置為xThread B的工作是讀取x 現在,每個線程(或我假設的每個核心)將具有x的緩存副本。

假設Thread Ax的值設置為12345 現在, Thread A的緩存可以保持不變,因為CPU可以安排set操作稍后執行,因此緩存一致性協議將不起作用,因此當Thread B讀取x的值時,它將讀取一個舊值。

我的問題是:是否有什么可以阻止CPU在執行其計划的set操作之前等待很長時間(例如:10分鍾)?

注意: 我知道我可以使用內存屏障來強制CPU立即執行其計划的設置操作,但是我很好奇知道如果不使用內存屏障會發生什么情況。

在過去的15年中,我沒有閱讀過任何CPU文檔都沒有比“ X在Y之前可見”更具體地講同步內存所花費的時間。 這樣做的原因是因為內存協議太復雜了,幾乎不可能對在寫操作變為可見之前可以發生的事情(DMA,糾錯,TLB查找,SMM等)設定上限。

您可以構建一個理論上的場景,在這種情況下,您的寫入將永遠不會變得可見,實際上,如果您想要這樣做,只需找到CPU的勘誤文檔,它們將提供大量示例說明如何實現。 但是實際上呢? 不,您永遠不會等待10分鍾。 您正在運行的內核將接收中斷,這些中斷將執行內存讀取和寫入操作,這些操作將刷新存儲緩沖區並逐出您的緩存行。

話雖如此,您仍然應該使用內存同步,但是出於不同的原因。 用於強制訂購。 如果值x是您要發送到另一個線程的唯一信息位,則它將最終變得可讀,並且可以避免不同步。 但是,幾乎從來沒有這樣。 通常,值x表示值y包含一些有趣的東西,您需要進行適當的同步,以在x對其他線程可見時知道y的內容正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM