# Coherència de la memòria cau

En l'arquitectura d'ordinadors, la coherència de la memòria cau és la uniformitat de les dades de recursos compartits que s'emmagatzemen en múltiples memòria cau local. Quan els clients d'un sistema mantenen la memòria cau d'un recurs de memòria comú, poden sorgir problemes amb dades incoherents, que és particularment el cas de les CPU en un sistema multiprocessament.
A la il·lustració de la dreta, considereu que tots dos clients tenen una còpia en memòria cau d'un bloc de memòria concret d'una lectura anterior. Suposem que el client de la part inferior actualitza/canvia aquest bloc de memòria, el client de la part superior es podria deixar amb una memòria cau no vàlida sense cap notificació del canvi. La coherència de la memòria cau està pensada per gestionar aquests conflictes mantenint una visió coherent dels valors de dades en múltiples memòria cau.

## Visió general

En un sistema multiprocessador de memòria compartida amb una memòria cau separada per a cada processador, és possible tenir moltes còpies de dades compartides: una còpia a la memòria principal i una altra a la memòria cau local de cada processador que ho ha sol·licitat. Quan es canvia una de les còpies de dades, les altres còpies han de reflectir aquest canvi. La coherència de la memòria cau és la disciplina que assegura que els canvis en els valors dels operands compartits (dades) es propaguen per tot el sistema de manera oportuna.
Els següents són els requisits per a la coherència de la memòria cau:

### Propagació d'escriptura

    Els canvis a les dades de qualsevol memòria cau s'han de propagar a altres còpies (d'aquesta línia de memòria cau) a les memòries cau.

### Serialització de transaccions

    Les lectures/escriptures en una única ubicació de memòria han de ser vistes per tots els processadors en el mateix ordre.
Teòricament, la coherència es pot realitzar a la granularitat de càrrega/emmagatzematge. Tanmateix, a la pràctica generalment es realitza amb la granularitat dels blocs de memòria cau.

## Definició

La coherència defineix el comportament de les lectures i escriptures en una única ubicació d'adreça.
Un tipus de dades que es produeixen simultàniament en diferents memòries cau s'anomena coherència de memòria cau, o en alguns sistemes, memòria global.
En un sistema multiprocessador, considereu que més d'un processador ha emmagatzemat en memòria cau una còpia de la ubicació de memòria X. Les condicions següents són necessàries per aconseguir la coherència de la memòria cau:
* En una lectura feta per un processador P a una ubicació X que segueix una escriptura del mateix processador P a X, sense que es produeixin escriptures a X per un altre processador entre les instruccions d'escriptura i de lectura fetes per P, X sempre ha de retornar el valor. escrit per P.
* En una lectura feta per un processador P1 a la ubicació X que segueix una escriptura d'un altre processador P2 a X, sense que cap altre escriptura a X feta per cap processador es produeixi entre els dos accessos i amb la lectura i l'escriptura suficientment separades, X sempre ha de retorna el valor escrit per P2. Aquesta condició defineix el concepte de visió coherent de la memòria. La propagació de les escriptures a la ubicació de memòria compartida garanteix que totes les memòria cau tinguin una visió coherent de la memòria. Si el processador P1 llegeix el valor antic de X, fins i tot després de l'escriptura de P2, podem dir que la memòria és incoherent.
* Les escriptures a la mateixa ubicació s'han de seqüenciar. En altres paraules, si la ubicació X va rebre dos valors diferents A i B, en aquest ordre, de dos processadors qualsevol, els processadors mai poden llegir la ubicació X com a B i després llegir-la com a A. La ubicació X s'ha de veure amb els valors A i B en aquest ordre.

## Mecanismes de coherència

Els dos mecanismes més habituals per garantir la coherència són el rastreig i el basat en directoris, cadascun amb els seus propis avantatges i inconvenients. Els protocols basats en snooping solen ser més ràpids, si hi ha prou amplada de banda disponible, ja que totes les transaccions són una sol·licitud/resposta vista per tots els processadors. L'inconvenient és que el snooping no és escalable. Cada sol·licitud s'ha de transmetre a tots els nodes d'un sistema, és a dir, a mesura que el sistema es fa més gran, la mida del bus (lògic o físic) i l'ample de banda que proporciona ha de créixer. Els directoris, d'altra banda, solen tenir latències més llargues (amb una sol·licitud/enviament/resposta de 3 salts), però utilitzen molt menys amplada de banda, ja que els missatges són punt a punt i no s'emeten. Per aquest motiu, molts dels sistemes més grans (>64 processadors) utilitzen aquest tipus de coherència de memòria cau.

## Protocols de coherència

S'han ideat diversos models i protocols per mantenir la coherència, com ara MSI, MESI (també conegut com Illinois), MOSI, MOESI, MERSI, MESIF, write-once, Synapse, Berkeley, Firefly i Dragon protocol. El 2011, ARM Ltd va proposar l'AMBA 4 ACE per gestionar la coherència en els SoC. L'especificació AMBA CHI (Coherent Hub Interface) d'ARM Ltd, que pertany al grup d'especificacions AMBA5 defineix les interfícies per a la connexió de processadors totalment coherents.

## Referències

* ↑ «Cache Coherence I – Computer Architecture» (en anglès). [Consulta: 29 agost 2023].
* ↑ «Cache Coherence» (en anglès americà). https://www.geeksforgeeks.org,+27-07-2020.+[Consulta: 29 agost 2023].
* ↑ Yan, Solihin. Fundamentals of parallel multicore architecture (en anglès). OCLC 884540034.
* ↑ Sorin, Daniel J.. A primer on memory consistency and cache coherence (en anglès). Morgan & Claypool Publishers, 2011. OCLC 726930429.
* ↑ Yan, Solihin. Fundamentals of parallel multicore architecture (en anglès). OCLC 884540034.
* ↑ Patterson and Hennessy. Computer Organization and Design - 4th Edition (en anglès). ISBN 978-0-12-374493-7.
* ↑ Kriouile. Formal Analysis of the ACE Specification for Cache Coherent Systems-on-Chip. In Formal Methods for Industrial Critical Systems (en anglès). Springer Berlin Heidelberg, 16 September 2013. ISBN 978-3-642-41010-9.
* ↑ Ltd, Arm. «AMBA | AMBA 5» (en anglès). Arm Developer. [Consulta: 27 abril 2021].