Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Когерентность памяти – это проблема, влияющая на проектирование компьютерных систем, в которых два или более процессоров или ядер совместно используют общую область памяти. В однопроцессорной системе (где существует только одно ядро) имеется только один вычислительный элемент, выполняющий всю работу, и, следовательно, только он может читать или записывать данные в заданное местоположение памяти. В результате, при изменении значения, все последующие операции чтения из соответствующего местоположения памяти будут видеть обновленное значение, даже если оно закэшировано. Напротив, в многопроцессорных (или многоядерных) системах одновременно работают два или более вычислительных элемента, и поэтому возможно, что они одновременно обращаются к одному и тому же местоположению памяти. Если ни один из них не изменяет данные в этом месте, они могут совместно использовать их неограниченно долго и кэшировать по своему усмотрению. Но как только один из них обновляет это местоположение, другие могут работать с устаревшей копией, например, находящейся в их локальном кэше. Следовательно, необходим механизм для уведомления всех вычислительных элементов об изменениях общих значений; такой механизм известен как протокол когерентности памяти, и если такой протокол используется, то говорят, что система обладает когерентной памятью. Точная природа и смысл когерентности памяти определяются моделью согласованности, которую реализует протокол когерентности. Для написания корректных параллельных программ программисты должны знать точную модель согласованности, используемую в их системах. При аппаратной реализации протокол когерентности может быть, например, основан на каталоге или на прослушивании (также называемом "сниффингом"). Конкретные протоколы включают протокол MSI и его производные MESI, MOSI и MOESI.
Memory coherence is an issue that affects the design of computer systems in which two or more processors or cores share a common area of memory. In a uniprocessor system (where there exists only one core), there is only one processing element doing all the work and therefore only one processing element that can read or write from/to a given memory location. As a result, when a value is changed, all subsequent read operations of the corresponding memory location will see the updated value, even if it is cached. Conversely, in multiprocessor (or multicore) systems, there are two or more processing elements working at the same time, and so it is possible that they simultaneously access the same memory location. Provided none of them changes the data in this location, they can share it indefinitely and cache it as they please. But as soon as one updates the location, the others might work on an out of date copy that, e. g., resides in their local cache. Consequently, some scheme is required to notify all the processing elements of changes to shared values; such a scheme is known as a memory coherence protocol, and if such a protocol is employed the system is said to have a coherent memory. The exact nature and meaning of the memory coherency is determined by the consistency model that the coherence protocol implements. In order to write correct concurrent programs, programmers must be aware of the exact consistency model that is employed by their systems. When implemented in hardware, the coherency protocol can, for example, be directory based or snooping based (also called sniffing). Specific protocols include the MSI protocol and its derivatives MESI, MOSI and MOESI.