Ассоциативная память, кэш-память. Влияние промахов кэш-памяти на производительность

Ассоциативная память

Ассоциативная память (CAM, Content Addressable Memory) — это память, в которой поиск осуществляется не по адресу, а по содержимому (признаку).

Каждая запись ассоциативной памяти содержит тег и данные (они находятся в запоминающем массиве из SRAM триггеров, но поиск происходит именно по тегу). Для поиска информации используются специальные схемы сравнения — компараторы (схема совпадения, в которой в каждой строке дублируется маска). Компаратор — это цифровая схема, которая сравнивает два значения и определяет, равны они или нет (XOR).

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

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

CAM используется в TLB (запоминающий массив содержит номера страниц), L1, L2 (именно массивы тегов, массивы данных обычные SRAM)


Кэш-память

Кэш-память — это высокоскоростная память небольшого объема, расположенная между процессором и ОЗУ.

Назначение кэша — уменьшить среднее время доступа к данным.

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

Современные процессоры обычно имеют несколько уровней кэша (L1, L2, L3). Чем ниже уровень, тем больше объем и больше время доступа.

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

При обращении к памяти процессор сначала проверяет кэш.

Кэш-попадание (Cache Hit) — нужные данные найдены в кэше и сразу передаются процессору.

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

Эффективность кэша основана на принципе локальности:

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

Влияние кэш-промахов

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

Даже небольшой процент промахов способен привести к значительному падению общей производительности системы.