gpt4 book ai didi

c++ - 内存访问比较

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:07 25 4
gpt4 key购买 nike

两者中哪一个更快(C++)?

for(i=0; i<n; i++)
{
sum_a = sum_a + a[i];
sum_b = sum_b + b[i];
}

或者

for(i=0; i<n; i++)
{
sum_a = sum_a + a[i];
}
for(i=0; i<n; i++)
{
sum_b = sum_b + b[i];
}

我是初学者,所以我不知道这是否有意义,但在第一个版本中,访问数组 'a',然后访问 'b',这可能会导致许多内存切换,因为数组 'a' 和'b' 位于不同的内存位置。但在第二个版本中,首先访问整个数组“a”,然后访问整个数组“b”,这意味着访问连续的内存位置而不是在两个数组之间交替。

这对两个版本的执行时间有什么影响吗(即使是一个非常微不足道的差异)?

最佳答案

我认为这个问题没有正确答案。一般来说,第二个版本的迭代次数(CPU 执行开销)多一倍,但对内存的访问(内存访问开销)更差。现在假设您在时钟较慢但缓存非常好的 PC 上运行此代码。内存开销减少了,但由于时钟很慢,所以运行相同的循环两次会使执行时间更长。换句话说:时钟快,但内存不好 - 运行两个循环不是问题,因此最好针对内存访问进行优化。

这是关于如何分析您的应用程序的很酷的示例:Link

关于c++ - 内存访问比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38327947/

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