#gem5
Вопрос:
Я пытаюсь заставить кэш последнего уровня ( классическая модель кэша, а не Ruby) повторно получить доступ к некоторым удаленным строкам кэша через некоторое время (когда процессор в настоящее время не запрашивает эти строки кэша), но я заметил, что все запросы данных выполняются из ядра процессора через пакеты. Это все еще достижимо?
Если это возможно реализовать, должен ли я создать новый пакет из кэша последнего уровня и отправить его в основную память? Или, возможно, предварительно выберите удаленные строки кэша после завершения удаления кэша?
Может кто-нибудь дать мне несколько советов по этому поводу? Большое Спасибо!
Ответ №1:
Это звучит как предварительный выбор. Проверьте, делает ли какой-либо из существующих предустановщиков (src/mem/кэш/предварительная выборка/) то, что вы хотите; в противном случае вам придется добавить свой собственный. Я думаю, вам придется сделать последний вариант, так как, IIRC, они не соблюдают выселения.
Вашему начальнику нужно 2 вещи:
- Он должен быть проинформирован о том, когда происходит выселение, и соблюдать адрес, по которому было выселено.
- Он должен генерировать запросы на предварительную выборку для выселяемых блоков, которые вы хотите.
Для 1 должно быть просто прослушивать зонд обновления данных (элемент кэша ppDataUpdate
), чтобы ваш предустановщик мог наблюдать за выселениями. Выселение происходит, когда DataUpdate
содержимое: oldData
не пустое, а newData
пустое. См FrequentValues
. Компрессор для примера того, как прослушивать этот зонд.
Наконец, для 2 ваш новый предварительный просмотр должен переопределить calculatePrefetch()
. См Tagged
. Предварительный просмотр для простого примера.
Комментарии:
1. Привет, Дэниел, большое тебе спасибо за ответ! Я думаю, что ваши предложения очень разумны. Я попробую.