Есть ли способ имитировать локальность кэша при тестировании? - PullRequest
2 голосов
/ 16 марта 2020

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

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

1 Ответ

2 голосов
/ 16 марта 2020

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

Чтобы "симулировать" локальность: создайте локальность , Вы можете создать связанный список с высокой локальностью, а также связанный список с низкой локальностью:

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

Убедитесь, что количество элементов как минимум на величину больше, чем самый большой кэш .

...