栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++基础10:并行加速与OpenCV数据结构

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++基础10:并行加速与OpenCV数据结构

目录

一.程序加速

1.编程基本原则

2.代码优化策略

3.SIMD

4.openMP

二.避免内存拷贝(OpenCV)

1.什么是图像

2.Mat

3.Step

4.ROI


一.程序加速

1.编程基本原则

短、简洁、有效率

2.代码优化策略

        a)选择合适的算法(算法复杂度)

        b)代码简洁简单(易读)

        c)高效的内存读写(地址相连效率高)

        d)避免内存拷贝(代码会变得更加复杂)(指针)

        e)循环里面或者执行很多次不要加printf(),cout,会阻塞程序执行

        f)查表法(计算机擅长整数的加法乘法)(三角函数精度要求不高用查表法)

        g)SIMD, OpenMP

3.SIMD

一个指令处理多个数据

两个向量相加,将几个元素一起装在到寄存器里面去,一个指令一次加完,上面提速4倍

  • OpenCV: Universal intrinsics
  • 使用OpenCV中的universal intrinsics为算法提速(1)(2)(3)
    • 使用OpenCV中的universal intrinsics为算法提速 (1)
    • 使用OpenCV中的universal intrinsics为算法提速 (2)
    • 使用OpenCV中的universal intrinsics为算法提速 (3)

4.openMP

SIMD是在一个cpu核上

openMP将任务分给不同cpu核去运行

#include 
#pragma omp parallel for
for (size_t i = 0; i < n; i++)
{
   c[i] = a[i] + b[i];
}

二.避免内存拷贝(OpenCV)

1.什么是图像

2.Mat

Refcount,OpenCV申请内存时多申请4个字节,记录这块内存被多少头引用

头释放Refcount-1,减到0,将数据mat释放

3.Step

4行3列矩阵

每一行3个字节

可以申请3,4,8个字节

如果是8的话可以做内存对齐,做SIMD时比较方便

4.ROI

  • Mat A
    • rows=100
    • cols=100
    • step=100
    • data=0xABCDEF00
  • Mat B
    • rows=100
    • cols=100
    • step=100
    • data=0xABCDEF00
  • Mat C
    • rows=30
    • cols=28
    • step=100  第二行=第一行+step(偏移100个地址)加29次到30行
    • data=0xABCE0698

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号