Есть ли какие-либо арки, где барьер памяти реализован даже с флешем для кеша? Я читал, что барьер памяти влияет только на переупорядочивание ЦП, но я читаю инструкции, связанные с барьерами памяти: гарантирует, что все CPU увидит значение ..., но для меня это означает сброс/аннулирование кеша.барьер памяти и кеш-флеш
ответ
Точное воздействие барьера памяти зависит от конкретной архитектуры
процессоры нанимать оптимизацию производительности, что может привести к вне-порядка исполнения. Переупорядочение операций с памятью (загрузки и хранения) обычно остается незамеченным в рамках одного потока выполнения, но вызывает непредсказуемое поведение в параллельных программах и устройствах драйверов, если их не контролировать. Точный характер ограничения порядка зависит от аппаратного обеспечения и определяется моделью памяти архитектуры. Некоторые архитектуры обеспечивают множество барьеров для обеспечения соблюдения различных ограничений порядка.
http://en.wikipedia.org/wiki/Memory_barrier
Современные архитектуры Intel обеспечивает автоматическую согласованность кэша через все процессоры, без явного использования барьера памяти или кэша флеша инструкции.
В симметричных многопроцессорных (SMP) системах каждый процессор имеет локальный кеш . Система памяти должна гарантировать согласованность кеша. Ложное совместное использование происходит, когда потоки на разных процессорах изменяют переменные, которые находятся в одной и той же строке кэша. Это приводит к недействительности строки кэша, и заставляет обновить, что ухудшает производительность.
http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads/
В значительной степени все современные архитектуры, кэши (такие как L1 и L2 кэшей) обеспечивается когерентный аппаратными средствами. Нет необходимости очищать кеш, чтобы сделать память видимой для других ЦП.
Гипотетически предположить, что система, которая не была кеш-когерентной в аппаратном обеспечении, не выглядела бы так же, как в нынешних системах, работающих под управлением операционных систем, таких как Windows и Linux.
барьеры памяти необходимы на этих архитектур, чтобы сделать три вещи:
Процессор может заранее получить чтения, который недействительным по записи на другом ядре. Это должно быть предотвращено. (Хотя на x86 это предотвращается в аппаратном обеспечении. Предварительная выборка заблокирована для строки кэша L1, поэтому, если другой ЦП недействителен для строки кэша, предварительная выборка также недействительна.)
ЦПУ может «post» записывает и не кладет их в свой кеш L1. Эти записи должны быть завершены, по крайней мере, до кеша L1.
ЦП может переупорядочить считывание и запись с одной стороны барьера памяти с чтением и записью с другой стороны. В зависимости от типа барьера памяти некоторые из этих повторных заказов должны быть запрещены. (Например,
read x; read y;
не гарантирует, что чтение происходит в этом порядке. Ноread x; memory_barrier(); read y;
обычно делает.)
- 1. Зачем нужен барьер памяти?
- 2. Пример C++ «барьер памяти»
- 3. изменчивые переменные и барьер памяти в java
- 4. Нужен ли мне барьер памяти?
- 5. Использует ли Interlocked.CompareExchange барьер памяти?
- 6. Требует ли ConcurrentQueue.IsEmpty барьер памяти?
- 7. Как решить, когда использовать барьер памяти
- 8. Является ли барьер памяти ручным оптимизатором Microsoft?
- 9. Имеет ли поток начало скрытый барьер памяти?
- 10. Накладные расходы на барьер/ограждение памяти
- 11. Как вставить барьер памяти с помощью IAR?
- 12. Неужели WaitForSingleObject работает как барьер памяти?
- 13. как барьер памяти в ядре Linux используется
- 14. C++ 11 как вставить простой барьер памяти?
- 15. Является ли барьер памяти связанным с определенной ячейкой памяти?
- 16. Busy петли и барьер
- 17. Spring Integration - Барьер и маршрутизатор
- 18. Нужно ли как локальный, так и глобальный барьер памяти при записи формы локальной памяти в глобальную.
- 19. Как барьер/ограждение памяти препятствует переупорядочению команды, выполняемой процессором?
- 20. Действительно ли boost :: atomic действует как барьер аппаратной памяти?
- 21. gcc-барьер памяти __sync_synchronize vs asm volatile (""::: "memory")
- 22. Когда используется компилятор-барьер памяти (например, std :: atomic_signal_fence)?
- 23. Поддерживает ли std :: atomic доступ как барьер памяти?
- 24. Здесь необходим барьер памяти * * pEnd_ = v; __sync_synchronize(); ++ pEnd_; "?
- 25. Использует ли анонимная труба барьер памяти для межточечной связи?
- 26. барьер памяти в функции ext2 ext2_statfs Linux Kernel (в)
- 27. Требуется ли барьер памяти, если второй поток ожидает завершения первого?
- 28. Асинхронный барьер в F #
- 29. барьер для нескольких узлов
- 30. Синхронизационный барьер в Эликсире?
Я не имел в виду, что я должен явно аннулировать кеш, но в hw (на некоторых арках) барьер памяти означает, что кеш недействителен. Я прочитал это сейчас отсюда: http://www.linuxjournal.com/article/8212, что для ALPHA (очень старая арка) smp_wmb() означает неявное признание кэша. – Mark