Конкуренция за чтение общих данных в памяти? - PullRequest
0 голосов
/ 02 марта 2019

В настоящее время я работаю над Архитектура компьютера: количественный подход . Автор - Hennessy and Patterson В главе 5 (Параллелизм на уровне потоков) они обсуждают когерентность и репликацию кэша для многопроцессорной обработки.Они просят нас сделать следующие предположения, настроив вариант использования:

Несколькими страницами ранее в моем учебнике они предлагают читателям сделать следующее предположение:

  1. Процессор A записывает в память X
  2. Процессор A записывает в память Y .
  3. Процессор C , считывающий из ячейки памяти Y , увидит правильное значение - это означает, что Процессор C также увидит правильное значение ячейки памяти X .

Логический вывод состоит в том, что

Эти ограничения позволяют процессорам переупорядочивать чтения, но заставляют процессор завершать запись в программном порядке.

Тем не менее, несколькими параграфами позже, когда обсуждается репликация как схема обеспечения согласованности, они говорят, что

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

Моя интерпретациязаключается в том, что репликация данных в локальные кэши позволяет многоядерным процессорам уменьшить задержку (из-за локальности данных - данные значительно ближе к процессору).Я согласен с этой частью.Однако мне неясно, почему существует contention for a read shared data item.Кажется, это подразумевает опасность для данных RAR (Read after Read), которой, я знаю, на самом деле не существует.

Если процессоры не пытаются выполнить запись в общую память, почему при чтении общего элемента данных могут возникнуть какие-либо разногласия?

Редактировать: Там много постовв StackOverflow о конфликте потоков, включая Что такое конфликт потоков? .Но эти почти эксклюзивные замки используют в качестве примера.Насколько я понимаю, блокировки - это высокоуровневый шаблон приложения для обеспечения согласованности.Более того, все примеры, которые я вижу в качестве ответов, включают в себя некоторую модификацию (запись) целевого элемента данных.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Несколько ядер, борющихся за чтение чего-либо, не являются опасностью данных (проблема корректности), это скорее структурная опасность (ограниченные порты чтения).Шины памяти / кэша не выполняют многоадресную передачу, когда несколько ядер не хотят читать одни и те же данные.

Но это все еще расширяет терминологию: «структурная опасность» обычно означает в пределах одного ядра, например, делитель ALUкоторый не может начать новое разделение в течение нескольких циклов после его запуска, поэтому независимые div инструкции по-прежнему должны останавливаться.

Память ожидается, будет иметь переменнуюзадержка, поэтому не может быть запланировано так точно.Это просто старое утверждение.

0 голосов
/ 02 марта 2019

Любая структура памяти имеет ограниченное количество портов доступа или чтения, которые представляют собой физические провода, которые позволяют вам читать или записывать данные.Если имеется только один порт чтения, но несколько агентов могут читать из памяти одновременно, тогда они будут конкурировать на порту, потому что только один из них может использовать его одновременно.Один из способов уменьшить конкуренцию и улучшить общую пропускную способность - репликация данных в отдельные физические структуры с отдельными портами доступа.Например, каждое ядро ​​может иметь свои собственные частные кэши, где может существовать несколько копий одной и той же строки кэша.При таком дизайне каждое ядро ​​сможет получить доступ к своей копии строки кэша независимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...