2015-10-23 21 views
5

x86指令是否可以跨越多個緩存行,或者它們是否會出現seg-fault?原子指令是否跨越緩存行?

不問他們是否應該,只是它是否允許。

(我知道某些SSE指令必須在高速緩存邊界對齊)

回答

4

是的,它是允許的。你也可以試試它。或者閱讀指令集參考:

LOCK前綴的完整性不受內存字段對齊 的影響。內存鎖定被觀察爲任意 未對齊的字段。

但也參見:

例外

#AC(0)如果啓用對齊檢查和未對齊的內存引用而當前特權級別爲3

請注意,通常不會啓用對齊檢查。

4

這是允許的,但由於鎖可能無法維護在緩存中,並且可能會降級到完整的總線鎖(完全系統失速,可能會導致性能下降),但性能可能會大幅下降。

參見例如 - https://software.intel.com/en-us/articles/implementing-scalable-atomic-locks-for-multi-core-intel-em64t-and-ia32-architectures

在英特爾486處理器,用於與大打在性能上沿斷言總線上的 鎖上的鎖前綴的日子。從英特爾奔騰Pro架構 開始,總線鎖被轉換爲 緩存鎖。如果鎖位於不可緩存的內存中,或者鎖定超出了緩存行邊界,則仍然會在總線上斷言最新的現代體系結構。 這兩種情況都不太可能,所以大多數鎖前綴將被變換爲緩存鎖,其價格要便宜得多。

它可能根據處理器規格而有所不同,但請注意,另一個考慮因素是交叉線邊界也可能意味着要越過頁面邊界,這更難以維護(因此甚至更可能降級)。

相關問題