Jump to content

Предварительная выборка кэша

Предварительная выборка из кэша — это метод, используемый компьютерными процессорами для повышения производительности выполнения путем извлечения инструкций или данных из исходного хранилища в более медленной памяти в более быструю локальную память до того, как они действительно потребуются (отсюда и термин «предварительная выборка»). [1] [2] Большинство современных компьютерных процессоров имеют быструю локальную кэш-память , в которой предварительно выбранные данные хранятся до тех пор, пока они не потребуются. Источником операции предварительной выборки обычно является основная память . Из-за их конструкции доступ к кэш-памяти обычно происходит намного быстрее, чем доступ к основной памяти , поэтому предварительная выборка данных и последующий доступ к ним из кэшей обычно на много порядков быстрее, чем доступ к ним непосредственно из основной памяти. Предварительную выборку можно выполнить с помощью неблокирующих инструкций управления кэшем .

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

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

Предварительная выборка из кэша может извлекать в кеш данные или инструкции.

  • Предварительная выборка данных извлекает данные до того, как они потребуются. Поскольку шаблоны доступа к данным демонстрируют меньшую регулярность, чем шаблоны инструкций, точная предварительная выборка данных обычно является более сложной задачей, чем предварительная выборка инструкций.
  • Предварительная выборка инструкций извлекает инструкции до того, как они должны быть выполнены. Первыми массовыми микропроцессорами, использовавшими ту или иную форму предварительной выборки инструкций, были Intel 8086 (шесть байтов) и Motorola 68000 (четыре байта). В последние годы все высокопроизводительные процессоры используют методы предварительной выборки.

Аппаратная и программная предварительная выборка кэша

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

Предварительная выборка кэша может выполняться аппаратно или программно. [3]

  • Аппаратная предварительная выборка обычно осуществляется за счет наличия в процессоре специального аппаратного механизма, который отслеживает поток инструкций или данных, запрашиваемых исполняющей программой, распознает следующие несколько элементов, которые могут понадобиться программе, на основе этого потока и выполняет предварительную выборку в кеш процессора. . [4]
  • Программная предварительная выборка обычно выполняется путем анализа кода компилятором и вставки дополнительных инструкций «предварительной выборки» в программу во время самой компиляции. [5]

Методы аппаратной предварительной выборки

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

Потоковые буферы

[ редактировать ]
  • Потоковые буферы были разработаны на основе концепции «схемы одноблочного просмотра вперед (OBL)», предложенной Аланом Джеем Смитом . [1]
  • потока Буферы — один из наиболее распространенных аппаратных методов предварительной выборки. Этот метод был первоначально предложен Норманом Джуппи в 1990 году. [6] и с тех пор было разработано множество вариаций этого метода. [7] [8] [9] Основная идея заключается в том, что адрес промаха кэша последующие адреса) извлекаются в отдельный буфер глубины . Этот буфер называется буфером потока и отделен от кэша. Затем процессор потребляет данные/инструкции из буфера потока, если адрес, связанный с предварительно выбранными блоками, соответствует запрошенному адресу, сгенерированному программой, выполняющейся на процессоре. На рисунке ниже показана эта установка:
Типичная настройка буфера потока, предложенная изначально.
Типичная установка буфера потока, первоначально предложенная Норманом Джуппи в 1990 году. [6]
  • Всякий раз, когда механизм предварительной выборки обнаруживает промах в блоке памяти, скажем, A, он выделяет поток для начала предварительной выборки последовательных блоков, начиная с пропущенного блока. Если буфер потока может содержать 4 блока, то процессор предварительно выберет A+1, A+2, A+3, A+4 и сохранит их в выделенном буфере потока. Если процессор затем потребляет A+1, то он должен быть перемещен «вверх» из буфера потока в кэш процессора. Первой записью буфера потока теперь будет A+2 и так далее. Этот шаблон предварительной выборки последовательных блоков называется последовательной предварительной выборкой . В основном он используется, когда необходимо предварительно выбрать смежные местоположения. Например, он используется при предварительной выборке инструкций.
  • Этот механизм можно расширить, добавив несколько таких «буферов потока», каждый из которых будет поддерживать отдельный поток предварительной выборки. [10] Для каждого нового промаха будет выделяться новый буфер потока, и он будет работать аналогично описанному выше.
  • Идеальная глубина буфера потока — это то, что подлежит экспериментированию с различными тестами. [6] и зависит от остальной части задействованной микроархитектуры . [11]

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

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

Этот тип предварительной выборки отслеживает разницу между адресами обращений к памяти и ищет в ней закономерности.

Регулярные шаги

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

В этом шаблоне последовательный доступ к памяти осуществляется к блокам, которые адреса отдельно. [3] [12] В этом случае программа предварительной выборки вычисляет и использует его для вычисления адреса памяти для предварительной выборки. Например: Если равно 4, адрес для предварительной выборки будет A+4.

Неравномерные пространственные шаги

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

В этом случае дельта между адресами последовательных обращений к памяти является переменной, но все равно подчиняется определенному шаблону. Некоторые проекты предварительной выборки [9] [13] [14] используйте это свойство для прогнозирования и предварительной выборки для будущих обращений.

Нерегулярная временная предварительная выборка

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

Этот класс устройств предварительной выборки ищет потоки доступа к памяти, которые повторяются с течением времени. [15] [16] Например, в этом потоке доступа к памяти: N, A, B, C, E, G, H, A, B, C, I, J, K, A, B, C, L, M, N, O, A, Б, С, ...; потоки A,B,C повторяются со временем. Другие варианты конструкции пытались обеспечить более эффективные и производительные реализации. [17] [18]

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

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

Компьютерные приложения генерируют различные шаблоны доступа. Архитектура подсистемы процессора и памяти, используемая для выполнения этих приложений, дополнительно устраняет неоднозначность генерируемых ими шаблонов доступа к памяти. Следовательно, эффективность и результативность схем предварительной выборки часто зависят от приложения и архитектуры, используемой для их выполнения. [19] Недавние исследования [20] [21] сосредоточился на создании совместных механизмов для синергического использования нескольких схем предварительной выборки для лучшего охвата и точности предварительной выборки.

Методы предварительной загрузки программного обеспечения

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

Предварительная выборка, управляемая компилятором

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

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

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

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

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

Рассмотрим цикл for, как показано ниже:

for (int i=0; i<1024; i++) {
    array1[i] = 2 * array1[i];
}

На каждой итерации i й осуществляется доступ к элементу массива «array1». Таким образом, система может предварительно выбирать элементы, к которым будет осуществляться доступ в будущих итерациях, путем вставки инструкции «предварительной выборки», как показано ниже:

for (int i=0; i<1024; i++) {
    prefetch (array1 [i + k]);
    array1[i] = 2 * array1[i];
}

Здесь шаг предварительной выборки, зависит от двух факторов: штрафа за промах в кэше и времени, необходимого для выполнения одной итерации цикла for . Например, если выполнение одной итерации цикла занимает 7 тактов, а штраф за промах в кэше составляет 49 тактов, то должно быть - это означает, что система должна выполнить предварительную выборку на 7 элементов вперед. На первой итерации i будет 0, поэтому система предварительно выбирает 7-й элемент. Теперь, при таком расположении, первые 7 обращений (i=0->6) по-прежнему будут промахами (при упрощающем предположении, что каждый элемент массива1 находится в отдельной строке кэша).

Сравнение аппаратной и программной предварительной выборки

[ редактировать ]
  • В то время как предварительная выборка программного обеспечения требует вмешательства программиста или компилятора , предварительная выборка аппаратного обеспечения требует специальных аппаратных механизмов. [3]
  • Программная предварительная выборка хорошо работает только с циклами, в которых имеется регулярный доступ к массиву, поскольку программисту приходится вручную кодировать инструкции предварительной выборки, тогда как аппаратные предварительные выборки работают динамически в зависимости от поведения программы во время выполнения . [3]
  • Аппаратная предварительная выборка также требует меньших затрат ресурсов ЦП по сравнению с программной предварительной выборкой. [22] Однако предварительная выборка программного обеспечения может смягчить определенные ограничения аппаратной предварительной выборки, что приведет к повышению производительности. [23]

Метрики предварительной выборки кэша

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

Существует три основных показателя, по которым можно оценить предварительную выборку из кэша. [3]

Покрытие

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

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

,

где,

Точность

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

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

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

Своевременность

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

Качественное определение своевременности заключается в том, насколько рано блок предварительно извлекается по сравнению с моментом фактического обращения к нему. Примером для дальнейшего объяснения своевременности является следующий:

Рассмотрим цикл for, в котором каждая итерация занимает 3 цикла, а операция предварительной выборки — 12 тактов. Это означает, что для того, чтобы предварительно выбранные данные были полезными, система должна запустить предварительную выборку. итераций перед его использованием для обеспечения своевременности.

См. также

[ редактировать ]
  1. ^ Jump up to: Перейти обратно: а б Смит, Алан Джей (1 сентября 1982 г.). «Кэш памяти». АКМ Компьютер. Сурв . 14 (3): 473–530. дои : 10.1145/356887.356892 . ISSN   0360-0300 . S2CID   6023466 .
  2. ^ Ли, Чуньлинь; Сун, Минъян; Ду, Шаофэн; Ван, Сяохай; Чжан, Мин; Ло, Юлун (01 сентября 2020 г.). «Адаптивная замена кэша на основе приоритетов и предварительная выборка кэша на основе прогнозирования в среде периферийных вычислений» . Журнал сетевых и компьютерных приложений . 165 : 102715. doi : 10.1016/j.jnca.2020.102715 . S2CID   219506427 .
  3. ^ Jump up to: Перейти обратно: а б с д и ж Солихин, Ян (2016). Основы параллельной многоядерной архитектуры . Бока-Ратон, Флорида: CRC Press, Taylor & Francisco Group. п. 163. ИСБН  978-1482211184 .
  4. ^ Баер, Жан-Лу; Чен, Тянь-Фу (1 января 1991 г.). Эффективная схема предварительной загрузки на кристалл для снижения штрафов за доступ к данным . 1991 Конференция ACM/IEEE по суперкомпьютерам. Альбукерке, Нью-Мексико, США: Ассоциация вычислительной техники. стр. 176–186. CiteSeerX   10.1.1.642.703 . дои : 10.1145/125826.125932 . ISBN  978-0897914598 .
  5. ^ Кеннеди, Портерфилд, Аллан (1 января 1989 г.). Программные методы повышения производительности кэша суперкомпьютерных приложений (Диссертация). Университет Райса. HDL : 1911/19069 . {{cite thesis}}: CS1 maint: несколько имен: список авторов ( ссылка )
  6. ^ Jump up to: Перейти обратно: а б с Джуппи, Норман П. (1990). «Улучшение производительности кэша с прямым отображением за счет добавления небольшого полностью ассоциативного кэша и буферов предварительной выборки». Материалы 17-го ежегодного международного симпозиума по компьютерной архитектуре – ISCA 1990 . 17-й ежегодный международный симпозиум по компьютерной архитектуре – ISCA 1990. Нью-Йорк, Нью-Йорк, США: Association for Computing Machinery Press. стр. 364–373. CiteSeerX   10.1.1.37.6114 . дои : 10.1145/325164.325162 . ISBN  0-89791-366-3 .
  7. ^ Чен, Тянь-Фу; Баер, Жан-Лу (1 мая 1995 г.). «Эффективная аппаратная предварительная выборка данных для высокопроизводительных процессоров». Транзакции IEEE на компьютерах . 44 (5): 609–623. дои : 10.1109/12.381947 . ISSN   0018-9340 . S2CID   1450745 .
  8. ^ Палачарла, С.; Кесслер, Р.Э. (1 января 1994 г.). Оценка потоковых буферов как замена вторичного кэша . 21-й ежегодный международный симпозиум по компьютерной архитектуре. Чикаго, Иллинойс, США: Издательство IEEE Computer Society Press. стр. 24–33. CiteSeerX   10.1.1.92.3031 . дои : 10.1109/ISCA.1994.288164 . ISBN  978-0818655104 .
  9. ^ Jump up to: Перейти обратно: а б Граннес, Мариус; Яре, Магнус; Натвиг, Лассе (2011). «Эффективная аппаратная предварительная выборка хранилища с использованием таблиц прогнозирования с дельта-корреляцией». Журнал параллелизма на уровне инструкций (13): 1–16. CiteSeerX   10.1.1.229.3483 .
  10. ^ Исии, Ясуо; Инаба, Мэри; Хираки, Кей (8 июня 2009 г.). «Сопоставление шаблона карты доступа для предварительной выборки кэша данных» . Материалы 23-й Международной конференции по суперкомпьютерам . ICS 2009. Нью-Йорк, Нью-Йорк, США: Ассоциация вычислительной техники. стр. 499–500. дои : 10.1145/1542275.1542349 . ISBN  978-1-60558-498-0 . S2CID   37841036 .
  11. ^ Шринатх, Сантош; Мутлу, Онур; Ким, Хесон ; Патт, Йель Н. (февраль 2007 г.). Предварительная выборка с обратной связью: повышение производительности и эффективности использования полосы пропускания аппаратных средств предварительной выборки . 2007 13-й Международный симпозиум IEEE по высокопроизводительной компьютерной архитектуре. стр. 63–74. дои : 10.1109/HPCA.2007.346185 . ISBN  978-1-4244-0804-7 . S2CID   6909725 .
  12. ^ Конгули, Сушант; Хуанг, Майкл (ноябрь 2017 г.). T2: высокоточный и энергоэффективный предварительный выбор шага . Международная конференция IEEE по компьютерному дизайну (ICCD), 2017 г. стр. 373–376. дои : 10.1109/ICCD.2017.64 . ISBN  978-1-5386-2254-4 . S2CID   11055312 .
  13. ^ Шевгур, Манджунатх; Коладия, Сахиль; Баласубрамонян, Раджив; Вилкерсон, Крис; Пагсли, Сет Х.; Чишти, Зешан (декабрь 2015 г.). Эффективная предварительная выборка сложных шаблонов адресов . 2015 48-й ежегодный Международный симпозиум IEEE/ACM по микроархитектуре (MICRO). стр. 141–152. дои : 10.1145/2830772.2830793 . ISBN  9781450340342 . S2CID   15294463 .
  14. ^ Ким, Джинчунь; Пагсли, Сет Х.; Грац, Пол В.; Редди, А. Л. Нарасимха; Вилкерсон, Крис; Чишти, Зешан (октябрь 2016 г.). Предварительная выборка на основе достоверности пути . 2016 49-й ежегодный Международный симпозиум IEEE/ACM по микроархитектуре (MICRO). стр. 1–12. дои : 10.1109/MICRO.2016.7783763 . ISBN  978-1-5090-3508-3 . S2CID   1097472 .
  15. ^ Джозеф, Дуг; Грюнвальд, Дирк (1 мая 1997 г.). «Предварительная выборка с использованием марковских предикторов» . Материалы 24-го ежегодного международного симпозиума по компьютерной архитектуре . ISCA 1997. ISCA 1997. Нью-Йорк, Нью-Йорк, США: Ассоциация вычислительной техники. стр. 252–263. дои : 10.1145/264107.264207 . ISBN  978-0-89791-901-2 . S2CID   434419 .
  16. ^ Коллинз, Дж.; Саир, С.; Колдер, Б.; Таллсен, DM (ноябрь 2002 г.). Предварительная выборка с помощью кэша указателей . 35-й ежегодный международный симпозиум IEEE/ACM по микроархитектуре, 2002 г. (MICRO-35). Слушания. стр. 62–73. дои : 10.1109/MICRO.2002.1176239 . ISBN  0-7695-1859-1 . S2CID   5608519 .
  17. ^ Джайн, Аканкша; Лин, Кэлвин (07 декабря 2013 г.). «Линеаризация нерегулярного доступа к памяти для улучшения коррелированной предварительной выборки» . Материалы 46-го ежегодного международного симпозиума IEEE/ACM по микроархитектуре . МИКРО-46. Нью-Йорк, Нью-Йорк, США: Ассоциация вычислительной техники. стр. 247–259. дои : 10.1145/2540708.2540730 . ISBN  978-1-4503-2638-4 . S2CID   196831 .
  18. ^ «Практическое применение временной предварительной выборки: предварительная выборка MISB – Исследовательские статьи – Исследования Arm – Сообщество Arm» . сообщество.arm.com . 24 июня 2019 г. Проверено 16 марта 2022 г.
  19. ^ Ким, Джинчунь; Теран, Эльвира; Грац, Пол В.; Хименес, Дэниел А.; Пагсли, Сет Х.; Вилкерсон, Крис (12 мая 2017 г.). «Убить счетчик программ: реконструкция поведения программы в иерархии кэша процессора» . Уведомления ACM SIGPLAN . 52 (4): 737–749. дои : 10.1145/3093336.3037701 . ISSN   0362-1340 .
  20. ^ Конгули, Сушант; Хуанг, Майкл (2 июня 2018 г.). «Разделение труда: более эффективный подход к предварительной выборке» . Материалы 45-го ежегодного международного симпозиума по компьютерной архитектуре . ИСКА '18. Лос-Анджелес, Калифорния: IEEE Press. стр. 83–95. дои : 10.1109/ISCA.2018.00018 . ISBN  978-1-5386-5984-7 . S2CID   50777324 .
  21. ^ Пакалапати, Сэмюэл; Панда, Бисвабандан (май 2020 г.). Букет указателей инструкций: пространственная аппаратная предварительная выборка на основе классификатора указателей инструкций . 47-й ежегодный международный симпозиум по компьютерной архитектуре ACM/IEEE 2020 (ISCA). стр. 118–131. дои : 10.1109/ISCA45697.2020.00021 . ISBN  978-1-7281-4661-4 . S2CID   218683672 .
  22. ^ Каллахан, Дэвид; Кеннеди, Кен; Портерфилд, Аллан (1 января 1991 г.). Предварительная выборка программного обеспечения . Четвертая международная конференция по архитектурной поддержке языков программирования и операционных систем. Санта-Клара, Калифорния, США: Ассоциация вычислительной техники. стр. 40–52. дои : 10.1145/106972.106979 . ISBN  978-0897913805 .
  23. ^ Ли, Джэкю и Ким, Хесон и Вудук, Ричард (2012), «Когда предварительная выборка работает, когда нет и почему» (PDF) , ACM Trans. Архит. Код Оптим. , 9 : 1–29, дои : 10.1145/2133382.2133384 {{citation}}: CS1 maint: несколько имен: список авторов ( ссылка )
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bc3fba5b77fb8a745c9d42adec9340ab__1708026600
URL1:https://arc.ask3.ru/arc/aa/bc/ab/bc3fba5b77fb8a745c9d42adec9340ab.html
Заголовок, (Title) документа по адресу, URL1:
Cache prefetching - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)