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倍

4.openMP

SIMD是在一个cpu核上

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

#include <omp.h>
#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值