Согласованность процессора - Processor consistency

Согласованность процессора один из модели согласованности используется в области параллельные вычисления (например, в распределенная разделяемая память, распределенные транзакции, так далее.).

Система демонстрирует согласованность процессора, если порядок, в котором другие процессоры видят записи от любого отдельного процессора, совпадает с порядком, в котором они были отправлены. Из-за этого Processor Consistency применима только к системам с несколькими процессорами. Он слабее, чем Причинная последовательность модель, потому что она не требует записи из все процессоры должны быть видны в том же порядке, но сильнее, чем Согласованность PRAM модель, потому что это требует Кэш-согласованность.[1] Еще одно различие между причинной согласованностью и согласованностью процессора заключается в том, что согласованность процессора устраняет требования к загрузкам, ожидающим завершения сохранения, и к записи. Атомарность.[1] Последовательность процессора также сильнее, чем Согласованность кеша потому что согласованность процессора требует, чтобы все записи, выполняемые процессором, просматривались по порядку, а не только записи в одну и ту же ячейку памяти.[1]

Примеры согласованности процессора

Пример 1: согласованность процессора
п1Вт (х) 1Вт (х) 3
п2R (х) 1R (х) 3
п3Вт (г) 1Вт (г) 2
п4R (у) 1R (у) 2
Пример 2: Несоответствие процессора
п1Вт (х) 1Вт (х) 3
п2R (х) 3R (х) 1
п3Вт (г) 1Вт (г) 2
п4R (у) 2R (у) 1

В примере 1 справа простая система следует за согласованностью процессора, так как все операции записи каждым процессором видны в том порядке, в котором они выполнялись другими процессорами, а транзакции согласованы. Пример 2 НЕ согласован с процессором, так как записи P1 и P3 видны не по порядку для P2 и P4 соответственно.

В Примере 3 ниже самой сильной применимой моделью согласованности является согласованность процессора. Это легко определить, потому что на процессор выполняется не более одной записи. Этот пример не является причинно непротиворечивым, однако, поскольку R (x) 1 в P2 может потенциально вызвать W (x) 2 в P2, мы можем установить, что W (x) 1 в P1 причинно предшествует W (x) 2 в P2. Однако P3 и P4 не согласны с порядком записи этих двух записей P1 и P2.

Система в примере 4 - это нет согласованность процессора, потому что некоторые записи, выполняемые одним и тем же процессором, воспринимаются другими процессорами не по порядку. Более конкретно, записи в одно место видны по порядку, но W (x) 2 на P1 не видится перед W (y) 4 на P2. Тот факт, что единственные записи, видимые по порядку, - это записи в одну и ту же область памяти, ограничивает этот пример согласованностью кэша.

Пример 3: Причинная: Нет; Процессор: Да
п1Вт (х) 1
п2R (х) 1Вт (х) 2
п3R (х) 1R (х) 2
п4R (х) 2R (х) 1
Пример 4: Процессор: Нет; Кэш: Да
п1Вт (х) 2Вт (г) 4Вт (х) 3Вт (г) 1
п2R (у) 4R (х) 2R (у) 1R (х) 3

Согласованность процессора и последовательная согласованность

Согласованность процессора (ПК) упрощает порядок между старыми магазинами и младшими загрузками, который принудительно применяется в Последовательная согласованность (SC).[2] Это позволяет загружать в кэш и потенциально завершаться раньше, чем старые хранилища, а это означает, что хранилища могут быть поставлены в очередь в буфере записи без необходимости реализации предположений о загрузке (загрузка может продолжаться свободно).[3] В этом отношении ПК работает лучше, чем SC, потому что в методах восстановления после неудачных спекуляций нет необходимости, что означает меньшее количество сбросов конвейера.[3] В предварительная выборка Оптимизация, применяемая в системах SC, также применима к системам ПК.[3] Предварительная загрузка это процесс заблаговременной выборки данных для предстоящих загрузок и сохранений до того, как они действительно понадобятся, чтобы сократить задержку загрузки / сохранения. Поскольку ПК снижает задержку загрузки, позволяя переупорядочивать нагрузки перед соответствующими хранилищами, потребность в предварительной выборке несколько снижается, поскольку предварительно выбранные данные будут использоваться больше для хранилищ, чем для загрузок.[3]

Интуиция программиста

С точки зрения того, насколько хорошо компьютерная система следует интуиции программиста, оказывается, что в правильно синхронизированных системах результаты ПК и SC одинаковы.[3] Интуиция программиста - это, по сути, то, как программист ожидает выполнения инструкций, обычно в том, что называется «программным порядком». Порядок выполнения программ в многопроцессорной системе - это выполнение инструкций, приводящее к тому же результату, что и последовательное выполнение. Тот факт, что PC и SC следуют этому ожиданию, является прямым следствием того факта, что соответствующие загрузки и хранилища в системах PC по-прежнему упорядочены относительно друг друга.[3] Например, при синхронизации блокировок единственная операция, поведение которой не полностью определяется ПК, - это хранилище блокировки-получения, где последующие загрузки находятся в критической секции, и их порядок влияет на результат.[3] Эта операция, однако, обычно реализуется с помощью условной или атомарной инструкции сохранения, так что, если операция завершится неудачно, она будет повторена позже, и все младшие загрузки также будут повторены.[3] Все загрузки, происходящие до этого хранилища, по-прежнему упорядочены с учетом нагрузок, возникающих в критической секции, и поэтому все старые загрузки должны быть завершены до того, как загрузки в критической секции смогут работать.

Согласованность процессора и другие модели упрощенной согласованности

Согласованность процессора, хотя и слабее, чем последовательная, в большинстве случаев все же является более сильной моделью согласованности, чем требуется. Это связано с количеством точек синхронизации, присущих программам, работающим в многопроцессорных системах.[4] Это означает, что не может возникнуть никаких гонок данных (гонка данных - это множественные одновременные обращения к участку памяти, где хотя бы один доступ является записью).[3] Имея это в виду, ясно, что модель может допускать реорганизацию всех операций с памятью, пока ни одна операция не пересекает точку синхронизации.[3] и один из них - слабый порядок. Однако слабый порядок налагает некоторые из тех же ограничений, что и согласованность процессора, а именно то, что система должна оставаться согласованной, и, таким образом, все записи в одну и ту же ячейку памяти должны просматриваться всеми процессорами в одном и том же порядке.[4] Подобно слабому порядку, модель согласованности выпуска позволяет переупорядочивать все операции с памятью, но она становится еще более конкретной и разбивает операции синхронизации, чтобы позволить большее ослабление переупорядочения.[3] Обе эти модели предполагают правильную синхронизацию кода и в некоторых случаях поддержку аппаратной синхронизации, поэтому согласованность процессора - более безопасная модель, которой следует придерживаться, если кто-то не уверен в надежности программ, которые будут запускаться с использованием этой модели.

Сходство с моделями памяти SPARC V8 TSO, IBM-370 и x86-TSO

Одним из основных компонентов согласованности процессора является то, что если запись, за которой следует чтение, может выполняться вне программного порядка. По сути, это приводит к сокрытию задержки записи, когда загрузка может идти впереди хранилища. Поскольку многие приложения правильно работают с этой структурой, системы, реализующие этот тип ослабленного упорядочения, обычно кажутся последовательными. Две другие модели, соответствующие этой спецификации: SPARC V8 TSO (Total Store Ordering) и IBM-370.[4]

Модель IBM-370 следует спецификации, разрешающей выполнение записи, за которой следует чтение, вне программного порядка, за некоторыми исключениями. Во-первых, если операции выполняются в одном месте, они должны выполняться в программном порядке. Во-вторых, если любая операция является частью инструкции сериализации или между двумя операциями есть инструкция сериализации, то операции должны выполняться в программном порядке.[4] Эта модель, пожалуй, самая строгая из трех рассматриваемых моделей, поскольку модель TSO устраняет одно из упомянутых исключений.

Модель SPARC V8 TSO очень похожа на модель IBM-370 с тем ключевым отличием, что она позволяет выполнять операции в одном месте вне программного порядка. При этом возможно, что загрузка вернет произошедшее хранилище, которое «устарело» с точки зрения программного порядка.[4] Эти модели похожи на согласованность процессора, но в то время как эти модели имеют только одну копию памяти, согласованность процессора не имеет такого ограничения. Это предполагает систему, в которой каждый процессор имеет свою собственную память, что подчеркивает при согласованности процессора «требование согласованности».[4]"

Модель x86-TSO имеет несколько различных определений. Общая модель магазина, как следует из названия, очень похожа на SPARC V8. Другое определение основано на локальных буферах записи. Отличия моделей x86 и SPARC TSO заключаются в отсутствии одних инструкций и включении других, но сами модели очень похожи.[5] Определение буфера записи использует различные состояния и блокировки, чтобы определить, можно ли читать / записывать конкретное значение. Кроме того, эта конкретная модель для архитектуры x86 не страдает от проблем предыдущих (более слабой согласованности) моделей и предоставляет программистам более интуитивно понятную основу для дальнейшего развития.[5]

Смотрите также

Рекомендации

  1. ^ а б c Дэвид Мосбергер (1992). «Модели согласованности памяти» (PDF). Университет Аризоны. Получено 2015-04-01. Цитировать журнал требует | журнал = (помощь)
  2. ^ Курош Гарачорлоо; Даниэль Леноски; Джеймс Лаудон; Филип Гиббонс; Ануп Гупта; Джон Хеннесси (1 августа 1998 г.). «Согласованность памяти и порядок событий в масштабируемых мультипроцессорах с общей памятью» (PDF). ACM. Получено 2015-04-01. Цитировать журнал требует | журнал = (помощь)
  3. ^ а б c d е ж грамм час я j k Солихин, Ян (2009). Основы параллельной компьютерной архитектуры: многокристальные и многоядерные системы. Солихин Паб. С. 297–299. ISBN  978-0-9841630-0-7.
  4. ^ а б c d е ж Курош Гарачорлоо (1995). «Модели согласованности памяти для мультипроцессоров с общей памятью» (PDF). Западная исследовательская лаборатория. Получено 2015-04-07. Цитировать журнал требует | журнал = (помощь)
  5. ^ а б Скотт Оуэнс; Сусмит Саркар; Питер Сьюэлл (2009). «Лучшая модель памяти x86: x86-TSO (расширенная версия)» (PDF). Кембриджский университет. Получено 2015-04-08. Цитировать журнал требует | журнал = (помощь)