вздымщик Цыпа
Цитата:
Если бы было так то он бы вообще не занес бы ничего в x.
Это почему же?
Потому что он должен записать в x, прежде чем запишет в a.
3. Writes to memory are always carried out in program order, with the exception of
writes executed with the CLFLUSH instruction and streaming stores (writes)
executed with the non-temporal move instructions (MOVNTI, MOVNTQ,
MOVNTDQ, MOVNTPS, and MOVNTPD).
3. Запись в память всегда выполняется в порядке программы, за исключением записи выполняемых при CLFLUSH инструкции и потоковых stores (записей) выполняемых при non-temporal move инструкций (MOVNTI, MOVNTQ, MOVNTDQ, MOVNTPS, и MOVNTPD).
Следовательно в x попала бы чушь. Это получается, что перемещении из памяти в память ничего бы не работало. Ну это же не так. А все потому что есть еще правило.
2. Reads can pass buffered writes, but the processor is self-consistent.
2. чтения могут пропустить buffered writes, но процессор является самосогласованным.
Это значит что чтение самосогласовывается с записью. Если бы чтение и запись были бы не согласующимися, то запись могла произойти раньше. А так как они взаимно связанные то чтение не пропустит запись вперед себя.
The second rule allows a read to pass a write. However, if the write is to the same
memory location as the read, the processor’s internal “snooping” mechanism will
detect the conflict and update the cached read before the processor executes the
instruction that uses the value.
Второе правило позволяет чтению пропускать записывание. Как бы то ни было, если запись в туже самую область что и чтение, процессорный внутренний механизм “отслеживания” выполняет определение конфликта и обновляет кеш чтения до того как процессор запустит инструкцию которое будет использовать данное значение.