Как можно победить тайники?

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

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

Примечание. Это домашнее задание. Не отвечайте только на вопрос за меня, это не поможет мне понять материал.


person John    schedule 10.07.2011    source источник
comment
Пожалуйста, просто отметьте это как домашнее задание в следующий раз.   -  person the_drow    schedule 10.07.2011
comment
Спасибо за правильную идентификацию как домашнюю работу :) повторно помечен для вас   -  person Jesus Ramos    schedule 10.07.2011
comment
Вы получаете голосование не только за то, что принимаете домашнюю работу, но и за то, что четко заявляете, что хотите понять материал.   -  person Moo-Juice    schedule 10.07.2011


Ответы (3)


Кэш нужен для увеличения производительности. Таким образом, победить кеш означает найти шаблон доступа к памяти, который снижает производительность (при наличии кеша), а не увеличивает ее.

Имейте в виду, что кеш ограничен по размеру (например, меньше, чем основная память), поэтому обычно для победы над кешем требуется его заполнение, так что он отбрасывает данные, к которым вы собираетесь получить доступ, непосредственно перед тем, как вы получите к ним доступ.

person Paul Butcher    schedule 10.07.2011
comment
Итак, я прав, думая, что лучший способ показать это - просто создать цикл, который по крайней мере на одну строку кэша больше, чем размер кэша, или комбинацию цикла и чтения/сохранения данных, которые бы должны быть разделены на две строки кэша? - person John; 12.07.2011
comment
Вы правильно мыслите, да. Хотя имейте в виду, что вы пытаетесь найти шаблон, который менее эффективен с кешем, чем без него. В зависимости от точных деталей кеша, простое последовательное чтение большого количества данных, вероятно, не победит его (вы можете не получить от этого большой пользы, но и не повредите). Хитрость заключается в том, чтобы найти паттерн, при котором стоимость кэша превышает выгоду, которую он вам дает. - person Paul Butcher; 12.07.2011

Если вы ищете подсказку, подумайте о разделении слова данных на 2 строки кэша.

(Если вы также ищете ответ, с аналогичной проблемой столкнулись разработчики x264 — дополнительная информация доступна здесь и здесь. Ссылки очень информативны, и я настоятельно рекомендую вам прочитать их даже после того, как вы нашли свой ответ.)

person susmits    schedule 10.07.2011

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

person FrankH.    schedule 11.07.2011