Как определить, что кеш отсутствует или попал в язык ассемблера? - PullRequest
0 голосов
/ 13 мая 2019

Рассмотрим 16-килобайтный кэш прямого отображения с размером блока 16 байтов (4 слова).Каждая из следующих инструкций ассемблера содержит одну ссылку на память.Каждая ссылка на 4-байтовое слово.Инструкции выполняются в указанном порядке.

movl $0x11F0, 0x0
movl 0x8, %r8
movl $0x22F0, 0x10000
movl 0x0, %r9
movl $0x33F0, 0x10000

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

Я работал над каждой инструкцией и получил следующие ответы о том, пишется она или читается, но я не знаю, как узнать, пропущена ли она илиХит?

  1. магазин (запись)
  2. чтение
  3. хранение
  4. чтение
  5. хранение

Мне полагалось, что 1 промах, 2 промаха, 3 промаха, 4 попадания, 5 попаданий.

Кроме того, после того, как все инструкции были выполнены, каково содержимое кеша, то есть для каждого блока, укажите его действительность, его тег и его содержимое.

1 Ответ

0 голосов
/ 13 мая 2019

Нет нормального способа определить, был ли ваш доступ к памяти достигнут или пропущен по конкретным адресам , если только вам не удастся рассчитать время точно на уровне цикла, используя rdtsc, что - на современных процессорах - больше не считает циклов .

Даже если вам удастся запустить ваш код на процессоре, который будет по-прежнему считать циклы, даже если вам нужно будет убедиться, что ваш процесс не прерывается каким-либо образом или в какой-либо форме, тогда вы бы все же нужно успеть отфильтровать неизбежные отклонения в ваших измерениях. Я не хочу утверждать, что это невозможно, но это определенно огромная боль для исследования и осознания.

Что вы МОЖЕТЕ сделать, так это выяснить, был ли определенный адрес в памяти считан или записан с использованием VirtualProtect ( windows ) или 'mprotect' ( linux * 1016) *) в сочетании с исключениями , хотя это позволяет отслеживать только целые страницы, а не отдельные байты.

Альтернативой использованию исключений является использование GetWriteWatch ( windows , я не знаю эквивалент Linux для этого), но он позволяет только отслеживать записи , а также только предлагает страницу размерная зернистость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...