Послідовність пам'яті проти узгодженості кешу


17

Чи правда, що послідовна послідовність є сильнішою властивістю, ніж кеш-когерентність?

Згідно з

Сорін, Даніель Дж; Хілл, Марк Д; Вуд, Девід А: Буквар про послідовність пам’яті та узгодженість кешу , Morgan & Claypool, 2011

послідовну послідовність можна описати як (не формально):

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

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

Тепер вони продовжують і описують узгодженість:

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

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

Нарешті, вони вказують на різницю:

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

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

Чи означає це, що узгодженість є менш суворою, ніж послідовність? (що здається кумедним!) Чи є сліди, когерентні, але не послідовні?


2
Зауважте, що нам не подобаються запитання форми "будь ласка, перевірте мою відповідь!". Чи можете ви додати більш конкретне запитання? Де ти вважаєш, що може бути ваш розрив?
Рафаель

@Raphael Ви маєте рацію, і це було не дуже добре почуття, коли я писав питання. Але що робити, якщо я не зміг знайти відповідь в Інтернеті (за винятком розпливчастих тверджень на кшталт "узгодженість говорить про один біт, який відрізняється від послідовності, який говорить про всі шматочки"), і так намагався знайти відповідь, і коли здається виявив, що не був впевнений, чи правильно він. Чи слід було поставити рибне питання? Або не дайте відповіді на запитання? :)
Айрат

@Ayrat Я прочитав останню частину вашого запитання як відповідь, яку ви хочете перевірити. Якщо це так, то має виникнути певне сумніви (ще, навіщо запитати?), Які слід чітко визначити для читачів. Може, я неправильно прочитав?
Рафаель

@Raphael "останню частину хочу перевірити" - так. "навіщо питати?" - тема нова, і я не був впевнений, що висновок правильний. Я спробую уникнути подібних питань у майбутньому і, мабуть, знайду когось, щоб перевірити це.)
Айрат

Відповіді:


11

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

Доказ послідовності послідовності передбачає узгодженість:

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

Реверс не виходить. Розглянемо два узгоджених місця пам'яті та з лише одним доступом до кожного та . Усі процесори домовляються про порядок доступу до місця а всі процесори домовляються про загальний порядок доступу до місця розташування , але деякі процесори можуть дотримуватися порядку , а інші можуть дотримуватися порядку . Отже, узгодженість не означає послідовну послідовність.y x 0 y 0 x y x y y xxyx0y0xyxyyx

Це може призвести до дивовижних результатів. Наприклад

initially A=B=0
process 1               process 2
store A := 1            load B (gets 1)
store B := 1            load A (gets 0) 

Цей слід є когерентним:

  • для А замовлення: proc2 loads A(gets 0),proc1 stores A:=1
  • для B замовлення: proc1 stores B:=1,proc2 loads B(gets 1)

Але це не послідовно! Оскільки якщо proc2 load Bповертається 1, то proc1 store A := 1вже сталося і proc2 load Aтакож слід повернути 1.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.