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

embedded/2024/12/21 18:55:15/

在第二部分我们讨论如何使用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/embedded/147603.html

相关文章

11篇--图像边缘检测

图像梯度 要学习图像边缘检测,要先了解图像梯度的概念,我们正是通过梯度值来区分边缘像素点的 处于边缘附近的像素点与周围像素点的差距很大(不然不会有边缘呈现),所以给边缘附近的的梯度之变化很快,通过…

git使用和gitlab部署

1.ci,cd,DevOps ci:持续集成:开发的代码集成到代码仓库 cd:持续交互:从代码仓库拉取代码到部署到测试环境 cd:持续部署:从代码仓库拉取代码到部署到生产环境 DevOps:开发写完的代码自动集成&#xff0c…

ResNext-50模型进行图像识别

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 import numpy as np from keras.preprocessing.image import ImageDataGenerator from keras.utils import to_categorical from keras.models import Sequential from keras.layers import Input…

linux-----数据库

Linux下数据库概述 数据库类型: 关系型数据库(RDBMS):如MySQL、PostgreSQL、Oracle等。这些数据库以表格的形式存储数据,表格之间通过关系(如主键 - 外键关系)相互关联。关系型数据库支持复杂的…

MCU驱动使用

一、时钟的配置: AG32 通常使用 HSE 外部晶体(范围:4M~16M)。 AG32 中不需要手动设置 PLL 时钟(时钟树由系统自动配置,无须用户关注)。用户只需在配置文件中给出外部晶振频率和系统主频即可。 …

如何确保品牌色在VR虚拟展厅中保持一致性?

确保品牌色在VR虚拟展厅中的一致性对于品牌视觉传达至关重要。品牌色不仅是企业视觉识别系统的重要组成部分,而且在虚拟环境中,它们对于塑造品牌形象和提升用户体验具有决定性作用。 接下来,由专业从事VR虚拟展厅制作的圆桌3D云展厅平台为大家…

【ETCD】【实操篇(四)】etcd常见问题快问快答FAQ

原文:https://etcd.io/docs/v3.5/faq/ 目录 etcd, 一般问题配置相关部署相关操作相关性能相关其他问题 etcd, 一般问题 什么是 etcd? etcd 是一个一致性的分布式键值存储。它主要作为分布式系统中的独立协调服务,设计用于存储可以完全放入内…

如何用发链框架,快速构建一条区块链?

构建一条公链是一个庞大且系统性的工程,涉及技术、生态、市场等多个层面的挑战。特别是在技术层面,必须解决共识机制、可扩展性、安全性以及智能合约的适用性等问题。同时,公链的长期运营和去中心化治理也是不可忽视的难题,令许多…