В настоящее время я работаю над Архитектура компьютера: количественный подход . Автор - Hennessy and Patterson В главе 5 (Параллелизм на уровне потоков) они обсуждают когерентность и репликацию кэша для многопроцессорной обработки.Они просят нас сделать следующие предположения, настроив вариант использования:
Несколькими страницами ранее в моем учебнике они предлагают читателям сделать следующее предположение:
- Процессор A записывает в память X
- Процессор A записывает в память Y .
- Процессор C , считывающий из ячейки памяти Y , увидит правильное значение - это означает, что Процессор C также увидит правильное значение ячейки памяти X .
Логический вывод состоит в том, что
Эти ограничения позволяют процессорам переупорядочивать чтения, но заставляют процессор завершать запись в программном порядке.
Тем не менее, несколькими параграфами позже, когда обсуждается репликация как схема обеспечения согласованности, они говорят, что
Репликация уменьшает как задержку доступа, так и конфликты для прочитанного общего элемента данных.
Моя интерпретациязаключается в том, что репликация данных в локальные кэши позволяет многоядерным процессорам уменьшить задержку (из-за локальности данных - данные значительно ближе к процессору).Я согласен с этой частью.Однако мне неясно, почему существует contention for a read shared data item
.Кажется, это подразумевает опасность для данных RAR (Read after Read)
, которой, я знаю, на самом деле не существует.
Если процессоры не пытаются выполнить запись в общую память, почему при чтении общего элемента данных могут возникнуть какие-либо разногласия?
Редактировать: Там много постовв StackOverflow о конфликте потоков, включая Что такое конфликт потоков? .Но эти почти эксклюзивные замки используют в качестве примера.Насколько я понимаю, блокировки - это высокоуровневый шаблон приложения для обеспечения согласованности.Более того, все примеры, которые я вижу в качестве ответов, включают в себя некоторую модификацию (запись) целевого элемента данных.