Как язык ассемблера может заставить компьютер с определенной структурой кэша работать быстрее? - PullRequest
2 голосов
/ 05 апреля 2019

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

Два дизайна кэша выглядят следующим образом:

Кэш-память A: 128 наборов, 2-сторонний набор ассоциативных, 32-байтовые блоки, сквозная запись,и не писать-выделять.Кэш-память B: 256 наборов, блоки с прямым отображением, 32-байтовые блоки, обратная запись и запись-распределение.

Вопрос в следующем:

Опишите небольшой фрагмент программы на языке ассемблера, достаточно двух инструкций, благодаря которым компьютер A (использующий дизайн кэша A) работает намного быстреенасколько это возможно, чем Компьютер B (использует дизайн Cache B.).

И есть другой вопрос, задающий обратное:

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

1 Ответ

1 голос
/ 05 апреля 2019

Чтобы быть медленным с кешем с прямым отображением, но быстрым с ассоциативным кешем, ваша лучшая ставка, вероятно, 2 загрузки 1 .

Создать конфликт-отсутствует из-за псевдонимов кэша на этой машине, но не на другой.то есть 2 загрузки, которые не могут попадать в кэш спина к спине, потому что они индексируют один и тот же набор.

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


Сноска 1:Или, может быть, хранилища, но при более низкой загрузке очевидно, что нужно остановить процессор, потому что они не могут быть скрыты буфером хранилища.Только путем табло, чтобы не останавливаться до тех пор, пока результаты загрузки не будут использованы на самом деле


Чтобы заставить кэш сквозной записи / без записи выделять медленную работу , возможно, сохраните и затем загрузитесоседний адрес или адрес, который вы только что сохранили.На кэш с обратной записью / записью-выделением нагрузка будет достигнута.(Но только после ожидания пропуска магазина, чтобы перенести данные в кеш.)

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

И последующие запуски того же фрагмента получат попадания в кеш, потому что загрузка будет выделять строку в кеше.

Если ваша машина имеет CISC с режимами постинкрементной адресации, вы можете сделать больше всего с помощью 2инструкции, если вы представляете их как тело цикла.Неясно, какие предварительные условия вы должны / разрешаете принять для кеша.

Всего 2 магазина на одну строку или даже на один и тот же адрес могут продемонстрировать стоимость сквозной записи: с write-back + write-allocate, вы получите хит во втором магазине.

...