美文网首页
halcon算子并行和串行计算

halcon算子并行和串行计算

作者: 1037号森林里一段干木头 | 来源:发表于2021-06-24 17:08 被阅读0次

简介:halcon很多算子默认都是并行计算的,当你的软件也开了多线程,在算子级别用多线程计算那就没有什么加速效果,甚至还会有负面的影响。比如:你的程序为了更好的利用CPU计算资源,开了多线程,CPU整体利用率达到70-90%,现在再用halcon算子的并行计算方式的话,CPU占用率可能就会到100%,如果有其他应用在进行的话,其他应用就相当于“卡”住了。另外线程不是越多越好,开线程也有一定的开销,线程超过某一点后可能也会得不偿失。
示例一个关闭基于形状的模板匹配的并行计算过程。


1.halcon串、并行计算设置接口

  • HalconCpp::setSystem,详细内容可参考halcon参考文档,写得很详细。


    image.png
  • 算子串、并行计算开关
    里面也说了什么情况下关闭并行计算是合适的,以及关闭哪一个步骤的并行计算。


    image.png

2.示例:

  • 基于形状的模板匹配默认是并行计算的


    基于形状的模板匹配.png
  • 主要过程代码

void speedTest()
{
    HalconCpp::HImage img, temp;
    HalconCpp::ReadImage(&img, "G:\\imageData\\src_temp4.png");
    HalconCpp::ReadImage(&temp, "G:\\imageData\\src_temp.png");

    HalconCpp::HTuple model;

    printf("create model\n");
    createModel(temp, 10, model);

    printf("find template\n");
    clock_t start_time = clock();//记录起始时间
    for (int i = 0; i < 3000; i++)  findTemplate(img, model, 10);
    clock_t end_time = clock();//记录结束时间
    auto run_time = double(1000 * (end_time - start_time)) / CLOCKS_PER_SEC;//单位为毫秒
    std::cout << "run time: " << run_time << "ms\n";

}

void setParalize(bool flag=true)
{
    //这里的HalconCpp::SetSystem设置对于halcon是全局的,
    //当设置"parallelize_operators",为"false"时
    //所有默认并行计算的算子都会变成串行计算。
    if (flag == false)
    {
        HalconCpp::SetSystem("parallelize_operators", "false");
    }
    else if (flag == true)
    {
        HalconCpp::SetSystem("parallelize_operators", "true");
    }
    else
    {
        HalconCpp::SetSystem("parallelize_operators", "true");
    }
}

int main()
{
    speedTest();
    setParalize(false);
    speedTest();
    setParalize(true);
    speedTest();
}
  • 运行结果


    CPU.png

    对于基于形状的模板匹配,从CPU占用和运行时间来看,并行计算CPU整体占用能到70%,串行的话只有13%,运行时间:并行7192ms,串行:25012ms。
    CPU占用:并行是串行的5倍左右,
    运行时间:并行的只有串行的29%。
    用SetSystem设置的关闭并行计算,开启并行计算都是ok的。

相关文章

  • halcon算子并行和串行计算

    简介:halcon很多算子默认都是并行计算的,当你的软件也开了多线程,在算子级别用多线程计算那就没有什么加速效果,...

  • 指北 | 谈谈ForkJoin框架的设计与实现

    在了解Fork-Join之前,我们得先了解什么是并行计算。 并行计算 相对于串行计算,并行计算可以划分成时间并行和...

  • 深入理解MapReduce原理

    摘要:我们在《从串行到并行,从并行到分布式》中,对串行、并行、并发和分布式进行了区分,并引出了分布式计算框架Map...

  • 并行计算

    定义 串行计算 并行计算 并行计算就是多条指令或者多条数据被同时执行,通过并行执行,提高程序执行效能 原因 为什么...

  • 2.3 构造函数与Halcon算子

    Halcon/C++提供了构造函数,主要基于适合的Halcon算子。比如说HImage和HBarCode基于rea...

  • 高速串行简史(二):并行通信之系统同步方式

    要了解并行信号和串行信号,我们还是来先了解下并行通信(传输)和串行通信(传输)的概念吧。并行信号就是以并行方式通信...

  • 51单片机---串口通信

    计算机与外界的信息交换称为通信。通信的基本方式可分为并行通信和串行通信两种。 串行通讯基础知识 串行通信是指 : ...

  • 【iOS出租屋进阶】之多线程GCD详解

    线程、任务和队列的概念 异步、同步 & 并行、串行的特点 组合 |并行队列|串行队列 |主队列----|----|...

  • 2018-01-08课后总结

    今天学习了串口通信。串口通信分为串行通信和并行通信,综合串行和并行的优缺点,在工业分布中串行通信的应用更为广泛。了...

  • 关于多线程GCD 串行/并行、同步/异步

    一、GCD串行/并行队列创建 串行队列: 并行队列: 二、GCD串行/并行队列同步/异步执行 执行内容1: 执行结...

网友评论

      本文标题:halcon算子并行和串行计算

      本文链接:https://www.haomeiwen.com/subject/kdbirltx.html