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

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

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

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

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

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

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

Ссылки

  1. ^ Censier, LM; Feautrier, P. (декабрь 1978 г.). «Новое решение проблем когерентности в системах с несколькими кэшами». IEEE Transactions on Computers . C-27 (12): 1112– 18. doi :10.1109/TC.1978.1675013. S2CID  5898229.
  2. ^ Смит, Алан Джей (сентябрь 1982 г.). «Кэш-память». ACM Computing Surveys . 14 (3): 473– 530. doi :10.1145/356887.356892. S2CID  6023466.
  3. ^ Ли, Кай; Хадак, Пол (ноябрь 1989 г.). «Когерентность памяти в системах общей виртуальной памяти». ACM Transactions on Computer Systems . 7 (4): 321–59 . doi : 10.1145/75104.75105 . S2CID  1678750.
  4. ^ Стенстром, Пер (июнь 1990 г.). «Обзор схем когерентности кэша для многопроцессорных систем». IEEE Computer . 23 (6): 12– 24. doi :10.1109/2.55497.
Взято с "https://en.wikipedia.org/w/index.php?title=Memory_coherence&oldid=1241368210"