CPU性能优化-基于源代码的CPU调优

发布于:2024-12-21 ⋅ 阅读:(13) ⋅ 点赞:(0)

在第二部分我们讨论如何使用CPU监控特性寻找CPU运行代码中可被调优位置对于性能敏感应用程序大型分布式云服务科学性能计算软件3A 游戏了解底层硬件工作原理非常重要程序开发对没有关注硬件那么从一开始就注定失败

标准算法数据结构性能敏感负载并不总能表现很好传统链表每个节点都是动态分配除了很多耗时内存分配动作很可能链表所有元素分散内存遍历数据结构需要每个元素进行随机内存访问即使算法复杂度仍然O(N), 但是实际🎨耗时简单数组还要多有些数据结构比如二叉树有着天然类似链表结构表示所以使用指针追踪方式实现他们可能性能更好不过这些数据结构还有高效扁平化版本比如boost::flat_mapboost::flat_set

即使选择算法解决特定问题最有名但是特定场景不一定表现最优例如二分搜索排序数组查找元素方面最优然而算法经常会有很多分支预测错误问题因为每次元素检查只有50%概率为真就是为何线性搜索通常小型整型数组表现更好

性能工程一门艺术其他艺术类似可能场景范围没有边界。本章尝试专注CPu微架构相关优化而不是覆盖所有你能想到优化机会尽管如此我想还是必要列出一些上层优化点

1 如果程序使用解释语言开发那么可以使用开销更低语言重写程序性能关键部分

2 分析程序使用的算法数据结构看看是否可以找到更好

3 调优编译器参数检查是否至少使用这三个编译器标签-O3 -march 启用针对待定CPU系列优化功能-flto 启用过程优化功能

4 如果问题高度并行化计算那么程序线程或者考虑程序放在GPU运行

5 等待IO操作时使用同步IO避免阻塞

6 利用更多RAM减少必须使用CPUIO

数据驱动优化

数据驱动优化最重要调优技术之一基于程序正在处理数据结构洞察方法聚焦数据分布及其程序中转化方式方法典型例子数组结构体(structure-Of-array, SOA)结构体数组

这类优化需要知道程序处理哪些数据数据分布情况然后相应修改程序

现代CPU是非常复杂设备我们几乎不可能预测某段代码如何运行CPU指令执行依赖很多因素变化组件太多了以至于人们不得不认真对待幸运借助6讨论过性能监控功能我们可以CPU角度观察代码

注意实现的优化不一定所有平台都有效例如循环阻塞非常依赖系统内存层次特征尤其L2L3缓存大小因此具有特性L2L3缓存大小CPU调优算法具有较小缓存CPU表现不一定好在程序将要运行平台测试这些变化是非常重要

接下来便于使用TMA方法方式组织这样分类初衷工程师提供某种检查清单以便他们高效消除TMA揭露低效问题同样这里并不打算转换


网站公告

今日签到

点亮在社区的每一天
去签到