Как заставить кэш повторно получить доступ к удаленным данным?

#gem5

Вопрос:

Я пытаюсь заставить кэш последнего уровня ( классическая модель кэша, а не Ruby) повторно получить доступ к некоторым удаленным строкам кэша через некоторое время (когда процессор в настоящее время не запрашивает эти строки кэша), но я заметил, что все запросы данных выполняются из ядра процессора через пакеты. Это все еще достижимо?

Если это возможно реализовать, должен ли я создать новый пакет из кэша последнего уровня и отправить его в основную память? Или, возможно, предварительно выберите удаленные строки кэша после завершения удаления кэша?

Может кто-нибудь дать мне несколько советов по этому поводу? Большое Спасибо!

Ответ №1:

Это звучит как предварительный выбор. Проверьте, делает ли какой-либо из существующих предустановщиков (src/mem/кэш/предварительная выборка/) то, что вы хотите; в противном случае вам придется добавить свой собственный. Я думаю, вам придется сделать последний вариант, так как, IIRC, они не соблюдают выселения.

Вашему начальнику нужно 2 вещи:

  1. Он должен быть проинформирован о том, когда происходит выселение, и соблюдать адрес, по которому было выселено.
  2. Он должен генерировать запросы на предварительную выборку для выселяемых блоков, которые вы хотите.

Для 1 должно быть просто прослушивать зонд обновления данных (элемент кэша ppDataUpdate ), чтобы ваш предустановщик мог наблюдать за выселениями. Выселение происходит, когда DataUpdate содержимое: oldData не пустое, а newData пустое. См FrequentValues . Компрессор для примера того, как прослушивать этот зонд.

Наконец, для 2 ваш новый предварительный просмотр должен переопределить calculatePrefetch() . См Tagged . Предварительный просмотр для простого примера.

Комментарии:

1. Привет, Дэниел, большое тебе спасибо за ответ! Я думаю, что ваши предложения очень разумны. Я попробую.