【opencv基础】代码优化加速相关
1. 浮点数据定点化;

cv::Mat tmp1 = values * 1000000; tmp1.convertTo(tmp1, CV_32SC1); cv::Mat tmp2 = this->weights * 1000000; tmp2.convertTo(tmp2, CV_32SC1); cv::Mat tmp(tmp1.rows, tmp2.cols, CV_64FC1); tmp = tmp1 * tmp2 / 1000000000000.0f; tmp.convertTo(tmp, CV_32FC1);
opencv中cv::Mat数据矩阵乘法,需要各个数据的类型是一样的,且需要注意数据溢出问题,以及矩阵乘法支持Mat矩阵的数据类型(type)只能是 CV_32FC1、 CV_64FC1、 CV_32FC2、 CV_64FC2 这4种类型中的其中一种。定点化一般指的是两个浮点数据转换为整形数据相乘,这样才能加速,而我们的转换过程矩阵乘法一直都是浮点数据相乘,所以对加速没用,甚至会增加额外的转换过程的耗时。
2. 使用eigen库运算;
3. 使用加速优化的编译选项;
使用浮点运算;使用neon;可以使用不同的架构选项、ARM选项等等;
QMAKE_CXXFLAGS += -march=armv8 -mfloat-abi=hard -mfpu=vfpv4-d16 -mfpu=neon
4. 使用多线程;
注意互斥锁和信号量;
5. 使用多核并行编程;
openmp
6. 充分利用硬件的最高性能
为了充分释放所有核心的计算能力,我们将所有的CPU都配置为可用的最高时钟,这时候请务必使用良好的散热器件为处理器降温。
利用高性能的大核快速完成运算,低性能小核则提供优化的功耗表现。
root@apalis-imx8:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
root@apalis-imx8:~# echo performance > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor
root@apalis-imx8:~# echo performance > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor
这里总共有 CPU 0 到 CPU 5,其中 CPU 0~CPU 3 为 Cortex-A53,CPU 4~CPU 5 为 Cortex-A72。
在 4 个 A53 同时运行: root@apalis-imx8:~# taskset 0x0f time ./smallpt 100
在 2 个 A72 同时运行:root@apalis-imx8:~# taskset 0x30 time ./smallpt 100
在 4 个 A53 和 2 个 A72 同时运行:root@apalis-imx8:~# taskset 0x3f time ./smallpt 100
0x30 表示允许使用两个 A72 核心,0x10 表示只使用一个 A72,同样 0x01 表示只使用一个 A53,而 0x3F 则
表示使用所有的处理器核心。需要注意的是,这里是指用 taskset 工具指定某一个程序所使用的处理器核心,不被
指定的处理器核心仍处于工作状态,只是不用其来运行该程序。因此 taskset 并不能启到关闭处理器核心的功能。
表示使用所有的处理器核心。需要注意的是,这里是指用 taskset 工具指定某一个程序所使用的处理器核心,不被
指定的处理器核心仍处于工作状态,只是不用其来运行该程序。因此 taskset 并不能启到关闭处理器核心的功能。
Taskset 通过设置 CPU 掩码来选择 CPU。我们可以用 cpufreq-info 命令查看所有可用的 CPU。
使用taskset方法可以进行加速;
加速之后一个循环体大概需要19-38ms;
7.
参考
1. eigen;
2. GNU_GCC;
3. openmp_MSDN;
5. openmp_org;
完
各美其美,美美与共,不和他人作比较,不对他人有期待,不批判他人,不钻牛角尖。
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2019-06-11 [c++]C++关键字之friend