C++性能测试工具——Vtune的使用

一、Intel Vtune的安装

在前面初步认识了一下几个性能的测试工具,本篇重点介绍一下Intel VTune Profiler,VTune是一个强大的性能分析工具,它属于Intel oneAPI工具包中工具的一种。VTune的安装只介绍在Linux平台下的场景(Windows安装相对简单)。
1、两种安装方法
第一种方法:
打开网址https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html#base-kit。找到合适的版本安装,不过这个安装是一个全版本的安装,可能会安装很多其它工具。
第二种方法:
使用命令安装:

sudo yum install intel-oneapi-vtune  # CentOS
sudo apt install intel-oneapi-vtune  # Ubuntu/Debian
或使用离线安装包:
wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6bfca885-4156-491e-849b-1cd7da9cc760/intel-oneapi-base-toolkit-2025.1.1.36_offline.sh
sudo sh ./intel-oneapi-base-toolkit-2025.1.1.36_offline.sh -a --silent --cli --eula accept

2、配置
主要是设置环境变量和权限

//配置环境变量
source /opt/intel/oneapi/vtune/latest/env/vars.sh  # oneAPI 版本
source /opt/intel/vtune_amplifier/amplxe-vars.sh    # 老版本
//设置用户权限
sudo usermod -aG vtune $USER

3、验证
可以运行相关脚本:

bash /opt/intel/oneapi/vtune/latest/bin64/vtune-self-checker.sh

二、主要功能

VTune有三种使用方式,一个是使用GUI的方式,另外一种是命令方式,还有一种是远程应用的方式。
1、使用GUI方式
使用下面的命令启动:

vtune-gui  

然后就可以使用UI进行处理相关的测试。首先创建一个新的测试项目,选择相应的类型;其次配置测试程序的路径或进程ID;最后启动分析并查看结果,如对火焰图或调用栈等进行分析。
如下图:
在这里插入图片描述

2、命令方式
执行下面命令:

vtune -collect hotspots -r ./result_dir -- ./your_application    #运行
amplxe-cl -report hotspots -r ./result_dir -format text -report-output ./report.txt #生成报告  

hotspots为分析的类型(其它还有locksandwaits等),生成的报告支持txt,csv及html。
3、远程应用方式
远程方式也比较简单,它也分成有无界面的操作方式,其实这个和VTune本身没有什么太大关系。可以使用远程桌面的一些工具(如向日葵,VNC Server等)或在一些开发IDE上使用插件(如VSCODE的oneAPI插件)。这里就不再展开分析说明。

三、例程应用

下面看一个例程分析,对OneAPI自带的矩阵测试程序进行:

vtune -collect hotspots -r ~/result -- ./matrix
vtune: Warning: Microarchitecture performance insights will not be available. Make sure the sampling driver is installed and enabled on your system.
vtune: Collection started. To stop the collection, either press CTRL-C or enter from another console window: vtune -r /home/fpc/result -command stop.
Addr of buf1 = 0x7f339f7b5010
Offs of buf1 = 0x7f339f7b5180
Addr of buf2 = 0x7f339d7b4010
Offs of buf2 = 0x7f339d7b41c0
Addr of buf3 = 0x7f339b7b3010
Offs of buf3 = 0x7f339b7b3100
Addr of buf4 = 0x7f33997b2010
Offs of buf4 = 0x7f33997b2140
Threads #: 16 Pthreads
Matrix size: 2048
Using multiply kernel: multiply1
Execution time = 3.516 seconds
vtune: Collection stopped.
vtune: Using result path `/home/fpc/result'
vtune: Executing actions 20 % Resolving information for `libtpsstool.so'       
vtune: Warning: Cannot locate debugging information for file `/opt/intel/oneapi/vtune/2024.0/lib64/libtpsstool.so'.
vtune: Executing actions 75 % Generating a report                              Elapsed Time: 3.535sCPU Time: 46.929sEffective Time: 46.929sSpin Time: 0sOverhead Time: 0sTotal Thread Count: 17Paused Time: 0sTop Hotspots
Function   Module     CPU Time  % of CPU Time(%)
---------  ---------  --------  ----------------
multiply1  matrix      46.909s            100.0%
init_arr   matrix       0.010s              0.0%
__GI_      libc.so.6    0.010s              0.0%
Collection and Platform InfoApplication Command Line: ./matrixOperating System: 5.19.0-50-generic DISTRIB_ID=Kylin DISTRIB_RELEASE=V10 DISTRIB_CODENAME=kylin DISTRIB_DESCRIPTION="Kylin V10 SP1" DISTRIB_KYLIN_RELEASE=V10 DISTRIB_VERSION_TYPE=enterprise DISTRIB_VERSION_MODE=normalComputer Name: fjfResult Size: 4.5 MBCollection start time: 10:55:09 12/05/2025 UTCCollection stop time: 10:55:13 12/05/2025 UTCCollector Type: User-mode sampling and tracingCPUName: Intel(R) microarchitecture code named Alderlake-SFrequency: 2.112 GHzLogical CPU Count: 20Cache Allocation TechnologyLevel 2 capability: not detectedLevel 3 capability: not detectedIf you want to skip descriptions of detected performance issues in the report,
enter: vtune -report summary -report-knob show-issues=false -r <my_result_dir>.
Alternatively, you may view the report in the csv format: vtune -report
<report_name> -format=csv.
vtune: Executing actions 100 % done                                

同时,会在指定的目录下,生成一个文件夹,内部有不少的供分析的相关文件,此处为/home/user/result
如果在执行命令时出现:

vtune: Error: Cannot start data collection because the scope of ptrace system call is limited. To enable profiling, please set /proc/sys/kernel/yama/ptrace_scope to 0. To make this change permanent, set kernel.yama.ptrace_scope to 0 in /etc/sysctl.d/10-ptrace.conf and reboot the machine.
vtune: Warning: Microarchitecture performance insights will not be available. Make sure the sampling driver is installed and enabled on your system

可执行命令:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
或
sudo sysctl -w kernel.yama.ptrace_scope=0

四、总结

会熟练的使用各种测试工具,是对程序进行优化的前提。特别是在一些性能需求相当关键的场景下,不借助工具会导致性能优化的效率急剧降低。磨刀不误砍柴工,与诸君共勉!

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

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

相关文章

互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-6

互联网大厂Java求职面试&#xff1a;优惠券服务架构设计与AI增强实践-6 场景设定&#xff1a;技术总监张总坐在会议室里&#xff0c;郑薪苦带着自信的微笑走了进来。今天他们要围绕优惠券服务的架构设计及如何结合AI进行增强展开讨论。 第一轮面试&#xff1a;基础架构设计 …

nginx模块使用、过滤器模块以及handler模块

一、如何使用nginx的模块 1.ngx_code.c: #include "ngx_config.h" #include "ngx_conf_file.h" #include "nginx.h" #include "ngx_core.h" #include "ngx_string.h" #include "ngx_palloc.h" #include "n…

【Odoo】Pycharm导入运行Odoo15

【Odoo】Pycharm导入运行Odoo15 前置准备1. Odoo-15项目下载解压2. PsrtgreSQL数据库 项目导入运行1. 项目导入2. 设置项目内虚拟环境3. 下载项目中依赖4. 修改配置文件odoo.conf 运行Pycharm快捷运行 前置准备 1. Odoo-15项目下载解压 将下载好的项目解压到开发目录下 2. …

网络安全-等级保护(等保) 2-5 GB/T 25070—2019《信息安全技术 网络安全等级保护安全设计技术要求》-2019-05-10发布【现行】

################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》包含安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安…

【SpringBoot】✈️整合飞书群机器人发送消息

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时3分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&am…

我的多条件查询

背景&#xff1a;2个表&#xff0c;是一对多的关系&#xff0c;一个实时视频帧可以出现多个检测结果 要求&#xff0c;可以根据&#xff0c;ids&#xff0c;起始时间&#xff0c;识别出的鸟的种类&#xff0c;来进行删除。 出现的问题&#xff0c; 一致性没有实现&#xff1a…

关于网站提交搜索引擎

发布于Eucalyptus-blog 一、前言 将网站提交给搜索引擎是为了让搜索引擎更早地了解、索引和显示您的网站内容。以下是一些提交网站给搜索引擎的理由&#xff1a; 提高可见性&#xff1a;通过将您的网站提交给搜索引擎&#xff0c;可以提高您的网站在搜索结果中出现的机会。当用…

【Oracle专栏】扩容导致数据文件 dbf 丢失,实操

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 同事检查扩容情况,发现客户扩容后数据盘后,盘中原有文件丢失,再检查发现数据库没有启动。通过检查发现数据盘中丢失的是oracle的 dbf 表空间文件。数据库无法启动。 检查情况:1)没有rman备份 …

负载均衡—会话保持技术详解

一、会话保持的定义 会话保持&#xff08;Session Persistence&#xff09;是一种负载均衡策略&#xff0c;其核心机制是确保来自同一客户端的连续请求&#xff0c;在特定周期内被定向到同一台后端服务器进行处理。这种机制通过记录和识别客户端的特定标识信息&#xff0c;打破…

CSRF攻击 + 观测iframe加载时间利用时间响应差异侧信道攻击 -- reelfreaks DefCamp 2024

参考: https://0x90r00t.com/2024/09/30/3708/ 题目信息 有些事情最好还是保持低调。当然&#xff0c;除非你是个真正的怪胎。 注意&#xff1a;该网站通过HTTPS提供服务 标志格式&#xff1a;DCTF&#xff5b;&#xff5d;题目实现了一个类似视频网站的东西 在其提供的数据库中…

JS逆向-某易云音乐下载器

文章目录 介绍下载链接Robots文件搜索功能JS逆向**函数a&#xff1a;生成随机字符串****函数b&#xff1a;AES-CBC加密****函数c&#xff1a;RSA公钥加密** 歌曲下载总结 介绍 在某易云音乐中&#xff0c;很多歌曲听是免费的&#xff0c;但下载需要VIP&#xff0c;此程序旨在“…

黑马k8s(十)

1.Pod生命周期-钩子函数 2.Pod生命周期-容器探测 因为没有hello.txt文件 查看详情&#xff1a; 修改为查看命令&#xff1a; 查看一下详情&#xff1a; 因为只有一个80端口&#xff0c;没有8080&#xff0c;所以会重启 查看详情&#xff1a; 修改成80&#xff1a; 因为没有…

每日算法刷题Day9 5.17:leetcode定长滑动窗口3道题,用时1h

9. 1652.拆炸弹(简单&#xff0c;学习) 1652. 拆炸弹 - 力扣&#xff08;LeetCode&#xff09; 思想 为了获得正确的密码&#xff0c;你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 &#xff0c;将第 i 个数字用 接下来 k 个数字之和替换。如果 k < 0…

Java IO及Netty框架学习小结

Netty netty官网: Netty 什么是Netty&#xff1f; Netty 是 一个异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。Netty 是一个 NIO 客户端服务器框架&#xff0c;可以快速轻松地开发网络应用程序&#xff08;例如协议服务器和客…

计算机网络笔记(二十七)——4.9多协议标签交换MPLS

4.9.1MPLS的工作原理 一、MPLS基本工作原理 MPLS&#xff08;Multiprotocol Label Switching&#xff09;是一种介于数据链路层和网络层之间的转发技术&#xff0c;通过固定长度的标签进行高速数据转发。其核心特点是通过预建立的标签交换路径&#xff08;Label Switching Pa…

AI 赋能 Copula 建模:大语言模型驱动的相关性分析革新

技术点目录 R及Python语言及相关性研究初步二元Copula理论与实践&#xff08;一&#xff09;二元Copula理论与实践&#xff08;二&#xff09;【R语言为主】Copula函数的统计检验与选择【R语言为主】高维数据与Vine Copula 【R语言】正则Vine Copula&#xff08;一&#xff09;…

【洛谷P3386】二分图最大匹配之Kuhn算法/匈牙利算法:直观理解

题目&#xff1a;洛谷P3386 【模板】二分图最大匹配 &#x1f955; 匈牙利算法本来是针对带权图最大匹配的&#xff0c;这里由于题目只是求最大匹配的边数&#xff0c;所以我们也只考虑无权的情况。 &#x1f680; 本文旨在服务于看了别的关于匈牙利算法的文章但不甚理解的童…

【数据结构】二分查找(返回插入点)5.14

二分查找基础版 package 二分查找; public class BinarySearch { public static void main(String[] args) { // TODO Auto-generated method stub } public static int binarySearchBasic(int[] a,int target) { int i0,ja.length-1; //设置指针初值 while…

Ubuntu 命令

Ubuntu 命令速查表​ ​分类​​命令​​功能描述​​示例/常用选项​​​​文件与目录​ls列出目录内容ls -a&#xff08;显示隐藏文件&#xff09;; ls -lh&#xff08;详细列表易读大小&#xff09; cd切换目录cd ~&#xff08;主目录&#xff09;; cd ..&#xff08;上级…

Java集合框架详解与使用场景示例

Java集合框架是Java标准库中一组用于存储和操作数据的接口和类。它提供了多种数据结构&#xff0c;每种数据结构都有其特定的用途和性能特点。在本文中&#xff0c;我们将详细介绍Java集合框架的主要组成部分&#xff1a;List、Set和Queue&#xff0c;并通过代码示例展示它们的…