Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Параллелизм.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
210.94 Кб
Скачать

Мультипроцессорная когерентность кэш – памяти.

Мультипроцессорная система с разделяемой памятью состоит из двух и более независимых процессоров, каждый из которых выполняет либо часть большой программы, либо независимую программу . Все процессоры обращаются к командам и данным, хранящимся в общей основной памяти. Поскольку память является обобществленным ресурсом, при обращении к ней между процессорами возникает соперничество, в результате чего средняя задержка на доступ к памяти увеличивается. Для сокращения такой задержки каждому процессору придается локальная кэш – память, которая, обслуживая локальные обращения к памяти, во многих случаях предотвращает необходимость доступа к совместно используемой основной памяти. В свою очередь, оснащение каждого процессора локальной кэш – памятью приводит к так называемой проблеме когерентности или обеспечения согласованности кэш – памяти. Принято что система является когерентной, если каждая операция чтения по какому – либо адресу, выполненная любым из процессоров, возвращает значение, занесенное в ходе последней операции по этому адресу, вне зависимости от того, какой из процессоров производил запись последним.

Пример. Допустим два процессора П1 и П2 связаны с общей памятью по общей шине. Сначала оба процессора читают переменную х Копии этой переменной пересылаются в соответствующие каждому процессору кэш – модули памяти. Далее процессор П1 выполняет операцию инкрементирования переменной на единицу. Поэтому в кэш – памяти первого процессора переменная будет изменена. Если теперь процессор П2 произведет чтение переменной из своего кэш – блока, то он прочтет старые неизмененные данные.поддержание согласованности требует, чтобы при изменении элемента данных одним из процессоров, соответствующие изменения произошли и в кэш – модулях памяти остальных процессоров, а также в общей памяти. Схожая проблема, кстати, возникает и в однопроцессорных машинах, где присутствует несколько уровней кэш – памяти. Здесь требуется согласованность содержимого КЭШей всех уровней и оперативной памяти.

При решении проблемы когерентности используются два подхода: аппаратный и программный.

Программные способы

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

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

Более эффективным представляются способы , где в ходе анализа программы определяются безопасные периоды использования общих переменных и так называемые критические периоды, где может проявиться некогерентность. Затем компилятор вставляет в генерируемый код инструкции, позволяющие обеспечить когерентность кэш – памяти именно в такие периоды.