Кэш (вычислительный)


В вычислительной технике кеш ( / k æ ʃ / ( listen ) KASH ) [ 1] — это аппаратный или программный компонент, который хранит данные, чтобы будущие запросы на эти данные могли обслуживаться быстрее; данные, хранящиеся в кэше, могут быть результатом более ранних вычислений или копией данных, хранящихся в другом месте. Попадание в кеш происходит, когда запрошенные данные могут быть найдены в кеше, в то время как кеш-промахпроисходит, когда это невозможно. Попадания в кэш обслуживаются путем чтения данных из кэша, что быстрее, чем повторное вычисление результата или чтение из более медленного хранилища данных; таким образом, чем больше запросов может быть обслужено из кэша, тем быстрее работает система. [2]

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

Существует неотъемлемый компромисс между размером и скоростью (учитывая, что больший ресурс подразумевает большие физические расстояния), а также компромисс между дорогими технологиями премиум-класса (такими как SRAM ) и более дешевыми, легко производимыми товарами (такими как DRAM или жесткие диски ). диски ).

Доступ к более крупному ресурсу вызывает значительную задержку — например, современному процессору с частотой 4 ГГц может потребоваться сотни тактовых циклов для доступа к DRAM . Это смягчается чтением большими порциями в надежде, что последующие чтения будут из близлежащих местоположений. Прогнозирование или явная предварительная выборка могут также угадывать, откуда будут поступать будущие операции чтения, и делать запросы заранее; если все сделано правильно, задержка полностью обойдена.

Использование кэша также обеспечивает более высокую пропускную способность базового ресурса за счет объединения нескольких мелкозернистых передач в более крупные и более эффективные запросы. В случае схем DRAM это может быть обеспечено за счет более широкой шины данных. Например, рассмотрим программу, обращающуюся к байтам в 32-битном адресном пространстве , но обслуживаемую 128-битной внешней шиной данных; доступ к отдельным некэшированным байтам позволил бы использовать только 1/16 от общей пропускной способности, а 80% перемещения данных были бы адресами памяти, а не самими данными. Чтение больших фрагментов уменьшает долю полосы пропускания, необходимую для передачи адресной информации.

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


Схема работы кэш-памяти ЦП
Кэш со сквозной записью без выделения памяти для записи
Кэш с обратной записью с распределением записи