Протокол кэширования MESI

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

Кэш, содержащий строку в состоянии Modified, должен отслеживать (перехватывать)все попытка чтения (из всех остальных кэшей в системе)соответствующую ячейку основной памяти и вставьте содержащиеся в ней данные. Это обычно делается путем принудительной остановки чтения (, т.е. повторите попытку позже), затем напишите данные в основную память и перевод строки кэша в состояние Shared.

Теперь я не понимаю, почему данные должны быть записаны в основную память. Может ли когерентность кеша просто поддерживать синхронизацию содержимого в кешах, не обращаясь в память (, если, конечно, строка кеша действительно не вытеснена)? Я имею в виду, если одно ядро ​​постоянно читает, а другое постоянно пишет, почему бы не хранить данные в кэш-памяти и постоянно обновлять данные в кэше. Зачем брать на себя выполнение обратной записи в основную память?

Другими словами, не могут ли ядра, считывающие данные, напрямую считывать данные из кэша записывающего ядра и соответствующим образом модифицировать свой кэш?

9
задан Max Galkin 24 May 2015 в 01:09
поделиться