代码优化之循环展开

数组的循环与分割, 利用了计算机系统的两个特点:

    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;

}


这是由于合理的利用了高速缓存的原理。

你可能感兴趣的:(代码优化之循环展开)