c中的步幅是什么

What is stride in c

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

这个问题找到答案。谢谢@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] 的大小,即 shortCOLS (2000) 个元素(可能是两个字节),因此可能是 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],它们的步幅为一个 short,可能是两个字节。

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