halcon算子并行和串行计算

2021-06-24  本文已影响0人  1037号森林里一段干木头

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


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

2.示例:

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();
}
上一篇 下一篇

猜你喜欢

热点阅读