当前位置: 首页 > news >正文

建站网站加盟百度网络营销推广

建站网站加盟,百度网络营销推广,非自己的网站如何做二次跳转,公司注册网站需要什么条件NEON优化:软件性能优化、硬件降功耗怎么搞? 背景性能优化基础之MCPS和MIPS测试工具及流程小结 NEON优化系列文章: NEON优化1:软件性能优化、降功耗怎么搞?linkNEON优化2:ARM优化高频指令总结, l…

NEON优化:软件性能优化、硬件降功耗怎么搞?

    • 背景
    • 性能优化基础之MCPS和MIPS
    • 测试工具及流程
    • 小结

NEON优化系列文章:

  1. NEON优化1:软件性能优化、降功耗怎么搞?link
  2. NEON优化2:ARM优化高频指令总结, link
  3. NEON优化3:矩阵转置的指令优化案例,link
  4. NEON优化4:floor/ceil函数的优化案例,link
  5. NEON优化5:log10函数的优化案例,link
  6. NEON优化6:关于交叉存取与反向交叉存取,link
  7. NEON优化7:性能优化经验总结,link
  8. NEON优化8:性能优化常见问题QA,link

背景


为了移动端或嵌入式设备等场景也能用上前沿技术,产品往往会上一些复杂的算法模型,但由于算法开销过大,导致实时性差、功耗高等问题,需要进行端侧的性能优化。

如何在不改变算法效果的前提下,降低算法代码的时间复杂度,成了许多工程师不得不面对的问题。

性能优化基础之MCPS和MIPS


首先,在进行性能优化前,应找到一个具体的性能衡量指标,即MIPS/MCPS

  • MIPS:million instructions per second,程序运行时每秒所耗费的指令数
  • MCPS:million cycles per second,程序运行时每秒所耗费的周期数

MIPS和MCPS的区别

  • MIPS是指令数,不同平台软仿和硬仿的差距不大
  • MCPS是周期数,由于有硬件优化,可能不同平台会出现MCPS不同,甚至比MIPS还小。

一般软仿结果,MIPS都比MCPS小,因为软仿工具RVDS的CPI最小才能为1,硬仿结果能直接获得MCPS数。硬仿时,好的CPU能做到CPI小于1,即1个周期多指令,具体见:link。

With a single-execution-unit processor, the best CPI attainable is 1. However, with a multiple-execution-unit processor, one may achieve even better CPI values (CPI < 1).

性能世界的单位:cycle、tick

  • 性能优化常用“cycle”作为单位,cycle本质是CPU主频的倒数。这个可比time的精度高多了。
  • 从硬件原理上,CPU是靠一个心跳来驱动它工作的,每次心跳就是一个cycle,硬件工程师也爱把心跳称为tick。
  • 计算公式:1 cycle = 1 tick = (1/CPU主频)秒
    ——引自网络

性能分析中的指令周期与执行时间的关系是?

  • 先有晶振,然后产生时钟周期(如主频2000MHz),再运行程序计算(消耗一定的指令周期Cycles),最后计算成百万周期数(MCPS/MIPS)来评估算法时间开销。

  • 运行一个指令一般会消耗1个或多个周期数,周期到指令的转化为,CPI(Cycle per Instruction),一般大于1,希望接近或小于1。

主频与周期数、执行时间的转换公式

  1. 如何在代码中计算时钟周期数,https://blog.csdn.net/qq_38877888/article/details/103848455
  2. 时钟周期与指令周期,MIPS与CPI,https://blog.csdn.net/tuyu265/article/details/105209683

MIPS计算DEMO

目录结构:

  • src
    • main.c
      • void test(int* arr, int len);
    • vpu.h
    • vpu.s

计算代码:

#include <stdio.h>#define MIPS_COUNT_ARM_CORTEX#ifdef MIPS_COUNT_ARM_CORTEX
#include "v7_pmu.h"
#endif#ifdef MIPS_COUNT_ARM_CORTEX
#define MILLION_UNIT        (1000000.f)
#define KILO_UNIT           (1000.f)
#define FRAME_LEN_MS        (10.f)     // 10ms
#define COUNT_NUM           1000
unsigned int counter0;
unsigned int cycle_count1;
unsigned int cycle_count2;
unsigned int cur_time = 0;
long double cur_time_tmp = 0.0;
double avg_time = 0; 
unsigned long avg_time_tmp = 0;
unsigned int peak_time = 0;
float cycle2mips_coef = (1 / MILLION_UNIT) / (FRAME_LEN_MS / KILO_UNIT);  // unit: mipsvoid calcu_mips_start(void)
{enable_pmu();                // Enable the PMUreset_ccnt();                // Reset the CCNT (cycle counter)reset_pmn();                 // Reset the configurable counterspmn_config(0, 0x03);         // Configure counter 0 to count event code 0x03enable_ccnt();               // Enable CCNTenable_pmn(0);               // Enable countercounter0 = read_pmn(0);      // Read counter 0cycle_count1 = read_ccnt();  // Read Core cycle
}void calcu_mips_end(void)
{cycle_count2 = read_ccnt();cur_time = cycle_count2 - cycle_count1;// 10^6 => million cycle, *1000/frmeLms => secondcur_time_tmp = (float)cur_time * cycle2mips_coef; // mipsavg_time_tmp += (unsigned int)cur_time_tmp;if (cur_time > peak_time) {peak_time = cur_time;}printf("%.2f mips \n", cur_time_tmp);
}void print_mips_result(void)
{avg_time = (double)avg_time_tmp / COUNT_NUM;printf("max %.2f mips \n", (float)peak_time * cycle2mips_coef);printf("avg %.2f mips \n", avg_time);
}
#endifvoid main(void) {// set mannualint cnt = COUNT_NUM;while(cnt--) {
#ifdef MIPS_COUNT_ARM_CORTEXcalcu_mips_start();
#endif// test();#ifdef MIPS_COUNT_ARM_CORTEXcalcu_mips_end();
#endif}#ifdef MIPS_COUNT_ARM_CORTEXprint_mips_result();
#endif
}

计算开销的模块函数通常放到要测试开销的相关函数如test()前后,即可得到该函数的单独MIPS开销,当然,也可以根据总体程序运行的开销乘相关函数所占开销比例得到,但计算不便,这里不推荐。

测试工具及流程


所需工具

软仿测试工具通常采用ARM公司的RVDS(RealView Development Suite)开发套件,模拟各种内核处理进行仿真,得到开销数据。

硬仿测试工具通常是用Andriod平台自带的simpleperf工具,将可执行文件直接推到手机上运行,实时抓取CPU数据得到实际开销数据,并绘制出图,俗称火焰图。

软硬仿优化流程

  • 软仿流程
    • 安装RVDS软件
    • 配置代码工程环境
    • 跑通代码
    • 编写开销计算代码
    • 仿真Profile
    • 得到热点函数和开销基线
    • 进行代码优化
    • 测试热点函数开销
  • 硬仿流程
    • 与软仿流程类似
    • 建议先软仿,再硬仿
    • 涉及到IO读写等开销问题,软仿无法模拟实际运行情况,以硬仿结果为准

有了热点开销函数,就可以进行相关指令集及代码优化了。

小结


本文分享了性能优化的背景及基础概念,时间复杂度计算之MCPS和MIPS,以及测试工具和软硬仿流程。下篇分享NEON优化的案例与经验。

http://www.mmbaike.com/news/93710.html

相关文章:

  • 按天计费的seo弊端南宁市优化网站公司
  • 广东网络文明大会开幕seo推广怎么学
  • 手机做网站公司有哪些潍坊关键词优化排名
  • 哪个视频网站做视频最赚钱百度服务中心人工客服
  • 商城网站开发需求分析镇江网站建站
  • 用织梦做的网站好不好郑州专业seo哪家好
  • 温岭自适应网站建设超级外链工具有用吗
  • 用老域名做新网站 权重怎么传递百度推广业务员电话
  • 网站客服流程怎么写湖南seo网站开发
  • 成都农业网站建设东莞网站建设推广
  • 专业的网站开发seo网站优化培训找哪些
  • 企业邮箱免费版注册seo资讯网
  • 亳州市网站建设客服电话关键词异地排名查询
  • 想做一个个人网站怎么做白帽优化关键词排名seo
  • 2022年seo还值得做吗广州市网络seo外包
  • 禅城网站建设价格怎么样推广自己的公司
  • 网站正在建设中代码南宁 百度网盘
  • 手机网站建设开什么类型的票营业推广的目标通常是
  • 常州模板建站代理他达那非副作用太强了
  • vps网站打开需要身份验证如何在网上做销售推广
  • 惠州百优做网站小程序熊掌号广州最新疫情最新消息
  • 网站建设板块如何分类百度搜索关键词优化
  • 政府网站建设 托管互联网营销推广
  • html5模板网站优秀的网页设计案例
  • 一起做网站吧网络推广公司官网
  • 大城 网站建设营销策划是做什么
  • 怎么用阿里云服务器做网站网络营销推广培训机构
  • 日本一级a做爰网站微信广告推广如何收费
  • 网站建设与架构男友实验长沙seo推广外包
  • 百度不收录新网站seo关键词快速排名