Онлайн переводчик http://translate.meta.ua
поменять
По-русски

С этим простым определением согласованного состояния памяти мы можем гарантировать когерентность путем обеспечения двух свойств:

1. Операция чтения ячейки памяти одним процессором, которая следует за операцией записи в ту же ячейку памяти другим процессором получит записанное значение, если операции чтения и записи достаточно отделены друг от друга по времени.

2. Операции записи в одну и ту же ячейку памяти выполняются строго последовательно (иногда говорят, что они сериализованы): это означает, что две подряд идущие операции записи в одну и ту же ячейку памяти будут наблюдаться другими процессорами именно в том порядке, в котором они появляются в программе процессора, выполняющего эти операции записи.

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

Строго последовательное выполнение операций записи гарантирует два важных следствия для этой последовательности операций записи.

Во-первых, оно гарантирует, что каждый процессор в машине в некоторый момент времени будет наблюдать запись, выполняемую процессором P2. Если последовательность операций записи не соблюдается, то может возникнуть ситуация, когда какой-нибудь процессор будет наблюдать сначала операцию записи процессора P2, а затем операцию записи процессора P1, и будет хранить это записанное P1 значение неограниченно долго.

Более тонкая проблема возникает с поддержанием разумной модели порядка выполнения программ и когерентности памяти для пользователя: представьте, что третий процессор постоянно читает ту же самую ячейку памяти, в которую записывают процессоры P1 и P2; он должен наблюдать сначала значение, записанное P1, а затем значение, записанное P2. Возможно он никогда не сможет увидеть значения, записанного P1, поскольку запись от P2 возникла раньше чтения.

Если он даже видит значение, записанное P1, он должен видеть значение, записанное P2, при последующем чтении. Подобным образом любой другой процессор, который может наблюдать за значениями, записываемыми как P1, так и P2, должен наблюдать идентичное поведение. Простейший способ добиться таких свойств заключается в строгом соблюдении порядка операций записи, чтобы все записи в одну и ту же ячейку могли наблюдаться в том же самом порядке. Это свойство называется последовательным выполнением (сериализацией) операций записи (write serialization).

Вопрос о том, когда процессор должен увидеть значение, записанное другим процессором достаточно сложен и имеет заметное воздействие на производительность, особенно в больших машинах.

Альтернативные протоколы Имеются две методики поддержания описанной выше когерентности. Один из методов заключается в том, чтобы гарантировать, что процессор должен получить исключительные права доступа к элементу данных перед выполнением записи в этот элемент данных. Этот тип протоколов называется протоколом записи с аннулированием (write ivalidate protocol), поскольку при выполнении записи он аннулирует другие копии. Это наиболее часто используемый протокол как в схемах на основе справочников, так и в схемах наблюдения.

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

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

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

Этот тип протокола называется протоколом записи с обновлением (write update protocol) или протоколом записи с трансляцией (write broadcast protocol). Обычно в этом протоколе для снижения требований к полосе пропускания полезно отслеживать, является ли слово в кэш-памяти разделяемым объектом, или нет, а именно, содержится ли оно в других кэшах.

Если нет, то нет никакой необходимости обновлять другой кэш или транслировать в него обновленные данные.

Разница в производительности между протоколами записи с обновлением и с аннулированием определяется тремя характеристиками:

1. Несколько последовательных операций записи в одно и то же слово, не перемежающихся операциями чтения, требуют нескольких операций трансляции при использовании протокола записи с обновлением, но только одной начальной операции аннулирования при использовании протокола записи с аннулированием.

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

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

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

Эти две схемы во многом похожи на схемы работы кэш-памяти со сквозной записью и с записью с обратным копированием. Также как и

По-украински

З цим простим визначенням погодженого стану пам'яті ми можемо гарантувати когерентність шляхом забезпечення двох властивостей :

1. Операція читання елементу пам'яті одним процесором, яка йде за операцією запису в той же елемент пам'яті іншим процесором отримає записане значення, якщо операції читання і запису досить відокремлені один від одного за часом.

2. Операції запису в один і той же елемент пам'яті виконуються строго послідовно (іноді говорять, що вони сериализованы) : це означає, що дві операції запису, що підряд йдуть, в один і той же елемент пам'яті спостерігатимуться іншими процесорами саме в тому порядку, в якому вони з'являються в програмі процесора, що виконує ці операції запису.

Перша властивість очевидно пов'язана з визначенням когерентного (погодженого) стану пам'яті : якби процесор завжди б прочитував тільки старе значення даних, ми сказали б, що пам'ять некогерентна.

Необхідність строго послідовного виконання операцій запису є тоншим, але також дуже важливою властивістю. Уявимо собі, що строге послідовне виконання операцій запису не дотримується. Тоді процесор P1 може записати дані в осередок, а потім в цей осередок виконає запис процесор P2. Строге послідовне виконання операцій запису гарантує два важливі наслідки для цієї послідовності операцій запису.

По-перше, воно гарантує, що кожен процесор в машині в деякий момент часу спостерігатиме запис, що виконується процесором P2. Якщо послідовність операцій запису не дотримується, то може виникнути ситуація, коли який-небудь процесор спостерігатиме спочатку операцію запису процесора P2, а потім операцію запису процесора P1, і зберігатиме це записане P1 значення необмежено довго.

Тонша проблема виникає з підтримкою розумної моделі порядку виконання програм і когерентності пам'яті для користувача: уявіть, що третій процесор постійно читає той же самий елемент пам'яті, в яку записують процесори P1 і P2; він повинен спостерігати спочатку значення, записане P1, а потім значення, записане P2. Можливо він ніколи не зможе побачити значення, записаного P1, оскільки запис від P2 виник раніше читання.

Якщо він навіть бачить значення, записане P1, він повинен бачити значення, записане P2, при подальшому читанні. Так само будь-який інший процесор, який може спостерігати за значеннями, записуваними як P1, так і P2, повинен спостерігати ідентичну поведінку. Простий спосіб добитися таких властивостей полягає в суворому дотриманні порядку операцій запису, щоб усі записи в один і той же осередок могли спостерігатися в тому ж самому порядку. Ця властивість називається послідовним виконанням (сериализацией) операцій запису (write serialization).

Питання про те, коли процесор повинен побачити значення, записане іншим процесором досить складений і має помітну дію на продуктивність, особливо у великих машинах.

Альтернативні протоколи

Є дві методики підтримки описаної вище когерентності. Один з методів полягає в тому, щоб гарантувати, що процесор повинен отримати виняткові права доступу до елементу даних перед виконанням запису в цей елемент даних. Цей тип протоколів називається протоколом запису з анулюванням (write ivalidate protocol), оскільки при виконанні запису він анулює інші копії. Це найчастіше використовуваний протокол як в схемах на основі довідників, так і в схемах спостереження.

Виняткове право доступу гарантує, що під час виконання запису не існує ніяких інших копій елементу даних, в які можна писати або з яких можна читати : усі інші кэшированные копії елементу даних анулювані. Щоб побачити, як такий протокол забезпечує когерентність, розглянемо операцію запису, услід за яким слідує операція читання іншим процесором.

Оскільки запис вимагає виняткового права доступу, будь-яка копія, підтримувана процесором, що читає, має бути анулювана (відповідно до назви протоколу). Таким чином, коли виникає операція читання, станеться промах кеш-пам'яті, який змушує виконати вибірку нової копії даних. Для виконання операції запису ми можемо зажадати, щоб процесор мав достовірну (valid) копію даних у своїй кеш-пам'яті перш, ніж виконувати в неї запис.

Таким чином, якщо обидва процесори спробують записати в один і той же елемент даних одночасно, один з них виграє змагання у другого (ми незабаром побачимо, як прийняти рішення, хто з них виграє) і викликає анулювання його копії. Інший процесор для завершення своєї операції запису повинен спочатку отримати нову копію даних, яка тепер уже повинна містити оновлене значення.

Альтернативою протоколу запису з анулюванням являється оновлення усіх копій елементу даних у разі запису в цей елемент даних. Цей тип протоколу називається протоколом запису з оновленням (write update protocol) або протоколом запису з трансляцією (write broadcast protocol). Зазвичай в цьому протоколі для зниження вимог до смуги пропускання корисно відстежувати, чи являється слово в кеш-пам'яті об'єктом, що розділяється, чи ні, а саме, чи міститься воно в інших кешах.

Якщо ні, то немає ніякої необхідності оновлювати інший кеш або транслювати в нього оновлені дані.

Різниця в продуктивності між протоколами запису з оновленням і з анулюванням визначається трьома характеристиками:

1. Декілька послідовних операцій запису в одне і те ж слово, що не перемежаються операціями читання, вимагають декількох операцій трансляції при використанні протоколу запису з оновленням, але тільки одній початковій операції анулювання при використанні протоколу запису з анулюванням.

2. За наявності багатослівних блоків в кеш-пам'яті кожне слово, записуване у блок кеша, вимагає трансляції при використанні протоколу запису з оновленням, тоді як тільки перший запис у будь-яке слово блоку потребує генерації операції анулювання при використанні протоколу запису з анулюванням. Протокол запису з анулюванням працює на рівні блоків кеш-пам'яті, тоді як протокол запису з оновленням повинен працювати на рівні окремих слів (чи байтів, якщо виконується запис байта).

3. Затримка між записом слова в одному процесорі і читанням записаного значення іншим процесором зазвичай менше при використанні схеми запису з оновленням, оскільки записані дані негайно транслюються в процесор, що виконує читання (передбачається, що цей процесор має копію даних).

Для порівняння, при використанні протоколу запису з анулюванням в процесорі, що виконує читання, спочатку станеться анулювання його копії, потім робитиметься читання даних і його призупинення до тих пір, поки оновлена копія блоку не стане доступною і не повернеться в процесор.

Ці дві схеми багато в чому схожі на схеми роботи кеш-пам'яті з наскрізним записом і із записом із зворотним копіюванням. Також як і схема