Я знаю, что современные процессоры могут выполнять не по порядку, но они всегда удаляют результаты в порядке, как описано в wikipedia.
"Из процессоров Oder эти" слоты "засыпают вовремя другими готовыми инструкциями, , а затем повторно заказывайте результаты в конце, чтобы убедиться, что инструкции обработаны как обычно."
Теперь, когда говорят о необходимости использования многоядерных платформ, требуется память, потому что из-за выполнения Out of Order здесь может быть напечатано неправильное значение x.
Processor #1:
while f == 0
;
print x; // x might not be 42 here
Processor #2:
x = 42;
// Memory fence required here
f = 1
Теперь мой вопрос заключается в том, что, поскольку процессоры Out of Order (ядра в случае процессоров MultiCore, которые, как я полагаю), всегда удаляют результаты In-Order, то в чем же необходимость заборов памяти. Не следует ли, чтобы ядра многоядерного процессора видели результаты, удаленные от других ядер, или они также видят результаты, которые находятся в полете?
Я имею в виду в приведенном выше примере, когда процессор 2 в конечном итоге удалит результаты, результат x должен превышать f, правильно? Я знаю, что во время выполнения вне порядка он мог бы изменить f до x, но он, возможно, не удалил его до x, правильно?
Теперь, когда у вас есть возможность возврата в исходное состояние и механизм когерентности кэша, зачем вам понадобится память в x86?