大循環與小循環嵌套的性能比較(分支預測)


面試被問到一個很有意思的問題:大循環和小循環,哪個在外哪個在里有區別嗎?為什么?哪種更快?
當時確實沒有答上來也沒想到,明明之前看CSAPP了解過CPU的指令分支預測的,但是實在沒有想到這里去。
先上個圖:
網圖

再來個解釋的比較清楚的博客:
https://segmentfault.com/a/1190000006889989
簡而言之,就是當進行循環時,因為判斷循環條件也是屬於分支預測,所以大循環在內時,分支預測連續成功的次數會更高,會進行更少的指令回退,CPU執行的會更快。

后面實際測試了一下,下述代碼:

 long k=0;
        final long currentTimeMillis = System.currentTimeMillis();
        for (int j = 0; j < 1000000000; j++) {
            for (int i = 0; i < 100; i++) {
                k++;
            }
        }
        System.out.println(System.currentTimeMillis()-currentTimeMillis);

當大循環在內時,平均執行時間:

avg(2255 2291  2395 2237 2318)=2299.2

當大循環在外時,平均執行時間:

avg(4683 4651 4708 4810 4856)=4741.6

確實慢了1倍多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM