Инструкция по управлению кешем

редактировать

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

Содержание
  • 1 Примеры
    • 1.1 Предварительная выборка
    • 1.2 Предварительная выборка инструкций
    • 1.3 Нулевое выделение блока кэша данных
    • 1.4 Недействительность блока кэша данных
    • 1.5 Сброс блока кэша данных
    • 1.6 Другое подсказки
  • 2 Альтернативы
    • 2.1 Автоматическая предварительная выборка
    • 2.2 Память электронного блока
    • 2.3 Выборка вектора
  • 3 Ссылки
Примеры

Несколько таких инструкций с вариантами поддерживаются несколькими архитектуры процессора набора команд, например ARM, MIPS, PowerPC и x86.

Prefetch

Также называется касанием блока кэша данных, эффект заключается в запросе загрузки строки кэша, связанной с заданным адресом. Это выполняется командой PREFETCHв наборе команд x86. Некоторые варианты обходят более высокие уровни иерархии кэша , что полезно в контексте «потоковой передачи» для данных, которые проходят один раз, а не хранятся в рабочем наборе. Предварительная выборка должна происходить достаточно далеко вперед по времени, чтобы уменьшить задержку доступа к памяти, например, в цикле линейного обхода памяти. Внутренняя функция GNU Compiler Collection __builtin_prefetchможет использоваться для вызова этого в языках программирования C или C ++.

Предварительная выборка инструкций

Вариант предварительной выборки для кэша инструкций.

Блок кэша данных выделяет ноль

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

Недействительный блок кэша данных

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

Сброс блока кэша данных

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

Другие подсказки

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

Альтернативы

Автоматическая предварительная выборка

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

Электронная память

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

Недостаток в том, что для этого требуются существенно разные методы программирования. Очень сложно адаптировать программы, написанные на традиционных языках, таких как C и C ++, которые предоставляют программисту единообразное представление о большом адресном пространстве (что является иллюзией, моделируемой кешами). Традиционный микропроцессор может более легко запускать унаследованный код, который затем может быть ускорен с помощью инструкций управления кешем, в то время как машина на основе блокнота требует специального кодирования с нуля до четной функции. Команды управления кэшем относятся к определенному размеру строки кэша, который на практике может варьироваться между поколениями процессоров одного и того же архитектурного семейства. Кеши также могут помочь объединить операции чтения и записи из менее предсказуемых шаблонов доступа (например, во время сопоставления текстур ), в то время как блокнотный DMA требует переработки алгоритмов для более предсказуемого «линейного» обхода.

Поскольку такие блокноты обычно труднее использовать с традиционными моделями программирования, хотя модели потока данных (такие как TensorFlow ) могут быть более подходящими.

Векторная выборка

Векторные процессоры (например, современный графический процессор (GPU) и Xeon Phi ) используют массивный параллелизм для достижения высокой пропускной способности, работая с задержкой памяти (уменьшая потребность в предварительной выборке). Многие операции чтения выполняются параллельно для последующих вызовов вычислительного ядра ; вычисления могут быть приостановлены в ожидании будущих данных, в то время как исполнительные блоки посвящены работе с данными из прошлых запросов, которые уже появились. Программистам проще использовать в сочетании с соответствующими моделями программирования (вычислительные ядра ), но сложнее применить к программированию общего назначения.

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

Ссылки
Последняя правка сделана 2021-05-13 13:06:43
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте