Какая разница в логике и производительности между LOCK XCHG и MOV+MFENCE?

В чем разница в логике и производительности между x86-инструкциями LOCK XCHG а также MOV+MFENCE для создания хранилища последовательной согласованности.

(Мы игнорируем результат загрузки XCHG; другие компиляторы, кроме gcc, используют его для эффекта store + memory memory.)

Верно ли, что для последовательной согласованности во время выполнения атомарной операции: LOCK XCHG блокирует только одну строку кэша, и наоборот MOV+MFENCE блокирует весь кеш-L3(LLC)?

1 ответ

Решение

Разница в цели использования.

MFENCE (или SFENCE или LFENCE) полезен, когда мы блокируем часть области памяти, доступную из двух или более потоков. Когда мы атомарно устанавливаем блокировку для этой области памяти, мы можем после этого использовать все неэтомные инструкции, потому что они быстрее. Но мы должны вызвать SFANCE (или MFENCE) одну инструкцию, прежде чем разблокировать область памяти, чтобы гарантировать, что заблокированная память видна всем другим потокам.

Если мы изменяем только одну переменную, выровненную по памяти, то мы используем атомарные инструкции, такие как LOCK XCHG, поэтому блокировка области памяти не требуется.

Другие вопросы по тегам