c中的stride是什么

Sha*_*m09 3 c struct stride

C 语言中的“stride”是什么以及如何使用它?

Eri*_*hil 9

一般来说,步幅是指穿过某物的距离。

\n

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

\n
for (long i = 0; i < COLS; i++)\n        for (long j = 0; j < ROWS; j++) {\n            sum += table[j][i];\n        }\n
Run Code Online (Sandbox Code Playgroud)\n

在第一次迭代中j等于的最内层循环的连续迭代中,一次迭代访问,下一次迭代访问。这两个访问之间的距离是 1 的大小,即(2000) 个元素xtable[x][i]table[x+1][i]table[j]COLSshort(可能是两个字节),因此可能是 4000 个字节。所以步长是 4000 字节。

\n

这通常对典型处理器上的高速缓存不利,因为高速缓存主要是为彼此接近的内存访问(小步长)而设计的。这就是程序\xe2\x80\x99s性能缓慢的原因。

\n

由于循环 中的操作与所有和sum += table[j][i];的执行顺序无关,因此我们可以通过交换两个语句来轻松解决此问题:ijfor

\n
    for (long j = 0; j < ROWS; j++)\n        for (long i = 0; i < COLS; i++)\n            sum += table[j][i];\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

在我的系统上,经过此更改,程序的运行速度提高了大约二十倍。

\n