算法加速篇(一)------OPENMP并行加速及PCL直通滤波和求法向量加速

2 篇文章 0 订阅
1 篇文章 0 订阅

系列文章目录

巧了,第一篇,目前什么都没有



前言

毕竟成为了高贵的算法工程师,还是要对代码稍微有点要求。其实目前很多东西还在复制粘贴阶段,这就是传说中的CV工程师吧,爱了爱了。

一、OPENMP并行加速

最近在做一个三维的检测项目,算法开发完发现速度还是有些慢。本来就是调用PCL和OPENCV做的,简单看起来没什么加速的内容了。
然后就发现了openMP这个还不错的东西,目前使用的功能很简单,就是在for循环之前加指令让for循环并行。步骤如下:

1.开启openMP

主要介绍在VS中和Cmake中开启
Visual Studio:
不想描述在项目上右键然后在c/c++中语言选项开启OpenMP支持即可
Cmake:
还是不想描述添加上述语句即可,测试以后发现还是在Cmake里加运行更快,无法证实且不明原因,就留下这个疑似谣言吧。

2.指令及注意事项

  int number_Porcs = omp_get_num_procs();
  cout << "procs:" << number_Porcs << endl;
#pragma omp parallel for num_threads(8)
  for (int i = 0; i < Box_list.size(); i++) {
    FasteningRes fasteningRes_temp;
    //单个扣件检测算法
    DetectionElasticBar(img_input, Box_list[i].box, Box_list[i].isleft, class_n_, image_path, fasteningRes_temp);
    //添加单个扣件检测结果到结果队列
    res[i] = fasteningRes_temp;
  }

#progma那条就是并行指令了,可以指定线程数,omp_get_num_procs()可以获取你电脑有几个线程。
其实还是有蛮多指令的,但我感觉精髓就是这个。
然后使用起来需要保证for循环内的结构块互不干扰,比如我的FasteningRes就在for内声明,要是在外部声明就是被共用了,会有问题。
然后最后本来是要用push_back()加到vector里,但OpenMP不能用pushback,所以我在之前加了个循环,先pushback进去,在在这边当数组用就可以了。

二、PCL直通滤波与法向量加速

1.直通滤波

有个震惊的发现,通过passthrough进行直通滤波居然比直接for循环滤波还慢大约6倍以上。以下为简单的时间对比,希望对大家有帮助:
在这里插入图片描述在这里插入图片描述我都不想看了,嘛回事儿?

2.法向量计算

在这里插入图片描述当然,实测没差这么多,就差一倍。懒得细写,就这样喽。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值