Хорошо, я читал следующие Qs из SO относительно заграждений CPU x86 (LFENCE
, SFENCE
и MFENCE
):
-
Означает ли она какую-либо команду LFENCE в процессорах x86/x86_64?
-
Достаточно ли протокол MESI или еще существуют барьеры памяти? (Процессоры Intel)
и
и я должен быть честным, я все еще не совсем уверен, когда нужен забор. Я пытаюсь понять с точки зрения удаления полностью раздутых замков и попытки использовать более мелкозернистую блокировку через ограждения, чтобы свести к минимуму задержки задержки.
Во-первых, вот два конкретных вопроса, которые я не понимаю:
Иногда, когда вы делаете хранилище, ЦП будет записывать в свой буфер хранилища вместо кеша L1. Я, однако, не понимаю термины, на которых процессор будет делать это?
CPU2 может захотеть загрузить значение, которое было записано в буфер хранения CPU1. Насколько я понимаю, проблема в том, что CPU2 не может видеть новое значение в буфере хранения CPU1. Почему протокол MESI не включает в себя очищающие буферы хранения как часть его протокола?
В целом, может кто-нибудь попытаться описать общий сценарий и пояснить, когда требуются инструкции LFENCE
/MFENCE
и SFENCE
?
NB Одной из проблем, связанных с этим вопросом, является количество статей, написанных "в целом" для нескольких архитектур процессора, когда я интересуюсь только архитектурой Intel x86-64.