Барьер памяти и очистка кеша
Есть ли какие-нибудь арки, где барьер памяти реализован даже при очистке кеша? Я читал, что барьер памяти влияет только на переупорядочение процессора, но я читаю операторы, связанные с барьерами памяти: гарантирует, что все процессоры увидят значение..., но для меня это означает очистку / аннулирование кэша.
2 ответа
Практически во всех современных архитектурах кэши (например, кэши L1 и L2) обеспечиваются согласованным с помощью аппаратного обеспечения. Нет необходимости очищать кеш, чтобы сделать память видимой для других процессоров.
Можно предположить гипотетически систему, которая не была связана с аппаратным кэшем, но она не выглядела бы как современные системы, работающие под управлением операционных систем, таких как Windows и Linux.
На этих архитектурах необходимы барьеры памяти для выполнения трех задач:
Процессор может предварительно извлечь чтение, которое признано недействительным записью в другое ядро. Это должно быть предотвращено. (Хотя в x86 это предотвращается аппаратно. Предварительная выборка блокируется для строки кэша L1, поэтому, если другой процессор делает недействительной строку кэша, предварительная выборка также становится недействительной.)
Процессор может "публиковать" записи и еще не помещать их в свой кэш L1. Эти записи должны быть завершены как минимум в кэш L1.
Процессор может переупорядочивать операции чтения и записи на одной стороне барьера памяти, а операции чтения и записи - на другой стороне. В зависимости от типа барьера памяти некоторые из этих переупорядочений должны быть запрещены. (Например,
read x; read y;
не гарантирует чтения в таком порядке. Ноread x; memory_barrier(); read y;
как правило, делает.)
Точное влияние барьера памяти зависит от конкретной архитектуры
Процессоры используют оптимизацию производительности, которая может привести к неправильному выполнению. Переупорядочение операций с памятью (загрузка и сохранение) обычно проходит незамеченным в пределах одного потока выполнения, но вызывает непредсказуемое поведение в параллельных программах и драйверах устройств, если не осуществляется тщательный контроль. Точная природа ограничения упорядочения зависит от аппаратного обеспечения и определяется моделью упорядочения памяти в архитектуре. Некоторые архитектуры предоставляют несколько барьеров для обеспечения различных ограничений порядка.
http://en.wikipedia.org/wiki/Memory_barrier
Современные архитектуры Intel обеспечивают автоматическую согласованность кэша на всех процессорах без явного использования барьера памяти или инструкций очистки кэша.
В симметричных многопроцессорных (SMP) системах каждый процессор имеет локальный кэш. Система памяти должна гарантировать согласованность кэша. Ложное совместное использование происходит, когда потоки на разных процессорах изменяют переменные, которые находятся в одной и той же строке кэша. Это делает недействительной строку кэша и вызывает обновление, что снижает производительность.
http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads/