• 读书笔记——C++高性能编程(一至三)


    《C++高性能编程》作者:费多尔.G.皮克斯 版本:2022年11月第1版

    第一章.性能基础

    描述了吞吐量,功耗,实时应用性能的含义。

    阐述了“虽然几乎不可能提前预测最佳优化,但是可以确定某些设计决策将使后续优化变得非常困难甚至不可行”这样一个观点。这个观点就是说要在设计决策的时候将优化考虑在内。 

    第二章.性能测试

    “性能的第一条规则是'永远不要猜测性能'”。介绍了两个性能分析器:perf,gperftools(https://github.com/gperftools/gperftools);以及一个微基准测试工具:google-benchmark(https://github.com/google/benchmark)。

    以下是使用gperftools进行微基准测试的一个样例。其中编译example可执行程序的时候要增加链接库-lprofiler才能使用pprof,编译完成后要使用CPUPROFILER环境变量制定生成的文件名。下面是一个例子:

    d3800677511d413c8d20657b3c890dce.png

    可以看到统计出的结果就是所有的时间都用在了compare2这个函数上面了。

    以下是使用perf命令的样例:

    b8c9a92b4ec44a728e6567c841ed92b4.png

    打印中提及了缓存命中,缓存未命中,分支命中以及分支未命中的情况。

    以下是使用google-benchmark的情况:

    fcc8f347e7fc4dbc9e88fc1de97e0c12.png

    从这章中我们了解到,不同的整形的计算速度也是不一样的。unsigned int的计算速度要比int类型要慢。

    缓存命中率和分支预判对性能的影响也比较大。因为缓存如果没命中则需要从主存中读取数据,而读取数据的时间是非常长的。

    第三章.CPU架构,资源和性能

    该章节讨论了指令级并行(ILP),数据依赖和流水线。然后介绍了怎么进行分支优化,分支优化即——无分支化。

    如果分支的条件随即性比较强,则程序的运行效果会比较差,因为会存在“流水线冲刷”这样的操作,因为流水线会在依赖条件计算出来之前预先进行计算 ,但是如果计算结果和分支不匹配,就会发生流水线冲刷的事件。

    无分支化使用的方法就是以值计算和索引替代分支判断。但是无分支化也并非一定比分支判断要快,因为无分支化需要执行更多的指令。个人理解:无分支化在判断条件后执行的语句较长就可以进行无分支化,因为较长的流水线完全可以中和分支索引计算的开销。

     

  • 相关阅读:
    必做实验6 输入输出应用
    vue项目关闭eslint
    音频转文字怎么操作?快来看看这几个方法吧
    Easy-laser激光测平仪维修TME910常见故障及注意事项
    零基础如何自学网络安全,基于就业前景全方位讲解,包教包会
    python open file way
    openGauss每日一练第1天 | openGauss数据库状态查看
    【SA8295P 源码分析 (四)】26 - QNX Ethernet MAC 驱动 之 emac_rx_thread_handler 数据接收线程 源码分析
    MQTT Qt 客户端开发记录
    Harbor 安装部署
  • 原文地址:https://blog.csdn.net/Dr_Jack/article/details/133674348