上位机图像处理和嵌入式模块部署(树莓派4b代码优化)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        我们把程序从pc端port到嵌入式开发板上面,好处是降低了部署成本,代价是牺牲了设备性能。所以等到程序真正在开发板子上面运行起来,并且解决了基本功能和稳定性之后,剩下来的就是程序优化工作。成年人的世界一般不做选择题,通常是既要、又要、还要。所以这个时候,程序代码的优化往往就显得非常重要了。

1、业务流程的优化

        很多做技术的同学往往习惯于技术的优化,忽视了业务层面的优化。比如说,如果客户的业务种类很少、流程不复杂,甚至于部分流程可以合并解决,那么这节省下来的计算资源、网络资源和存储资源,是多少技术方案都没有办法达到的效果。

2、全方位使用开发板资源

        我们写软件,一般习惯于考虑的都是cpu资源、ram资源、存储资源和网络资源。但是soc上面,还有gpu、dsp、mcu、npu等等,如果能把这些资源也用起来,常常有事半功倍的效果。

3、计算改查找

        一般嵌入式开发板的cpu频率都要比pc的低,指令集也采用了更节约资源的risc指令集。所以,在嵌入式开发板上面,能不要做计算就不要做计算,能用查表处理的就用查表处理。甚至于,在条件允许的范围内,把所有可能性都用查表来代替也不是不可以的。

4、用dma代替memcpy

        如果需要拷贝的数据非常多,这个时候最好复用soc提供的dma资源,而不是让cpu去一个一个搬数据,这样效率是非常低的。

5、用cacheable内存访问代替uncacheable内存

        记得以前在做图像的时候,经常混用cacheable内存和uncachebale内存。两者图像算法访问的速度差太多了。相信有过类似经验的同学,肯定会对这条trick印象深刻。

6、合理使用汇编指令

        arm下面有很多的mac指令、浮点指令。所谓的mac指令,主要就是矩阵的计算、浮点的计算,合理使用这些指令,也可以让程序加快运行速度。

7、并发cpu使用

        如果一个算法执行时间很长,那么没有必要全部用1个cpu来执行。我们可以做成pipeline的形式来处理。比如说,一个算法需要执行40ms,那么分成四个thread来跑,一个thread一个cpu。那么虽然算法执行的总时间没有改变,但是算法结果的输出效率提高了4倍。

8、使用ip内部的加速功能

        从名字上面可能不太好理解,但是我们举个例子就明白了。之前做一个网络报文的发送功能,中间有一个crc计算的子程序。一开始我们都是用软件计算的,后来发现eth ip可以自动帮助计算crc。发现这个功能之后,优化了代码,效率一下子增加了很多。

9、合理使用第三方库

        部分posix提供的函数,性能是比较差的,比如jemalloc第三方库就比自带的malloc库好很多。如果业务比较简单,自己写一个固定内存的分配模块,循环分配和使用也是可以的。

10、从上至下,从主要花费时间的模块入手

        从上至下比较好理解,也就是先从业务层,再从模块层,最后从实现层去优化功能。等这些大的部分做好之后,在实现层的角度,我们先找出最浪费时间的地方,比如循环最多的地方、io阻塞的地方、流程忙等的地方等等去入手。这样优化起来效率高,效果也比较明显。

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

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

相关文章

《QT实用小工具·六十》Qt 多列时间轴控件

1、概述 源码放在文章末尾 Qt 多列时间轴控件。 可与多段字符串格式自由转换,也可手动添加列表项。 专门用来以时间轴作为事件线发展顺序的故事大纲。 特点 时间背包功能:记录所有物品或属性发生的变化,随时回溯 时间可输入任意内容&…

改进猫群算法丨多车场多车型路径问题求解复现

车间调度系列文章: 1、路径优化历史文章2、路径优化丨带时间窗和载重约束的CVRPTW问题-改进遗传算法:算例RC1083、路径优化丨带时间窗和载重约束的CVRPTW问题-改进和声搜索算法:算例RC1084、路径优化丨复现论文-网约拼车出行的乘客车辆匹配及…

DeepSeek发布全新开源大模型,GPT-4级别能力 价格仅百分之一

最新国产开源MoE大模型,刚刚亮相就火了。 DeepSeek-V2性能达GPT-4级别,但开源、可免费商用、API价格仅为GPT-4-Turbo的百分之一。 因此一经发布,立马引发不小讨论。 从公布的性能指标来看,DeepSeek-V2的中文综合能力超越一众开源…

嵌入式硬件中PCB走线与过孔的电流承载能力分析

简介 使用FR4敷铜板PCBA上各个器件之间的电气连接是通过其各层敷着的铜箔走线和过孔来实现的。 由于不同产品、不同模块电流大小不同,为实现各个功能,设计人员需要知道所设计的走线和过孔能否承载相应的电流,以实现产品的功能,防止过流时产品烧毁。 文中介绍设计和测试FR4敷…

有了这么多套件,为什么还需要APaaS

文/明道云创始人任向晖 在明道云的业务活动中,比较常见的一个问题是和套件应用的关系。一个有具体应用需求的客户为什么不从市场上购买现成的套件应用,而要选择APaaS来构建呢?反过来说似乎也成立,既然一个平台什么应用都能搭建&a…

《Video Mamba Suite》论文笔记(1)Mamba在时序建模中的作用

原文链接 https://arxiv.org/abs/2403.09626https://arxiv.org/abs/2403.09626 原文代码 https://github.com/OpenGVLab/video-mamba-suitehttps://github.com/OpenGVLab/video-mamba-suite 原文笔记 What 《Video Mamba Suite: State Space Model as a Versatile Altern…

灌溉机器人 状压dp

灌溉机器人 题目描述 农田灌溉是一项十分费体力的农活,特别是大型的农田。小明想为农民伯伯们减轻农作负担,最近在研究一款高科技——灌溉机器人。它可以在远程电脑控制下,给农田里的作物进行灌溉。 现在有一片 N 行 M 列的农田。农田的土…

力扣437. 路径总和 III

Problem: 437. 路径总和 III 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义int类型函数rootSum(root, targetSum),用于求取每一个节点等于目标函数的路径数: 1.1.易知rootSum(root, targetSum)求出的数量等于rootSum(root.left, targetSum - va…

系统如何做好安全加固?

一、Windows系统 Windows系统出厂时,微软为了兼容性,默认并未对系统安全做严格的限制,因此还需要做一些基本的安全加固,方可防止黑客入侵。 1、系统补丁更新 为什么要更新系统补丁?很多人感觉漏洞更新没必要&#x…

软件开发者如何保护自己的知识产权?

最近一个关于开源软件的知识产权纠纷的案例,非常有代表性, 其中涉及到的平台openwrt,一口君十几年前曾玩过, 通过这个案例,我们可以学习如何在今后工作中保护自己的知识产权, 以及如何合理直接或者间接利…

《设计一款蓝牙热敏打印机》

主控芯片用易兆威蓝牙ic,通讯接口:蓝牙、串口、usb 安卓apk用java kotlin编写、上位机用Qt编写。

一文读懂Python的`__init__`,`__init__`方法的终极指南

大家好,今天给大家介绍一个Python中一个特殊的函数__init__。 在Python中,__init__方法是一个特殊的函数,它在创建类的新实例时自动调用。它的作用类似于其他编程语言中的构造函数,用于初始化对象的状态。这篇文章将带你深入了解…

论文复现和点评《基于随机森林模型的个人信用风险评估研究》

作者Toby,来源公众号:Python风控模型,论文复现和点评《基于随机森林模型的个人信用风险评估研究》 最近Toby老师看到一篇论文热度比较高,下载量有665次,论文标题是《基于随机森林模型的 个人信用风险评估研究》 论文篇…

我的256天之创作纪念日

目录 时光 数据的一些变化 开心的事 憧憬 时光 自上次CSDN的消息推送,又一个128天过去了,整天的工作和生活都在忙忙碌碌中度过,每到能静下来片刻,都倍感珍惜。因为一些原因,能够陪伴家人的时间越来越少&#xff…

助贷客户管理系统:助力助贷公司轻松实现30%增长目标!

为了解决传统助贷公司在业务过程中遇到的痛点,盛鑫优创科技特别设计了一款定制化的解决方案——"鑫鹿助贷客户管理系统",以满足助贷行业的独特需求: 传统助贷公司的老板们在做业务的的过程中都有这些痛点: 1、没有一个…

STM32F4xx开发学习_SysTick

SysTick系统定时器 SysTick属于CM4内核外设,有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现,可用于操作系统,提供必要的时钟节拍 SysTick简介 SysTick是一个 24 位向下定时器,属于CM4内核中的一个外设,…

OpenCV 入门(四)—— 车牌号识别

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…

并发控制互斥笔记

整理总结自蒋炎岩老师的b站课程,https://jyywiki.cn/OS/2022/index.html 多处理器系统中数据的一致性和互斥访问 所有的CPU的一级缓存都是连着的,如果是多个CPU的话,用在内存中放置标志位,来保证对当前内容的原子性读取&#xff0…

跟TED演讲学英文:4 pillars of college success in science by Freeman Hrabowski

4 pillars of college success in science Link: https://www.ted.com/talks/freeman_hrabowski_4_pillars_of_college_success_in_science Speaker: Freeman Hrabowski Date: February 2013 文章目录 4 pillars of college success in scienceIntroductionVocabularyTranscr…

嵌入式学习——C语言基础——day15

1. 段错误调试 1.1 打印法 在可能出现错误的位置加入打印,前一句能够打印出来,后一句打印不出来,问题就可以定位到两次打印中间的代码 1.2 gbd调试法 1. 编译代码时加入-g选项 gcc filename.c -g 2. 使用gdb调试生成的代码 gdb a.out 3. gdb调试命令 l 查看…