Из здесь:
Инструкции и данные имеют разные шаблоны доступа и доступ разные области памяти. Таким образом, имея тот же кеш для обоих инструкции и данные могут не всегда работать.
Таким образом, довольно типично иметь два кэша: кеш инструкций, который только хранит инструкции и кеш данных, которые хранят только данные.
Интуитивно знать различие между инструкциями и данными, но теперь я не уверен в различии в этом контексте? Что представляет собой данные и попадает в кеш данных, а что составляет как инструкции и попадает в кеш инструкций?
Я знаю сборку ARM. Будет ли что-нибудь, требующее STR
, LDR
, LDMF
или STMFD
использовать кеш данных? Но технически говоря STR
, LDR
, LDMF
и STMFD
- все инструкции, поэтому я вот почему я смущен. Должны ли "данные" всегда существовать с "инструкцией"? Рассматриваются ли данные в разделе .data
?
Например LDR R1, =myVar
, тогда LDR перейдет в кэш команд, а содержимое myVar войдет в кеш данных? Или это не работает?
Инструкции и данные имеют разные шаблоны доступа Может кто-нибудь прокомментировать?
Этот комментарий, который я сделал на полезном сообщении, подчеркивает мое понимание проблемы:
"Идея состоит в том, что если инструкция загружена из памяти, это скорее всего, будет снова использован в ближайшее время", но единственный способ узнать следующий инструкция должна прочитать его. Это означает, что память читается (вы не можете сказать это уже в кеше, потому что новая инструкция красная). Так что я все еще не вижу смысла? Скажем, инструкция LDR только что произошла, так что теперь LDR находится в кеше данных. Может быть, другая инструкция LDR произойдет, возможно, этого не произойдет, мы не можем быть уверены, поэтому нам нужно действительно прочитать следующий инструкция - таким образом, побеждая цель кеша.