Лекция: Однородный доступ к памяти

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

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

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

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

Разъясним это понятие. Есть вероятность, что один и тотже участок памяти (например, который отвечает некоторой структуре данных) будет одновременно сохранен в кэшах нескольких процессоров. Рассмотрим ситуацию, когда код одного из потоков изменяет эту структуру данных. В итоге изменится содержание основной памяти и кэш процессора, на котором выполнялся этот поток. Содержание кэшей других процессоров при этом останется неизменным и перестанет отвечать данным, которые находятся в основной памяти, — кэш потеряет когерентность.

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

Невзирая на эти проблемы, UMA-архитектуру с когерентным кэшем широко используют на практике.

еще рефераты
Еще работы по информатике