Барьер памяти и очистка кеша

Есть ли какие-нибудь арки, где барьер памяти реализован даже при очистке кеша? Я читал, что барьер памяти влияет только на переупорядочение процессора, но я читаю операторы, связанные с барьерами памяти: гарантирует, что все процессоры увидят значение..., но для меня это означает очистку / аннулирование кэша.

2 ответа

Практически во всех современных архитектурах кэши (например, кэши L1 и L2) обеспечиваются согласованным с помощью аппаратного обеспечения. Нет необходимости очищать кеш, чтобы сделать память видимой для других процессоров.

Можно предположить гипотетически систему, которая не была связана с аппаратным кэшем, но она не выглядела бы как современные системы, работающие под управлением операционных систем, таких как Windows и Linux.

На этих архитектурах необходимы барьеры памяти для выполнения трех задач:

  1. Процессор может предварительно извлечь чтение, которое признано недействительным записью в другое ядро. Это должно быть предотвращено. (Хотя в x86 это предотвращается аппаратно. Предварительная выборка блокируется для строки кэша L1, поэтому, если другой процессор делает недействительной строку кэша, предварительная выборка также становится недействительной.)

  2. Процессор может "публиковать" записи и еще не помещать их в свой кэш L1. Эти записи должны быть завершены как минимум в кэш L1.

  3. Процессор может переупорядочивать операции чтения и записи на одной стороне барьера памяти, а операции чтения и записи - на другой стороне. В зависимости от типа барьера памяти некоторые из этих переупорядочений должны быть запрещены. (Например, 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/

Другие вопросы по тегам