数组的循环与分割, 利用了计算机系统的两个特点:
1. 有多块高速缓存;
2. Cpu是可以多指令并行执行(要求多条指令之间 没有数据相关性)。
在我们的例子中:
数组切分: 将1个数组切分为2个数组。 这样就能用2块高速缓存来存数据, 高速缓存的访问速度是内存的 10倍以上
循环展开: 我们将的步进设置为4,每次处理的数据之间 没有任何关系,这样就能并行执行起来。
数据无关性: 就是下一次计算指令不受之前执行指令的结果影响。在我们的例子里面,将对 i 的操作 提到前面, 这样后面的赋值操作和i没有关系,我们再赋值的时候同时可以进行下一次循环了。
例子1:
for(int i = 0; i < 10; ++i)
a[i] = 0;;
例子2:
for(int i = 0; i 《 5; ++)
{
a[i] = 0;
a[i+1] = 0;
}
这是由于合理的利用了高速缓存的原理。