На x86 есть только один домен когерентности.Хранилища становятся видимыми для всех других ядер в одно и то же время, когда они фиксируются в кеше L1d.Этого вместе с MESI в целом достаточно, чтобы дать нам общий порядок хранения, с которым могут согласиться все потоки.
Некоторые ISA (включая PowerPC) не имеют этого свойства (на практике из-за пересылки в хранилище дляудаленное хранилище в физическом ядре, через потоки SMT).Таким образом, mo_relaxed
хранилища из 2 потоков могут быть просмотрены в другом порядке 2 другими читателями на практике на оборудовании POWER. Будут ли две атомарные записи в разные места в разных потоках всегда рассматриваться в одном и том же порядке другими потоками? (Предположительно, барьеры на блоке PowerPC при пересылке.)
Модель памяти ARM, используемая для разрешенияэто IRIW (Независимый Читатель Независимый Автор) переупорядочение, но на практике никогда не существовало ARM HW, который сделал это.ARM удалось укрепить свою модель памяти, чтобы гарантировать, что все ядра согласовывают глобальный порядок для хранилищ, выполняемых несколькими другими ядрами.
(Переадресация хранилища по-прежнему означает, что ядро делает , которое видит магазинэто сразу, задолго до того, как оно станет глобально видимым. И, конечно, упорядочение нагрузки требуется, чтобы ядра могли сказать, что они видели что-то о том, что они наблюдали при упорядочении независимых записей.)
Если все ядра должны договориться о глобальном упорядочении магазинов, то (в вашем примере) просмотр магазина из Core2 подразумевает, что Core1, должно быть, уже произошел, и что вы тоже можете его видеть.
(Предполагая, что Core2 использовал соответствующие барьеры или загрузочную загрузку или хранилище релиза, чтобы убедиться, что его хранилище произошло после его загрузки, которая видела хранилище Core1.)
Возможно также связано: