Это одновременно временная или пространственная локальность?

#spatial #computer-architecture #temporal

#пространственная #компьютерная архитектура #временная

Вопрос:

Я хотел спросить о пространственной и временной локальности. Если я нахожусь в цикле, скажем, с переменной цикла i , и я просматриваю массив с именем arr[i] , то, когда я обращаюсь к arr [i], то, по моему мнению, это должна быть как временная, так и пространственная локальность, так как сначала я бы получил доступ i и выяснил, что i есть, а затем перешел к этому индексу. Здесь я делаю две вещи,

  1. Доступ i (временная локальность).
  2. Доступ к адресу arr[i] (пространственная локальность).

Пожалуйста, скажите мне, прав ли я в этой конкретной ситуации.
Заранее спасибо.

Ответ №1:

Временная локальность: происходят ли события за короткий промежуток времени? Если это так, у них есть временная локальность. Если нет, то они этого не делают.

Пространственная локальность: объекты расположены близко друг к другу в пространстве (например, в памяти)? Если да, то они имеют пространственную локальность. Если нет, то они этого не делают.

Обратите внимание, что при использовании этих терминов вам нужно указать, что является локальным для чего; по отдельности они имеют мало смысла.

Элементы arr will (предполагая обычно подразумеваемую реализацию «массива», т. Е. Элементы данных, Размещенные в непрерывном блоке) имеют пространственную локальность по отношению друг к другу. Вы не знаете (по крайней мере, из всего, что указано в вопросе), где i будет расположено относительно arr , поэтому вы не можете сказать, проявляют ли эти объекты пространственную локальность по отношению друг к другу или нет.

Операторы доступа i и arr[i] выполняются один за другим, поэтому они демонстрируют временную локальность, предполагая, что работа, которую вы выполняете над каждым элементом массива, дешевая; при этом предположении ссылки на различные элементы arr последующих итераций также будут демонстрировать временную локальность. Однако, если для каждой итерации цикла вы вызываете какую-либо функцию, которая занимает много времени между доступом i и arr , больше не будет верно, что эти обращения демонстрируют временную локальность.