Инструкция управления кэшем
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2016 г. ) |
В вычислениях команда управления кэшем представляет собой подсказку, встроенную в команд поток процессора , предназначенную для повышения производительности аппаратных кэшей с использованием предварительного знания шаблона доступа к памяти, предоставленного программистом или компилятором . [1] Они могут уменьшить загрязнение кэша , снизить требования к полосе пропускания, обойти задержки, обеспечивая лучший контроль над рабочим набором . Большинство инструкций управления кэшем не влияют на семантику программы, хотя некоторые могут.
Примеры
[ редактировать ]Несколько таких инструкций с вариантами поддерживаются несколькими архитектурами набора команд процессора , такими как ARM , MIPS , PowerPC и x86 .
Предварительная выборка
[ редактировать ]Также называется касанием блока кэша данных . Его эффект заключается в запросе загрузки строки кэша, связанной с данным адресом. Это осуществляется с помощью PREFETCH
инструкция в наборе команд x86 . Некоторые варианты обходят более высокие уровни иерархии кэша , что полезно в контексте «потоковой передачи» для данных, которые просматриваются один раз, а не хранятся в рабочем наборе. должна Предварительная выборка происходить достаточно далеко вперед по времени, чтобы уменьшить задержку доступа к памяти, например, в цикле, просматривающем память линейно. коллекции компиляторов GNU Встроенная функция __builtin_prefetch
может использоваться для вызова этого на языках программирования C или C++ .
Предварительная выборка инструкций
[ редактировать ]Вариант предварительной выборки для кэша инструкций.
Блок кэша данных выделяет ноль
[ редактировать ]Эта подсказка используется для подготовки строк кэша перед полной перезаписью содержимого. В этом примере процессору не нужно ничего загружать из основной памяти . Семантический эффект эквивалентен выравниванию memset блока размером со строку кэша до нуля, но операция фактически бесплатна.
Блок кэша данных недействителен
[ редактировать ]Эта подсказка используется для удаления строк кэша без помещения их содержимого в основную память. Необходима осторожность, так как возможны неправильные результаты. В отличие от других подсказок кэша, семантика программы существенно изменена. Это используется в сочетании с allocate zero
для управления временными данными. Это экономит ненужную пропускную способность основной памяти и снижает загрязнение кэша.
Очистка блока кэша данных
[ редактировать ]Эта подсказка требует немедленного удаления строки кэша, освобождая место для будущих выделений. Он используется, когда известно, что данные больше не являются частью рабочего набора .
Другие подсказки
[ редактировать ]Некоторые процессоры поддерживают вариант инструкций загрузки-сохранения , которые также подразумевают подсказки кэша. Примером является load last
в наборе команд PowerPC , что предполагает, что данные будут использоваться только один раз, т. е. рассматриваемая строка кэша может быть помещена в начало очереди вытеснения, сохраняя при этом ее использование, если она все еще необходима.
Альтернативы
[ редактировать ]Автоматическая предварительная выборка
[ редактировать ]В последнее время инструкции управления кэшем стали менее популярными, поскольку все более совершенные конструкции процессоров приложений от Intel и ARM выделяют больше транзисторов для ускорения кода, написанного на традиционных языках, например, для выполнения автоматической предварительной выборки с аппаратным обеспечением для обнаружения шаблонов линейного доступа на лету. Однако эти методы могут оставаться действительными для процессоров, ориентированных на пропускную способность, которые имеют другой компромисс между пропускной способностью и задержкой и могут предпочесть выделить больше места для исполнительных модулей.
Блокнот памяти
[ редактировать ]Некоторые процессоры поддерживают блокнотную память , в которую можно помещать временные данные, и прямой доступ к памяти (DMA) для передачи данных в основную память и из нее , когда это необходимо. Этот подход используется процессором Cell и некоторыми встроенными системами . Это обеспечивает больший контроль над трафиком памяти и локальностью (поскольку рабочий набор управляется явными передачами) и устраняет необходимость в дорогостоящей когерентности кэша на многоядерной машине.
Недостатком является то, что для использования требуются существенно другие методы программирования. Очень сложно адаптировать программы, написанные на традиционных языках, таких как C и C++, которые предоставляют программисту единообразное представление о большом адресном пространстве (что является иллюзией, моделируемой кэшем). Традиционный микропроцессор может легче запускать устаревший код, который затем можно ускорить с помощью инструкций управления кэшем, в то время как машина на основе блокнота требует специального кодирования с нуля для равномерного функционирования. Инструкции управления кэшем специфичны для определенного размера строки кэша, который на практике может различаться в зависимости от поколения процессоров одного и того же архитектурного семейства. Кэши могут также помочь объединить операции чтения и записи из менее предсказуемых шаблонов доступа (например, во время отображения текстур ), в то время как блокнотный DMA требует переработки алгоритмов для более предсказуемых «линейных» обходов.
Поскольку такие блокноты, как правило, сложнее использовать с традиционными моделями программирования, хотя модели потоков данных (такие как TensorFlow ) могут быть более подходящими.
Вектор выборка
[ редактировать ]Векторные процессоры (например, современные графические процессоры (GPU) и Xeon Phi ) используют массивный параллелизм для достижения высокой пропускной способности, одновременно обходя задержку памяти (уменьшая необходимость предварительной выборки). Многие операции чтения выполняются параллельно для последующих вызовов вычислительного ядра ; Вычисления могут быть приостановлены в ожидании будущих данных, в то время как исполнительные блоки предназначены для работы с данными из прошлых запросов, которые уже поступили. Программистам легче использовать это в сочетании с соответствующими моделями программирования ( вычислительными ядрами ), но труднее применить к программированию общего назначения.
храниться множество копий временных состояний Недостаток заключается в том, что в локальной памяти может обрабатывающего элемента , ожидающих передачи данных.
Ссылки
[ редактировать ]- ^ «Руководство по Power PC см. в разделе 1.10.3 Инструкции по управлению кэшем» (PDF) . Архивировано из оригинала (PDF) 13 октября 2016 г. Проверено 11 июня 2016 г.