Мультипроцессорная когерентность кэш-памяти
Мультипроцессорная система с совместно используемой памятью состоит из двух или более независимых процессоров, каждый из которых выполняет либо часть большой программы, либо независимую программу. Все процессоры обращаются к командам и данным, хранящимся в общей основной памяти. Поскольку память является разделяемым ресурсом, при обращении к ней между процессорами возникает соперничество, в результате чего средняя задержка на доступ к памяти увеличивается. Для сокращения такой задержки каждому процессору придается локальная кэш-память, которая, обслуживая локальные обращения к памяти, во многих случаях предотвращает необходимость доступа к совместно используемой основной памяти. В свою очередь, оснащение каждого процессора локальной кэш-памятью приводит к так называемой проблеме когерентностиили согласованности кэш-памяти. Согласно [TOMA93, DUBO88] система является когерентной, если каждая операция чтения по какому-либо адресу, выполненная любым из процессоров, возвращает значение, занесенное в ходе последней операции записи по этому адресу, вне зависимости от того, какой из процессоров производил запись последним. В простейшей форме проблему когерентности кэш-памяти можно пояснить следующим образом (рис 11.5). Пусть два процессора P1 и P2 связаны с общей памятью посредством шины. Сначала оба процессора читают переменную x. Копии блоков, содержащих эту переменную, пересылаются из основной памяти в локальные кэши обоих процессоров (рис. 11.5 а). Далее процессор P1 выполняет операцию увеличения значения переменной x на единицу. Так как копия переменной уже находится в кэш-памяти данного процессора, произойдет кэш-попадание и значение x будет изменено только в кэш-памяти 1. Если теперь процессор P2 вновь выполнит операцию чтения x, то также произойдет кэш-попадание и P2 получит хранящееся в его кэш-памяти «старое» значение x (рис. 11.5 б). Рис. 11.5. Иллюстрация проблемы когерентности памяти: содержимое памяти а — до изменения значения x; б — после изменения Поддержание согласованности требует, чтобы при изменении элемента данных одним из процессоров, соответствующие изменения были проведены в кэш-памяти остальных процессоров, где есть копия измененного элемента данных, а также в общей памяти. Схожая проблема возникает, кстати, и в однопроцессорных системах, где используются несколько уровней кэш-памяти. Здесь требуется согласовать содержимое кэшей разных уровней. Для решения проблемы когерентности используются два подхода: программный и аппаратный. В некоторых системах применяют стратегии, совмещающие оба подхода.
|