设为首页收藏本站
授权版本:2024_07
开启左侧

Halcon多线程耗时问题求助

[复制链接]
Kristopher 发表于 2023-9-6 16:59:07 | 显示全部楼层 |阅读模式
为什么多线程没有节省时间,而且程序耗时与子线程貌似呈倍数关系
微信图片_20230906160448.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
绝地武士 发表于 2023-9-6 17:07:36 | 显示全部楼层
HDevelop里面多线程是基于脚本解释的,是要cpu核心重新划分执行,需要单独启动准备和释放时间;
里面的单个算子执行时间并不能够有效说明在复杂处理时候时长效果,这里你加了断点会调试解析执行影响时间 。
而单一解释执行都是一个核心不切换任务地执行,所以出现了单线程效率优于多线程。

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| Kristopher 发表于 2023-9-6 17:16:53 | 显示全部楼层
绝地武士 发表于 2023-9-6 17:07
HDevelop里面多线程是基于脚本解释的,是要cpu核心重新划分执行,需要单独启动准备和释放时间;
里面的单个 ...

大佬您好。
首先在HDevelop里面我是在多线程运行前打了断点,但是后面运行时是F5连续运行的。
其次我把程序导出到C#内,连续运行没有中断,表象是一样的,而且就算是使用C#开子线程的方法替换掉halcon子线程方法,结果也是一样的。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
绝地武士 发表于 2023-9-6 17:37:12 | 显示全部楼层
Kristopher 发表于 2023-9-6 17:16
大佬您好。
首先在HDevelop里面我是在多线程运行前打了断点,但是后面运行时是F5连续运行的。
其次我把程 ...

只要有断点,不分在脚本所在的位置,都会按照调试数据并按调试模式运行处理。(运行快一些可以启用JIT)
如果你想用多线程,建议使用C#自带的Thread进行运行测试看看(不用导出这种启用线程方式)。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
liumachao 发表于 2023-9-6 19:47:35 | 显示全部楼层
新手膜拜大佬
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
halcon2016 发表于 2023-9-7 11:21:14 | 显示全部楼层
你这里单线程是一个任务,多线程执行了两个任务,我觉得应该是单线程执行两个任务,多线程执行两个任务,再比较两个的时间,如图,s1的时间明显大于s,即多线程效率还是要高一些
截图00.png

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
innerone82 发表于 2023-9-14 16:51:13 | 显示全部楼层
之前试过,将一张图单线程执行,和把图平均切割成多块多线程执行,效率反而边慢了。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
freekun139com 发表于 2023-9-14 22:29:49 | 显示全部楼层
感觉与线程执行的任务有关系,如果任务较多,多线程效率还是要高一点;如果任务比较少,可能线程切换占用就起来了

测试函数1:TestFunction
for I := 1 to 1000 by 1
    gen_empty_obj (Lines)
    reduce_domain (GrayImage, ROI, ImageReduced)
    crop_domain (ImageReduced, ImagePart)
    lines_gauss (ImagePart, Lines, 1.5, 3, 8, 'dark', 'true', 'gaussian', 'true')
endfor

测试函数2:TestFunction2
for I := 1 to 1000 by 1
    gen_empty_obj (Lines)
    lines_gauss (Image, Lines, 1.5, 3, 8, 'dark', 'true', 'gaussian', 'true')
endfor
多线程测试.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表