优化代码CPU层面

今天在看《支撑处理器的技术》,其中,讲到了CPU流水线。在指令之间,如果下一条指令,需要用到上一条指令的结果,会影响到流水线的执行。书上给出了几种解决方案,一个是在指令中间插入一下无关的指令。这个可以用指令乱序实现,这里可以看出,指令乱序是确实可以提高指令运行效率。还有就是可以通过软件进行优化,代码。给出了一个例子,求数组和的例子。下面是demo

        int c = 0;
        for(int i = 0; i < N; i++){
            c = c + a[i];
        }

这里可以看出,第一次指令c = c + a[i],这里第二个c是上一次执行的结果,有依赖。会影响到指令流水执行。这里进行了一下改造

        int c1, c2, c3, c4, c5, c6;
        for(int i = 0; i < N; i = i + 6){
            c1 = c1 + a[i];
            c2 = c2 + a[i + 1];
            //...
            c6 = c6 + a[i + 5];
        }
        c = c1 + c2 + c3 + c4 + c5 + c6;

这样c2不依赖c1,后面以此类推,都不会造成依赖,对指令流水线不会造成影响。

原文地址:https://www.cnblogs.com/luckygxf/p/7087662.html