Я пытаюсь понять раздел 8.2 Руководства по системному программированию Intel ( это Том 3 в PDF).
В частности, я вижу два разных сценария переупорядочения:
8.2.3.4 Грузы могут быть переупорядочены в более ранних магазинах в другие места
а также
8.2.3.5 Внутрипроцессорная пересылка разрешена
Однако я не понимаю отличия этих сценариев от наблюдаемых эффектов POW. Примеры, приведенные в этих разделах, кажутся мне взаимозаменяемыми. Пример 8.2.3.4 может быть объяснен как правилом 8.2.3.5, так и собственным правилом. И обратное мне тоже кажется верным, хотя в этом случае я не уверен.
Итак, вот мой вопрос: есть ли лучшие примеры или объяснения того, как наблюдаемые эффекты 8.2.3.4 отличаются от наблюдаемых эффектов 8.2.3.5?
StoreLoad
(в значительной степени требуется, если у вас есть буфер хранилища), продемонстрированное8.2.3.4
и это переупорядочение переадресации в магазине, которое не вполне объяснимо с точки зрения 4 стандартных переупорядочений. Вам действительно нужно просто объяснить, что нагрузки могут принимать свое значение из более раннего хранилища с того же процессора, очевидно, не в порядке (считывание более позднего значения) по отношению к окружающим нагрузкам. Или что-то. 01.06.2018StoreLoad
в 8.2.3.4 уже нарушает последовательную согласованность, потому что SC требует, чтобы каждая операция появлялась в программном порядке в общем произвольном общем порядке операций. Чтобы получить результатr1==r2==0
, нет порядка, согласованного с программным порядком, который его производит - по крайней мере, одно из чтений должно быть переупорядочено с записью от того же ЦП. 01.06.2018