Кодировка кеша значений - Википедия - Value cache encoding
Эта статья написано как личное размышление, личное эссе или аргументированное эссе который излагает личные чувства редактора Википедии или представляет оригинальный аргумент по теме.Апрель 2015 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Потребляемая мощность становится все более важным для обоих встроенный, Мобильные вычисления и высокопроизводительные системы.[1] Вне чипа шина данных потребляет значительную часть мощности системы. Замечено, что внешняя шина данных потребляет от 9,8% до 23,2% от общей мощности, потребляемой система в зависимости от системы. Итак, уменьшая мощность потребление внешней шины данных снизило бы общее энергопотребление.
Вступление
[2] Внешние шины связаны с более высокими емкость значения емкости внутренних узлов и, следовательно, методы минимизации коммутации на внешних шинах адреса и данных, даже за счет небольшого увеличения коммутации на внутренних емкостях, весьма полезны. Энергопотребление вне кристалла можно снизить, по крайней мере, этими двумя способами: за счет уменьшения количества линий шины, активируемых во время Передача данных и за счет уменьшения количества битовых переходов на активных линиях шины. Сочетание обоих этих методов дает оптимальный результат.
Кодирование кэша значений - это схема, которая используется для снижения энергопотребления на шине данных вне кристалла. В этой схеме кэш-память на обеих сторонах шины данных используется для уменьшения динамического рассеивания мощности на шинах данных вне кристалла. Эти кеши поддерживаются таким образом, что их содержимое всегда одинаково.
Детали схемы
В этом протоколе мы используем небольшой тайник (называемый кешем значений, или сокращенно VC) на каждой стороне шины данных вне кристалла. Эти кеши значений отслеживают значения данных, которые недавно были переданы по шине. Записи в этих кэшах построены таким образом, что содержимое обоих кешей значений всегда одинаково. Когда значение данных необходимо передать по шине, мы сначала проверяем, находится ли оно в кэше значений отправитель (будь то память или кеш). Если это так, мы передаем только индекс данных (то есть его адрес кеша значений или индекс) вместо фактического значения данных, и другая сторона (получатель) может определить значение данных, используя этот индекс и его кэш значений. .
Для передачи данных в кэше значений с использованием только 1-битного переключения, размер кэша значений ограничен шириной шины данных. То есть с 32-битной шиной VC может иметь только 32 записи. Поскольку кеши значений, используемые нашим протоколом питания, очень малы, ширина значения индекса намного меньше ширины фактического значения данных. Следовательно, для передачи необходимо активировать меньше линий внешней шины.
Наш подход пытается реализовать первый вариант, используя локальность значений данных, передаваемых по внешней шине данных. Однако, как только ширина данных (которые должны быть переданы) была уменьшена, мы также можем ожидать снижения (в целом) средней активности переключения битов за передачу. Кроме того, эту коммутационную активность можно еще больше снизить, используя хорошо известные схемы кодирования шины в сочетании с нашей стратегией.
Согласованность кеша
На стороне получателя выполняется та же политика размещения и замены для VC, что и на стороне отправителя. Таким образом, значение данных, отправленных по шине, копируется в VC получателя в том же месте индекса, что и в VC отправителя. Мы используем один дополнительный бит управления, чтобы указать, являются ли данные, передаваемые по шине, дословными данными или индексом для VC. Операция записи в память обрабатывается аналогичным образом.
Пример
Мы предполагаем, что изначально значения 100 и 200 отсутствуют в VC. Во время транзакции №1 A отправляется из памяти в кэш. Запрошенный элемент данных, хранящийся по некоторому адресу (например, адресу X памяти), имеет значение 100. Контроллер памяти ищет в VC значение 100 и обнаруживает промах. Следовательно, значение 100 отправляется по внешней шине данных. Кроме того, согласно нашему протоколу питания, значение 100 сохраняется в одном и том же месте (скажем, 5) VC как источника, так и пункта назначения. Для транзакции № 2 контроллер памяти выполняет поиск значения 200, не может найти значение в VC и повторяет шаги, описанные выше. На этом этапе кеши значений на обоих концах содержат значения данных 100 и 200. В транзакции № 3 контроллер памяти обнаруживает, что значение 100 должно быть отправлено для обслуживания запроса чтения (той же ячейки памяти, что и раньше, или другое место в памяти с тем же значением). Но обратите внимание, что значение 100 уже присутствует в VC отправителя в местоположении 5 в результате транзакции №1. Следовательно, вместо того, чтобы посылать значение 100, контроллер памяти просто отправляет значение индекса 5. С другой стороны, получатель извлекает значение фактических данных (в данном случае 100) из ячейки 5 своего виртуального канала. Наконец, в транзакции №4 мы хотим отправить элемент данных D, имеющий значение 200, в память (т.е. запрос на запись). Но значение 200 уже кэшировано в обоих виртуальных каналах в результате транзакции №2 из памяти в кэш. Следовательно, индекс кэшированной копии (присутствующей в VC) значения 200 используется для завершения транзакции №4, но в обратном направлении. Эта последняя транзакция показывает, что данные, помещенные в VC во время транзакции в одном направлении, могут быть повторно использованы (из VC) во время транзакции в обратном направлении.
Политика замены
[3]LRU используется как политика замены в обоих кэшах. Это осуществляется с использованием опорного бита и н-бит отметка времени для каждого значения, хранящегося в кеше. Когда значение появляется на входе, устанавливается бит ссылки. Через равные промежутки времени опорный бит сдвигается прямо в позицию старшего разряда n-битовой временной метки, в результате чего все биты временной метки также сдвигаются вправо, а бит младшего разряда в временной метке отбрасывается. Например, временная метка 000 означает, что это значение не появлялось в течение последних трех временных интервалов, временная метка 100 означает, что оно было только что замечено в последнем интервале, а временная метка 000 с установленным контрольным битом означает, что оно встречается в текущем временном интервале.
Вышеупомянутая операция выполняется для всех записей обоих кешей со сбросом всех справочных битов. Таким образом, временная метка хранит историю появления значений за последние n периодов времени.
Когда требуется запись, а значение должно быть исключено, выбирается запись с наименьшей меткой времени и очищенным справочным битом. Новое значение помещается со свежим справочным битом и меткой времени (все 0) в эту выбранную запись.
Тип кэша значений
После описания протокола мы увидим два подхода к поддержке кеша:
- Оба кэша могут быть инициализированы с использованием фиксированного набора значений в зависимости от частоты появления значений в предыдущем запуске.
- Изменяющийся набор частых значений может поддерживаться во время работы программы. Таким образом, содержимое таблиц частых значений адаптируется к изменениям частых значений для различных частей выполнения.
Преимущество заполнения кеша фиксированным значением заключается в том, что кодировщикам не нужно динамически изменять содержимое таблицы, что снижает накладные расходы времени выполнения. Однако это требует, чтобы значения были известны заранее, а для разных программ требуются разные значения. Второй метод, с другой стороны, не требует априорной информации о значениях данных и не делает различий между разными программами. Благодаря этим функциям мы платим цену
определение частых значений на лету.
Другое приложение
Обсуждаемый нами протокол был применен к шине, один конец которой - кэш на кристалле, а другой конец - вне кристалла. объем памяти, можно адаптировать нашу стратегию для работы с кешем второго уровня вне кристалла. Кроме того, протокол питания также может использоваться для уменьшения активности переключения между кешем L1 на кристалле и кешем L2 на кристалле (хотя результаты не будут такими хорошими, как с шиной вне кристалла). Фактически, нашу стратегию можно использовать между любыми двумя общение устройства в системе (с поддержкой ВК). Кроме того, мы не ограничены конфигурациями точка-точка. То есть наш подход может работать в среде, где несколько устройств обмениваются данными по общей (энергоемкой) шине данных.
Очевидно, что в этом случае, помимо прочего, нам понадобится механизм согласованности (обсуждение которого выходит за рамки данной статьи). Недостатком нашей стратегии является дополнительное пространство, необходимое для двух кешей значений (одного на кристалле, а другого вне кристалла). В этой статье мы не представляем подробное исследование последствий нашего подхода для схемотехнического пространства. Как будет представлено в разделе экспериментальных результатов, даже небольшой VC (128 записей) генерирует достаточно хорошие энергетические характеристики; Итак, мы можем ожидать, что накладные расходы на пространство из-за наших оптимизация не будет лишним.
Смотрите также
Рекомендации
- ^ Протокол питания: снижение рассеиваемой мощности на внешних шинах данных http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1176262
- ^ Динеш С. Суреш; Банит Агравал; Джун Ян; Валид Наджар (28 июня 2005 г.). "Настраиваемый шинный кодер для внешних шин данных" (PDF). Получено 2015-04-22.
- ^ Джун Ян; Гупта, Р. (2001). «Кодирование FV для ввода-вывода данных с низким энергопотреблением». ISLPED'01: Материалы Международного симпозиума 2001 г. по маломощной электронике и дизайну (IEEE Cat. No. 01TH8581). ieeexplore.ieee.org. С. 84–87. Дои:10.1109 / LPE.2001.945379. ISBN 1-58113-371-5.