Qcom平台通过Hexagon IDE 测试程序性能指导

Qcom平台通过Hexagon IDE 测试程序性能指导

  • 1 安装Hexagon IDE工具
  • 2 测试工程
    • 2.1 打开Hexagon IDE
    • 2.2 新建工程
    • 2.3 添加测试案例
      • 2.3.1 方法一:新建
      • 2.3.2 方法二:拷贝
    • 2.4 配置测试环境
      • 2.4.1 包含头文件
      • 2.4.2 添加程序优化功能(需先bulid一下)
      • 2.4.3 添加gprof测试性能
    • 2.5 编译
    • 2.6 运行
  • 3 解析gmon.t_0文件
  • 4 解读生成的txt文件

1 安装Hexagon IDE工具

安装包在共享盘中的地址为:Z:\Software_Data\Software\tool\Qcom,我安装的3.4.3版本:
在这里插入图片描述

安装时,可选择默认路径,也可选择其他路径。

2 测试工程

2.1 打开Hexagon IDE

在安装路径下打开Launch Hexagon IDE
在这里插入图片描述
在这里插入图片描述

2.2 新建工程

  1. 依次选择菜单栏的File >> New >> Hexagon Project:
    在这里插入图片描述

  2. 弹出建立工程的对话框:
    在这里插入图片描述

  1. Project name栏里填写项目名称,注意项目名称不能包含空格;

  2. Project location栏为打开Hexagon IDE工具时的工作地址,选择默认路径即可;

  3. Tools location栏为安装hexagon_sdk的工具路径,一般不能修改;

  4. Hexagon SDK location栏用来选择SDK的路径,打开Hexagon IDE时就自动填上;

  5. Project type栏里选择Executable(.exe),因为这个程序我们在Windows环境下运行;

  6. Architecture栏选择V60(-mv60);

  7. Choose project template栏选择General下的Empty Executable;

  8. 其余的无须修改,保持默认,如下:
    在这里插入图片描述

  9. 点击Finish新建完成,因Project location选择的是C:/Users/xx(我的workspace路径),此时在该路径下可以找到新建的工程:
    在这里插入图片描述

2.3 添加测试案例

添加测试案例有两个方法:新建和拷贝,新建适用于代码量小的测试,当测试代码文件较多时,建议使用拷贝。

2.3.1 方法一:新建

  1. 在项目名称上单击右键,选择New >> Source File
    在这里插入图片描述

  2. 弹出如下对话框
    在这里插入图片描述

注意:Source file框中填写源文件名称时,要加上文件类型,这里可以是C或者C++。在Template框中选择C或者C++,这里选择的要与填写的源文件类型相符。
3. 点击Finish完成创建
在这里插入图片描述

2.3.2 方法二:拷贝

将头文件、源文件和配置文件拷贝到新建的工程下,如下图
在这里插入图片描述

注意,可以将包含主函数的源文件放至src文件夹,拷贝完成之后需要在Hexagon IDE主界面中的Project Explorer中刷新,有两个方法:其一,在Project Explorer空白处单击右键,选中Refresh;其二,快捷键F5。

2.4 配置测试环境

配置测试环境主要包含三个:包含头文件、添加程序优化功能和添加gprof测试性能。包含头文件主要配置项目头文件路径,添加程序优化功能主要实现优化代码的功能,添加gprof测试性能主要是生成测试文件。

2.4.1 包含头文件

  1. 将头文件路径包含在工程中,在项目名称上单击右键,打开当前工程的Properties
    在这里插入图片描述

  2. 在弹出的界面中依次点击C/C++ General >> Paths and Symbols >> Includes >> GNU C >> Add
    在这里插入图片描述

  3. 接着在弹出的界面中点击File system,如下图
    在这里插入图片描述

  4. 选择头文件的路径,如下图
    在这里插入图片描述

  5. 点击OK保存,此时在Project Explorer中显示包含的文件
    在这里插入图片描述

2.4.2 添加程序优化功能(需先bulid一下)

  1. 同样打开当前工程的Properties,在弹出的界面中依次点击C/C++ Build >>Settings >> Tool Settings,Optimization为优化等级,将Hexagon C++ Compiler下的Optimization和Hexagon C Compiler下的Optimization均设置为为Optimize more(-O2)
    在这里插入图片描述

  2. 点击OK,设置成功。

2.4.3 添加gprof测试性能

  1. 同样打开当前工程的Properties,在弹出的界面中依次点击Run/Debug Settings >> SHS_haptic_effect(工程名),在弹出的界面中点击Simulator,并在当前界面的Miscellaneous flags框中添加- -profile命令,用于生成gmon文件
    在这里插入图片描述

  2. 点击OK,设置成功。

2.5 编译

  1. 在项目名称上单击右键,点击Build Project编译,或者直接采用快捷键Ctrl + B。编译完成后,会在项目下生成编译好的Binaries文件
    在这里插入图片描述

  2. 同时在项目路径下的LLVM Debug文件夹下生成可执行文件
    在这里插入图片描述

2.6 运行

  1. 在工具栏点击运行按钮
    在这里插入图片描述

  2. 运行结束会显示如下界面
    在这里插入图片描述

  3. 运行结束后会在项目所在的文件夹下生成gmon.t_0文件
    在这里插入图片描述

3 解析gmon.t_0文件

  1. cmd进入高通SDK路径下的bin目录下,有一个hexagon-gprof.exe文件,gprof是一个用于读取profile结果文件的工具
    在这里插入图片描述

  2. 将gmon.t_0文件拷贝至该文件夹下,并在cmd界面执行hexagon-gprof.exe,命令如下:
    在这里插入图片描述

注意:如须重新解析新生成的gmon.t_0文件,需将新生成的gmon.t_0文件重新拷贝到该目录下。
指令:.\hexagon-gprof.exe C:\Users\xx\xxxxx_effects\LLVM_Debug\xxxxx_effects gmon.t_0>xxxxxx_effects.txt

4 解读生成的txt文件

  1. 通过gprof解析生成的txt文件头如下
    在这里插入图片描述

  2. 各参数代表含义如下
    %time 函数执行占时百分比
    cumulative cycle(s) 函数和以上所有函数累积执行周期
    self cycle(s) 函数执行周期
    calls 函数执行总次数
    self Mc/call 函数每执行一次的执行周期
    total Mc/call 函数及其衍生函数执行一次的执行周期
    name 函数名

  3. MCPS(Million Cycles Per Second)计算公式:
    某函数的MCPS = total_cycles × Fs / (time × number of channels × Fs ×1000000)

  4. 示例
    如函数butter_filter_process_new执行周期9340704,采样率48k,time为2s,number of channels为2,则函数butter_filter_process_new的MCPS为
    MCPS = 934070448000/(22480001000000)
    注意:如果某函数有衍生函数,则计算MCPS时需加上所有衍生函数的self cycles。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【14】Github Copilot环境搭建

环境搭建 这里以Visual Studio Code为例,安装好vs code,打开扩展侧边菜单栏,搜索“Github Copilot”,会出现如下图的两个插件,点击安装第一个,另一个会附带一起安装,然后弹出提示重新启动vs co…

阿里云CDN- https(设计支付宝春节开奖业务)

HTTP相关概念 1. HTTP概述 http是最广泛的网络协议,是客户端与服务器之间的请求与应答的标准(TCP),用于www服务器传输超文本到本地浏览器的传输协议,使浏览器更加高效,网络传输减少。 2.HTTPS概述 http…

OpenHarmony移植之编译工具链

OpenHarmony移植之编译工具链 1、下载工具链 选择适合自己芯片的arm编译工具链,因为我的是arm cortex-a9的芯片,所以我选择如下交叉工具链 Downloads | GNU-A Downloads – Arm DeveloperDownload the The GNU Toolchain for the Cortex-A Family are…

稀疏3D检测-Sparse4Dv1v2v3

0. Multi-view 3D detection LSS(Lift-Splat-Shoot)利用深度估计将图像特征提升到3D空间,并将特征拍到BEV平面。后续工作将lift-splats操作应用于3D检测领域。 Bevformer将时序信息以BEV特征cat一起引入时序信息。 DETR3D中通过预测的3D点投影到图像平面后获取图像…

HTTPS请求头缺少HttpOnly和Secure属性解决方案

问题描述: 建立Filter拦截器类 package com.ruoyi.framework.security.filter;import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.…

vue仿甘特图开发工程施工进度表

前言 本文是根据项目实际开发中一个需求开发的demo,仅用了elementUI,可当作独立组件使用,C V即用。 当然没考虑其他的扩展性和一些数据的校验,主要是提供一个处理思路,有需要的小伙伴可以直接复制;本demo的…

厂家置换电费如何达到最大化收益

新能源行业知识体系-------主目录-----持续更新https://blog.csdn.net/grd_java/article/details/140004020 文章目录 一、电能电费二、同时刻不同厂家置换,不会影响最终电能电费结果三、风险防范补偿和回收机制四、我们的数据如何考虑补偿和回收五、如何利用补偿和…

K8S私有云裸金属服务器负载均衡器OpenELB——筑梦之路

OpenELB介绍 OpenELB 是一个专为裸机 Kubernetes 集群设计的开源负载均衡器实现。 在云服务环境中的 Kubernetes 集群里,通常可以用云服务提供商提供的负载均衡服务来暴露 Service,但是在本地没办法这样操作。而 OpenELB 可以让用户在裸金属服务器、边缘…

二叉树问题,两种解决方法(1遍历 2直接定义名字功能递归

1第一种方法就是另写一个traverse方法,2第二种方法就是把函数名当成已经实现的功能,直接写 1、翻转二叉树 class Solution {public TreeNode invertTree(TreeNode root) {if(rootnull) return null;TreeNode leftinvertTree(root.left);TreeNode righti…

Facebook:数字时代的社交瑰宝

在当今数字化飞速发展的时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的领军者,不仅连接了全球数十亿的用户,更深刻地改变了人们的社交方式和生活方式。本文将探讨Facebook如何成为数字时代的社交瑰宝…

【排序算法】1.冒泡排序-C语言实现

冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此下去,直…

SimMIM:一个类BERT的计算机视觉的预训练框架

1、前言 呃…好久没有写博客了,主要是最近时间比较少。今天来做一期视频博客的内容。本文主要讲SimMIM,它是一个将计算机视觉(图像)进行自监督训练的框架。 原论文:SimMIM:用于掩码图像建模的简单框架 (a…

支持大量边缘盒子集中管理调度的智慧物流开源了。

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

在golang中Sprintf和Printf 的区别

最近一直在学习golang这个编程语言,我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道,fmt.Sprintf返回的…

NodeJS技巧:在循环中管理异步函数的执行次数

背景介绍 在现代Web开发中,NodeJS因其高效的异步处理能力而备受青睐。尤其在数据抓取、网络爬虫等应用场景中,NodeJS的非阻塞I/O特性使其成为不二之选。然而,在实际编程过程中,我们经常会遇到一个棘手的问题——如何在循环中控制…

初识Docker及管理Docker

Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术:Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器(阿里系)搜索镜像获取镜像查看镜像信息…

python实现九九乘法表

1.self i 1 while i<9:j 1while j< i:print("j * i ",end)print(j * i ,end)print(" ",end)j 1i 1print() 实现结果&#xff1a; 2.改进 i 1 while i<9:j 1while j< i:# print("j * i ",end)# print(j * i ,end)# print(&…

CSA笔记1-基础知识和目录管理命令

[litonglocalhost ~]$ 是终端提示符&#xff0c;类似于Windows下的cmd的命令行 litong 当前系统登录的用户名 分隔符 localhost 当前机器名称&#xff0c;本地主机 ~ 当前用户的家目录 $ 表示当前用户为普通用户若为#则表示当前用户为超级管理员 su root 切换root权限…

详解曼达拉升级:如何用网络拓扑结构扩容BSV区块链

​​发表时间&#xff1a;2024年5月24日 BSV曼达拉升级是对BSV基础设施的战略性重塑&#xff0c;意在显著增强其性能&#xff0c;运行效率和可扩容。该概念于2018年提出&#xff0c;其战略落地将使BSV区块链顺利过渡&#xff0c;从现有的基于单一集成功能组件的网络拓扑结构&am…

java面向对象进阶篇--static

一、前言 java进阶篇已经开始了&#xff0c;先从面向对象开始&#xff0c;由于时间原因今天就只更新了static部分&#xff0c;内容上特别详细&#xff0c;一些特别的注意事项也在反复的提醒大家。 温馨提示一下&#xff0c;往后的java篇会越来越难&#xff0c;希望大家能够坚…