stringtranslate.com

Согласованность памяти

Когерентность памяти — это проблема, которая влияет на проектирование компьютерных систем , в которых два или более процессора или ядра используют общую область памяти . [1] [2] [3] [4]

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

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

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

При аппаратной реализации протокол когерентности может, например, работать на основе каталогов или на основе отслеживания (также называемого сниффингом ). К конкретным протоколам относятся протокол MSI и его производные MESI , MOSI и MOESI .

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

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

  1. ^ Сенсье, LM; Фотрие, П. (декабрь 1978 г.). «Новое решение проблем когерентности в системах с несколькими кэшами». Транзакции IEEE на компьютерах . С-27 (12): 1112–18. дои : 10.1109/TC.1978.1675013. S2CID  5898229.
  2. ^ Смит, Алан Джей (сентябрь 1982 г.). «Кэш памяти». Обзоры вычислительной техники ACM . 14 (3): 473–530. дои : 10.1145/356887.356892. S2CID  6023466.
  3. ^ Ли, Кай; Худак, Пол (ноябрь 1989 г.). «Когерентность памяти в системах общей виртуальной памяти». Транзакции по компьютерным системам . 7 (4): 321–59. дои : 10.1145/75104.75105 . S2CID  1678750.
  4. ^ Стенстрем, Пер (июнь 1990 г.). «Обзор схем когерентности кэша для мультипроцессоров». IEEE-компьютер . 23 (6): 12–24. дои : 10.1109/2.55497.