Новосибирский государственный университетФакультет информационных технологий |
Задача возлагается на компилятор и операционную систему.
Программные приемы решения проблемы когерентности позволяют обойтись без дополнительного оборудования или свести его к минимуму. Привлекательность такого подхода в возможности устранения некогерентности еще до этапа выполнения программы, однако принятые компилятором решения могут в целом отрицательно сказаться на эффективности кэш-памяти.
Компилятор анализирует программный код, определяет те совместно используемые данные, которые могут стать причиной некогерентности, и помечает их. В процессе выполнения программы операционная система или соответствующая аппаратура предотвращают кэширование (занесение в кэш-память) помеченных данных, и в дальнейшем для доступа к ним, как при чтении, так и при записи, приходится обращаться к «медленной» основной памяти. Учитывая, что некогерентность возникает только в результате операций записи, происходящих значительно реже, чем чтение, рассмотренный прием следует признать недостаточно удачным.
Более эффективными представляются способы, где в ходе анализа программы определяются безопасные периоды использования общих переменных и так называемые критические периоды, где может проявиться некогерентность. Затем компилятор вставляет в генерируемый код команды, позволяющие обеспечить когерентность всей кэш-памяти именно в такие критические периоды.
Ключевые термины: когерентность кэш-памяти;
Федотова Ольга |
НГУ ФИТ НГУ ИВТ СО РАН |