gpt4 book ai didi

c++ - 指针和缓存利用率

转载 作者:行者123 更新时间:2023-11-30 17:33:56 26 4
gpt4 key购买 nike

我刚刚开始使用处理器,无法理解以下内容。

假设我们有一个数组声明为

static double x[1000][3]

我们在函数中访问

double up (double *a, int i)
{
double t=*(a+i*3);
return t;
}

int main(int argc, char *argv[])
{
static double x[1000][3];
//some manipulations//
double b;
for (int i=0;i<10;i++)
{
b=up(&x[0][0],i);
}
}

在这种情况下,什么被加载到高速缓冲存储器中——指针指向的实际值还是仅地址?如果地址 - 是否意味着将有另一个周期来加载实际值?就这个循环而言,这对缓存利用率有好处吗?

最佳答案

确切的答案是特定于平台的,但一般来说,三个因素会导致外部内存中的数据加载到处理器缓存中。

最明显的是一条以普通方式访问内存的实际指令。如果该内存地址未驻留在处理器高速缓存中,则处理器将必须获取它。第二种方法是推测性预取。如果某些处理器认为代码可能会访问内存,则会将内存获取到缓存中。最后,编译器实际上可以发出指令将内容放入缓存中。

所有操作都针对指针,因此它们将加载所有操作,除了这个:double t=*(a+i*3);。这实际上取消了对指针的引用并访问其值。因此,除非编译器足够聪明,能够优化访问(因为您从不使用结果),否则这可能是代码中唯一会导致从主内存读入缓存的指针以外的内容的部分。 (假设它曾经到达主内存,这取决于您的缓存大小。)

关于c++ - 指针和缓存利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23585307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com