Ограничение памяти гарантирует, что все изменения переменных до ограничения видны всем остальным ядрам, так что все ядра имеют актуальное представление данных.
Если вы не установите ограничение памяти, ядра могут работать с неверными данными, это особенно заметно в сценарии, где несколько ядер будут работать с одинаковыми наборами данных. В этом случае вы можете убедиться, что после того, как CPU 0 выполнил какое-то действие, все изменения, внесенные в набор данных, теперь видны всем другим ядрам, которые затем могут работать с актуальной информацией.
Некоторые архитектуры, включая вездесущий x86 / x64, предоставляют несколько
инструкции барьера памяти, включая иногда называемую инструкцию
"полный забор". Полный забор гарантирует, что все операции погрузки и хранения
до забора будет совершено до любых нагрузок и
магазины, оформленные после забора.
Если ядро начнет работать с устаревшими данными в наборе данных, как оно сможет получить правильные результаты? Неважно, должен ли конечный результат быть представлен так, как если бы все было сделано в правильном порядке.
Ключ находится в буфере хранилища, который находится между кешем и процессором, и делает это:
Хранить буфер, невидимый для удаленных процессоров
Буфер хранилища позволяет сохранять записи в память и / или в кеши
оптимизировать межсоединения
Это означает, что вещи будут записаны в этот буфер, а затем в какой-то момент буфер будет записан в кеш. Таким образом, кэш может содержать представление данных, которые не являются самыми последними, и, следовательно, другой процессор, благодаря когерентности кэша, также не будет иметь последних данных. Очистка буфера хранилища необходима для того, чтобы последние данные были видны, это, я думаю, по сути то, что может вызвать ограничение памяти на аппаратном уровне.
EDIT:
Для кода, который вы использовали в качестве примера, Википедия говорит следующее:
Барьер памяти может быть вставлен перед присвоением процессору № 2 функции f
чтобы убедиться, что новое значение х видно для других процессоров в или
до изменения значения е.