2012-07-01 3 views
5

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

ответ

4

Точное воздействие барьера памяти зависит от конкретной архитектуры

процессоры нанимать оптимизацию производительности, что может привести к вне-порядка исполнения. Переупорядочение операций с памятью (загрузки и хранения) обычно остается незамеченным в рамках одного потока выполнения, но вызывает непредсказуемое поведение в параллельных программах и устройствах драйверов, если их не контролировать. Точный характер ограничения порядка зависит от аппаратного обеспечения и определяется моделью памяти архитектуры. Некоторые архитектуры обеспечивают множество барьеров для обеспечения соблюдения различных ограничений порядка.

http://en.wikipedia.org/wiki/Memory_barrier

Современные архитектуры Intel обеспечивает автоматическую согласованность кэша через все процессоры, без явного использования барьера памяти или кэша флеша инструкции.

В симметричных многопроцессорных (SMP) системах каждый процессор имеет локальный кеш . Система памяти должна гарантировать согласованность кеша. Ложное совместное использование происходит, когда потоки на разных процессорах изменяют переменные, которые находятся в одной и той же строке кэша. Это приводит к недействительности строки кэша, и заставляет обновить, что ухудшает производительность.

http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads/

4

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

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

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

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

  2. ЦПУ может «post» записывает и не кладет их в свой кеш L1. Эти записи должны быть завершены, по крайней мере, до кеша L1.

  3. ЦП может переупорядочить считывание и запись с одной стороны барьера памяти с чтением и записью с другой стороны. В зависимости от типа барьера памяти некоторые из этих повторных заказов должны быть запрещены. (Например, read x; read y; не гарантирует, что чтение происходит в этом порядке. Но read x; memory_barrier(); read y; обычно делает.)

+1

Я не имел в виду, что я должен явно аннулировать кеш, но в hw (на некоторых арках) барьер памяти означает, что кеш недействителен. Я прочитал это сейчас отсюда: http://www.linuxjournal.com/article/8212, что для ALPHA (очень старая арка) smp_wmb() означает неявное признание кэша. – Mark

Смежные вопросы