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

news/2024/12/26 19:44:11/

在第二部分我们讨论如何使用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揭露低效问题同样这里并不打算转换


http://www.ppmy.cn/news/1557787.html

相关文章

【数据结构】数据结构试题集Ver3 第六章 树

关注作者了解更多 我的其他CSDN专栏 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处…

【数据科学导论】第一二章·大数据与数据表示与存储

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据处理与分析_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言…

React Props 完整使用指南

React Props 完整使用指南 1. 类组件中的 Props 1.1 基本使用 // 父组件 class ParentComponent extends React.Component {render() {return (<ChildComponent name"John"age{25}isStudent{true}hobbies{[reading, swimming]}/>);} }// 子组件 class Child…

Pandas系列|第二期:Pandas中的数据结构

1.Pandas中的数据结构&#xff1a;Series和DataFrame Pandas 的主要数据结构是 Series &#xff08;一维数据&#xff09;与 DataFrame&#xff08;二维数据&#xff09;&#xff0c;这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。 Series 是一…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(二)

文章目录 一、登录功能实现1、前端实现1.1 创建登录组件1.2 安装和配置Element Plus1.3 安装axios和调用后端接口2、后端实现2.1 创建数据表和准备数据2.2 配置MYSQL配置信息2.3 登录功能实现2.3.1 创建实体类2.3.2 创建登录服务接口及实现2.3.3 创建Mapper2.3.4 实现登录接口A…

VSCode 配置远程连接免密登录 插件

自我存档 远程连接免密登录 远程连接 在扩展界面搜remote ssh 安装完成后可以在侧边栏找到远程资源管理器 通过来添加或者点击打开ssh配置文件 点击的话以这种方式, 手动添加则按照相同格式输入即可 格式如下所示, Host后添加IP, User是登录ssh的用户, hostname是显示在…

宠物用品电子商务系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

网易UU远程

网易UU远程&#xff08;原GameViewer远程&#xff09;是一款支持远程控制的软件&#xff0c;它允许用户通过手机、平板、电脑等设备远程控制电脑。软件提供了文件传输功能&#xff0c;用户可以通过这个功能实现远程下载文件。 能够打游戏&#xff01;&#xff01;&#xff01;