CPU性能优化--采集调用栈

我们可能经常会遇到程序中热点函数被多个调用者调用的情况,这样就需要知道哪个函数调用foo的次数最多,应用程序的库函数出现在热点处。要理解为什么特定函数会呈现为热点,我们需要知道程序的控制流图中的哪条路径是最热的。

Intel VTune profiler对基准测试x264的源代码和汇编代码分析视图。

分析foo的所有调用者的逻辑可能非常耗时,我们希望只关注那些导致foo为热点的调用者,我们想知道程序的CFG中最热的路径。剖析工具通过在收集性能样本时捕获进程的调用栈以及其他信息来实现这一点。然后,将所有收集的栈进行分分组,从而使我们能够看到导致某个特定函数的最热路径。

用linux perf工具收集调用栈有三种可能的方法。

帧指针 perf record--call-graph fp 需要在二进制构建的时候带上--fnoomit-frame-pointer 参数。

DWARF 调试信息,perf record--call-graph dwarf 需要二进制文件在编译构建时带上DWARF调试信息 -g

intel最后分支记录Last Branch Record 硬件特性,调用图的深度不如前面两种方法,关于LBR的更多信息参见6.2节。

下面是使用Linux perf采集程序调用栈的示例,根据输出结果,我们知道foo有55%的执行时间是从funcl调用的,我们可以清楚的看到foo调用之间的开销分布。

使用Intel vtune profier的时候,可以配置分析功能时选中 收集栈来采集调用栈数据

5.4.4 火焰图

是一种常用的可视化剖析数据和程序最热代码路径的方法,可以让我们看到哪些函数占用了大部分的执行时间。

5.5 屋顶线性能模型

屋顶线性能模型是加利福利亚分校2009提出来的。一种面向吞吐的性能模型,常用语高性能计算,此模型中的屋顶线,表示应用程序的性能不可能超过计算机处理能力的事实,程序中的每个函数和循环都受计算机的计算能力或者内存容量的限制,应用程序受到某个屋顶线函数的限制。

硬件有两个主要限制:计算速度和数据搬移速度。应用程序的最大性能受峰值计算性能和平台带宽算数强度乘积之间的最小值的限制。图24中显示的屋顶线图基于硬件限制绘制了两个应用程序A和B的性能。程序的不同部分可能具有不同的性能特征,屋顶线模型考虑了这一点,可以在同一个图上表示显示应用程序的多个函数和循环。

算术强度是FLOPS 和字节之间的比率,可以根据程序中的每个循环进行计算。现在我们计算代码清淡8中的代码的算术强度,在最内层的循环体中,有一个加法运算和一个乘法运算,因此2个浮点运算,还有三个读操作和一个写操作。

提高应用程序性能的传统方法充分利用计算机的SIMD和多核功能, 通常需要在很方面进行优化,包括向量化,内存,线程。屋顶线方法有助于评估应用程序的这些特征。在屋顶线图上,我们可以绘制标量单核,SIMD单核和SIMD多核性能的理论最大值。可以让我们了解应用程序性能的提高空间。如果发现应用程序是计算密集型的,并且性能低于峰值标量单核性能,则应该考虑强制向量化并利用多个线程分配工作。相反,如果应用程序的算术强度比较低,则应该寻找改善内存访问的方法,使用屋顶线模型性能的最终目标是将点向上移动,向量化和现成话将点向上移动,而通过增加算术强度优化内存访问将点向右移动同事还可能提高性能。

理论最大值,可以根据所使用的计算机的特征计算,计算机理论最大值并不困难。对于Intel Core i5-8259U处理器,具有avx2和2个融合乘加单元的最大FLOPS可以通过如下公式

峰值 FLOPS = 8(逻辑核数量) x 256(avx)位宽/ 32位(浮点数大小)

总之 ,屋顶线性能模型有助于

1 识别性能瓶颈

2 指导软件优化

3 确定何时优化已经达到了极限

4 评估与机器能力相关的性能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/pingmian/61841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单测试下faiss 检索速度

在NLP的应用中,经常需要用到对向量的搜索,如果向量的数量级非常大,比如1千万,甚至上亿条,普通的方式就满足不了生产需要了,falcebook开源的faiss框架能够解决“海量向量搜索”的问题。faiss是为稠密向量提供…

milvus es

ES 与 Milvus 结合实现高效文档搜索的实战指南 原文链接 目录 背景介绍场景与效果概述架构对比与问题分析Milvus 向量搜索架构ES Milvus 搜索架构详细流程解析Milvus 搜索配置详解ES 搜索策略与 DSL 配置结果合并与排序策略总结与未来优化 1. 背景介绍 随着团队和公司的发…

Flutter 设计模式全面解析:抽象工厂

设计模式作为软件开发中的经典解决方案,在 Flutter 的开发中也能为我们提供强大的架构支持。本文来介绍一下如何在 Flutter 中来实现抽象工厂设计模式,以及如何创建一系列相关或依赖对象并优雅地管理它们之间的复杂依赖关系。 日常开发中我们也能经常看…

AWS IAM 及其功能

IAM 代表身份和访问管理,可帮助控制谁可以进入云、访问 AWS 资源以及进入后可以做什么。 身份: IAM 帮助管理可以与 AWS 资源交互的身份(如用户名或服务帐户)。 访问:它决定每个身份可以在 AWS 服务上执行哪些操作&am…

SpringBoot集成Minio实现上传凭证、分片上传、秒传和断点续传

总体概述 Spring Boot整合Minio后,前端的文件上传有两种方式: 1.文件上传到后端,由后端保存到Minio 这种方式好处是完全由后端集中管理,可以很好的做到、身份验证、权限控制、文件与处理等,并且可以做一些额外的业务逻…

『 Linux 』网络层 - IP协议 (二)

文章目录 路由NAT技术分片与组装分片的组装IP协议分片的短板 路由 通常情况路由器具备了一个非常重要的功能,即构建子网; 同时路由器需要实现跨网络通信,说明路由器必须存在两个或以上的IP地址,通常在路由器中可以看到几个接口,分别是一个WAN口和几个LAN口; WAN口IP被称为公网I…

深度学习实战图像缺陷修复

这里写目录标题 概述1. 图像缺陷修复的研究背景2. 传统图像缺陷修复方法的局限性(1) 基于纹理合成的方法(2) 基于偏微分方程(PDE)的方法 3. 深度学习在图像缺陷修复中的兴起(1) 深度学习的基本思路(2) 深度学习方法的优势(3) 关键技术的引入 4. 深度学习…

vue从入门到精通(七):事件处理

1,事件的基本使用 1.使用v-on:xxx或 xxx 绑定事件,其中xxx是事件名2.事件的回调需要配置在methods对象中,最终会在vm上3.methods中配置的所数,不要用箭头函数!否则this就不是vm了4.methods中配置的函数,都是被Vue所管…

如何在 .gitignore 中仅保留特定文件:以忽略文件夹中的所有文件为例

在日常的开发工作中,使用 Git 来管理项目是不可或缺的一部分。项目中的某些文件夹可能包含大量的临时文件、生成文件或不需要版本控制的文件。在这种情况下,我们通常会使用 .gitignore 文件来忽略这些文件夹。然而,有时我们可能希望在忽略整个…

【SQL实验】索引操作(菜单操作和命令操作)

【代码是自己的解答,并非标准答案,也有可能写错,文中可能会有不准确或待完善之处,恳请各位读者不吝批评指正,共同促进学习交流】 文件”成绩管理”导入【具体操作前几篇文章详细展示过来,这里跳过。还是不太…

MVC 模型:架构与原理

MVC 模型:架构与原理 MVC(Model-View-Controller)模型是一种广泛应用于软件工程的架构模式,主要用于分离应用程序的逻辑层,以提高其可维护性和可扩展性。MVC模型将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。本文将深入探讨MVC模型的…

[pdf,epub]162页《分析模式》漫谈合集01-35提供下载

《分析模式》漫谈合集01-35的pdf、epub文件,已上传至本号的CSDN资源。 如果CSDN资源下载有问题,可到umlchina.com/url/ap.html。 已排版成适合手机阅读,pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》? ★[缝合故事…

【Linux学习】【Ubuntu入门】1-7 ubuntu下磁盘管理

1.准备一个U盘或者SD卡(插上读卡器),将U盘插入主机电脑,右键点击属性,查看U盘的文件系统确保是FAT32格式 2.右键单击ubuntu右下角图标,将U盘与虚拟机连接 参考链接 3. Ubuntu磁盘文件:/dev/s…

Leetcode152. 乘积最大子数组(HOT100)

链接 代码&#xff1a; class Solution { public:int maxProduct(vector<int>& nums) {int f nums[0],g nums[0];int res nums[0];for(int i 1;i<nums.size();i){//int i 1 not int i 0 ,因为我们已经初始化好了首元素作为子数组的最大值和最小值int a n…

移远通信推出全新5G RedCap模组RG255AA系列,以更高性价比加速5G轻量化大规模商用

11月20&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;正式推出其全新5G RedCap模组RG255AA系列。该系列模组支持5G NR独立组网&#xff08;SA&#xff09;和LTE Cat 4双模通信&#xff0c;具有高性能高集成度、低功耗、小尺寸、高性价比等优势&#…

【CVE-2024-9413】SCP-Firmware漏洞:安全通告

安全之安全(security)博客目录导读 目录 一、概述 二、修订历史 三、CVE根因分析 四、问题修复解决 一、概述 在SCP固件中发现了一个漏洞,如果利用该漏洞,可能会允许应用处理器(AP)在系统控制处理器(SCP)固件中导致缓冲区溢出。 CVE IDCVE-2024-9413受影响的产品SC…

数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall

数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集可视化项…

详解Qt QTimeZone 时区类

文章目录 QTimeZone 详解前言什么是 QTimeZone&#xff1f;QTimeZone 的构造函数和常用成员函数构造函数1. 默认构造函数2. 指定时区 ID 构造函数3. 根据 UTC 偏移量构造 常用成员函数1. 获取时区 IDid 2. 检查时区是否有效isValid 3. 获取 UTC 偏移量offsetFromUtc 4. 检查是否…

Linux应用编程(C语言编译过程)

目录 1. 举例 2.预处理 2.1 预处理命令 2.2 .i文件内容解读 3.编译 4.汇编 5.链接 5.1 链接方式 5.1.1 静态链接 5.1.2 动态链接 5.1.3 混合链接 1. 举例 Linux的C语言开发&#xff0c;一般选择GCC工具链进行编译&#xff0c;通过下面的例子来演示GCC如何使用&#…

GitHub 开源项目 Puter :云端互联操作系统

每天面对着各种云盘和在线应用&#xff0c;我们常常会遇到这样的困扰。 文件分散在不同平台很难统一管理&#xff0c;付费订阅的软件越来越多&#xff0c;更不用说那些烦人的存储空间限制了。 最近在 GitHub 上发现的一个开源项目 Puter 彻底改变了我的在线办公方式。 让人惊…