Все вхождения временной и пространственной привязки в данном фрагменте кода

Я читал о пространственный а также временной населенные пункты.

В двух словах.

Временная местность:
Программы часто обращаются к одним и тем же ячейкам памяти неоднократно.

Пространственная местность:
Программы также часто обращаются к смежным областям памяти неоднократно.

Теперь я пытаюсь проанализировать следующий код, чтобы найти все случаи временной и пространственной привязки.

for (int i = 0, j = 10; i < 100; i++)
a[i] = j++;

Я понял только следующие.

пространственная

  • a[i] = j++; После ссылки a[i] мы собираемся ссылаться a[i+1],
  • Инструкции, чтобы сделать все это хранятся рядом друг с другом в памяти.

височный

  • i по сравнению с 100.
  • i увеличивается на единицу: i++,
  • Назначение a[i] = j++ использования i как индекс массива.
  • База массива a используется для индексации каждого a[i],
  • j увеличивается на единицу в назначении a[i] = j++,

Так я прав во всех этих и я пропустил что-то еще?

0

Решение

Определения наоборот.

Пространственная локация — локация в пространстве, доступ к близлежащим ячейкам памяти.

Временная локализация — локация во времени, доступ к одной и той же локации несколько раз.

Использование пространственной локальности при проектировании кэшей таково, что когда ваша программа нуждается a[i], кеш просто не извлекается a[i] из памяти. Получает несколько записей a[i], a[i+1], a[i+2] ... столько, сколько размер кешлайна. Таким образом, кеш ожидает, что вы, вероятно, получите доступ a[i+1] скоро. И когда вы делаете это, кешу не нужно извлекать его из памяти, он уже существует благодаря использованию пространственной локальности.

Временная местность приходит, когда вы получаете доступ i а также j, Каждый раз, когда вам нужно i а также jнет необходимости извлекать его из памяти, так как он кешируется. Кешируя, i а также j, кеш думал, что вы получите доступ к нему снова, поэтому экономит время, чтобы извлечь его из памяти.

И чтобы ответить точно, да, вы определили места для пространственной и временной местности. Единственное, что не правильно, это ваше утверждение «Инструкции, чтобы сделать все это хранятся рядом друг с другом в памятиMsgstr «Там не будет отдельной инструкции для доступа a[i], a[i+1], Это будет одна инструкция, используемая внутри цикла, с использованием адреса памяти, вычисляемого каждый раз. Как я объяснил выше, преимущество заключается в том, что кешу не нужно извлекать данные для следующей итерации, поскольку он, вероятно, извлекается как часть ранней итерации в цикле.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]