zoukankan      html  css  js  c++  java
  • 关注性能:循环的耗时及编译优化的影响

    追查一个项目模块的性能问题(处理时间增加),最终追查到是由于在一个循环中增加了一条读语句。

    终于对积少成多对性能的影响有了一次亲身体会。

    另一个体会就是追查问题时一定要考虑编译器优化的影响。

    对MAX_SIZE= 1000000测试:

    场景1:

    简单的一个语句

     for(size_t i=0; i < MAX_SIZE; ++i){}
    

    需要执行2.768ms, 加上-O3优化后执行0.79ms;

    场景2:

    循环内增加一个操作,(不要是sum+=i; 之类的,因为i已经存到寄存器,所以此部分不会增加多少计算时间)

    for(size_t i=0; i < MAX_SIZE; ++i)
    {
             sum += intVec[i];
    }

    需要执行24.971ms, 加上-O3优化后0.825ms;

    可以发现比场景1增加了不少时间,但-O3优化后差别不大,这是因为访问一次intVec[i]时,临近的内存值也会放到寄存器,所以访问intVec[i]的时间会减少很多。

    场景3:

    在场景2基础上随机访问intVec

    sum += intVec[rand(0, MAX_SIZE)];

    for(size_t i=0; i < MAX_SIZE; ++i)
    {
              sum += intVec[rand(0, MAX_SIZE)]; //rand(0,n)是取[0,n)之间的随机数
    }

    需要执行36.010ms(已经去掉了计算rand所用时间),加上-O3优化后,8.85ms

    可见:

    不经过优化时:2.768ms --》 24.971ms --》36.010ms

    经过-O3优化后:0.79ms --》0.825ms  --》8.85ms

    计算越复杂的时候,性能优化的效果越明显。

    追性能问题,最后不编译优化的情况下追查,因为你可能不清楚编译器为你优化了

    后续要补一补基础的编译常识了。

    转载请注明出处: http://www.cnblogs.com/liyuxia713/
  • 相关阅读:
    [51nod 1135] 原根
    [CF1303F] Number of Components
    [CF1303E] Erase Subsequences
    [CF1303D] Fill The Bag
    子域名收集的一些姿势
    使用phpstorm+wamp实现php代码实时调试审计
    XSS小游戏通关Writeup
    Exif xss
    xss的一个tip
    应急响应
  • 原文地址:https://www.cnblogs.com/liyuxia713/p/2660617.html
Copyright © 2011-2022 走看看