Computer science 参考位置-等距位置的英文解释

Computer science 参考位置-等距位置的英文解释,computer-science,localityofreference,Computer Science,Localityofreference,我正在阅读维基百科上的一篇文章,我忍不住发现对等距离位置的解释相当隐晦 我真的无法理解它,我想知道是否有人可以尝试用简单的英语来解释它 等距离局部性:介于空间局部性和空间局部性之间 分支位置。考虑在AN中的循环访问位置 等距模式,即时空坐标中的路径 空格是一条虚线。在这种情况下,可以使用简单的线性函数 预测在不久的将来将访问哪个位置 “以等距模式访问位置的循环”是什么意思?位置之间的距离是否相等 “时空坐标空间是一条虚线”的垃圾是什么?那对我来说毫无意义 如果有人能澄清一下等距位置的含义,那就太

我正在阅读维基百科上的一篇文章,我忍不住发现对等距离位置的解释相当隐晦

我真的无法理解它,我想知道是否有人可以尝试用简单的英语来解释它

等距离局部性:介于空间局部性和空间局部性之间 分支位置。考虑在AN中的循环访问位置 等距模式,即时空坐标中的路径 空格是一条虚线。在这种情况下,可以使用简单的线性函数 预测在不久的将来将访问哪个位置

“以等距模式访问位置的循环”是什么意思?位置之间的距离是否相等

“时空坐标空间是一条虚线”的垃圾是什么?那对我来说毫无意义

如果有人能澄清一下等距位置的含义,那就太好了

以等距模式访问位置的循环

这很神秘,但如果我不得不猜测,这意味着循环的所有迭代都具有相同级别的空间/时间局部性:如果循环只是在数组中迭代,那么在每次迭代中,我们访问位于前一个元素旁边的元素(因此空间局部性与上一次迭代中相同),它和上一次迭代一样是“最近的”(所以时间局部性也保持不变)


因此,等距局部性对于每次迭代都是相同的。

我认为最好用例子来解释这一点。这些局部性原则经常被用来优化事物。现代CPU中的一个可能组件是内存预取器,它将尝试猜测您将使用的内存,并在需要时将其放入缓存。这在很大程度上取决于地方性原则

以数组为例,如果执行以下操作(c++示例):

在链表中,元素相互引用,单个元素可以位于内存中的任何位置,因此您将失去空间位置。但是,您可以访问循环中的元素,因此仍然具有时空性。像这样的东西很难检测和优化预取(但并非不可能)

最后,作为时空组合重要性的一个指示器,考虑这个(小的设计)例子:

#包括
#包括
#包括
#包括
#包括
int main()
{
std::向量测试={1,2,3,4,5};
向量指数={0,1,2,3,4};
std::随机_装置rd;
std::shuffle(std::begin(索引)、std::end(索引)、std::mt19937{rd()});
for(无符号整数和整数:索引)
{

std::这是我最好的猜测:有人在撒尿。如果(找到答案)编辑(维基页面);否则编辑(维基页面);我确实找到了这个:
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> test = { 1, 2, 3, 4, 5};
    for(int& i: test)
    {
        std::cout << i << std::endl;
    }
}
#include <iostream>
#include <list>

int main()
{
    std::list<int> test = { 1, 2, 3, 4, 5};
    for(int& i: test)
    {
        std::cout << i << std::endl;
    }
}
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <iterator>

int main()
{
    std::vector<int> test = { 1, 2, 3, 4, 5 };
    std::vector<unsigned int> indices = { 0, 1, 2, 3, 4 };
    std::random_device rd;
    std::shuffle(std::begin(indices), std::end(indices), std::mt19937 { rd() });
    for (unsigned int& i : indices)
    {
        std::cout << test[i] << std::endl;
    }
}