gpt4 book ai didi

c - c中的步幅是什么

转载 作者:行者123 更新时间:2023-12-02 15:51:20 26 4
gpt4 key购买 nike

我是 C 的新手,在我学习 Python 之前,这就是为什么我不知道步幅是什么以及如何在代码中使用它们。

这个问题找到答案。谢谢@Eric Postpischil

最佳答案

通常,步幅是步数通过某物的距离。

addition例程中,我们有这些循环:

for (long i = 0; i < COLS; i++)
for (long j = 0; j < ROWS; j++) {
sum += table[j][i];
}

在第一个迭代中 j 等于 x 的最内层循环的连续迭代中,一次迭代访问 table[x][i],接下来访问 table[x+1][i]。这两次访问之间的距离是一个table[j]的大小,也就是COLS (2000)个short元素(可能是两个字节), 很可能是 4000 字节。所以步幅为 4000 字节。

这通常对典型处理器上的缓存内存不利,因为缓存内存主要设计用于彼此靠近(小步幅)的内存访问。这是程序运行缓慢的原因。

由于循环中的操作 sum += table[j][i]; 独立于它对所有 ij,我们可以通过交换两个 for 语句轻松解决这个问题:

    for (long j = 0; j < ROWS; j++)
for (long i = 0; i < COLS; i++)
sum += table[j][i];

然后最内层循环的连续迭代将访问 table[j][x]table[j][x+1],它们的步幅为 1 ,可能是两个字节。

在我的系统上,此更改使程序运行速度提高了约 20 倍。

关于c - c中的步幅是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72466821/

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