Для обеспечения когерентности кэшей в многопроцессорных системах используются аппаратные механизмы. intuit.ru Они гарантируют, что любое считывание элемента данных возвращает последнее по времени записанное в него значение. intuit.ru
Существует несколько способов разрешения проблемы когерентности на аппаратном уровне: masters.donntu.ru
- Отказ от кэширования. masters.donntu.ru Принципиально решает проблему, но сильно снижает производительность системы за счёт разницы между скоростью работы процессоров и скоростью доступа к памяти. masters.donntu.ru
- Широковещательная рассылка. masters.donntu.ru При изменении значения переменной одним из процессоров применяется сквозная запись переменной в кэш этого процессора и в общую память, сразу же после этого всем процессорам рассылается запрос на обновление этой переменной в их кэшах. masters.donntu.ru
- Реализация специализированных протоколов когерентности. masters.donntu.ru Это сложный способ, требующий предварительной верификации и анализа на уровне моделей, но позволяющий добиться максимальной производительности параллельной системы. masters.donntu.ru
Некоторые классы протоколов когерентности:
- Протоколы на основе справочника. intuit.ru Информация о состоянии блока физической памяти содержится только в одном месте, называемом справочником (физически справочник может быть распределён по узлам системы). intuit.ru
- Протоколы наблюдения. intuit.ru Каждый кэш, который содержит копию данных некоторого блока физической памяти, имеет также соответствующую копию служебной информации о его состоянии. intuit.ru Обычно кэши расположены на общей шине, и контроллеры всех кэшей наблюдают за шиной, чтобы определять, какие обращения по адресам в пределах этого блока происходят со стороны других микропроцессоров. intuit.ru
- Перехват. ru.wikipedia.org Когда из какого-либо одного кэша данные переписываются в оперативную память, контроллеры остальных получают сигнал об этом изменении («перехватывают» информацию об изменении данных) и, если необходимо, изменяют соответствующие данные в своих кэшах. ru.wikipedia.org