关于实现Halcon算法加速的基础知识(1)(多核并行/GPU)

简介: 关于实现Halcon算法加速的基础知识(多核并行/GPU)

一、提高Halcon的运算速度,有以下几种方法:


1、Multithreading(多线程)


2、Automatic Parallelization(自动操作并行化)


3、Compute devices,利用GPU提速,如果显卡性能好,至少可以提高5~10倍的运算速度


image.png




二、多线程


1、官方自带的例程get_operator_info.hdev,可以查看支持多线程的算子;


* Determine the multithreading information

get_multithreading_operators (TypeExclusive, TypeMutual, TypeReentrant, TypeIndependent)

* 自定义函数展开之后,有get_operator_info算子

* get names of all operators of the library

get_operator_name ('', OperatorNames)

get_operator_info (OperatorNames[Index], 'parallelization', Information)

2、官方的手册


C:\Program Files\MVTec\HALCON-19.11-Progress\doc\pdf\manuals\programmers_guide.pdf


Chapter 2 Parallel Programming and HALCON


C:\Program Files\MVTec\HALCON-19.11-Progress\doc\pdf\reference\reference_hdevelop.pdf


Chapter 25 System --- 25.6 Multithreading




三、多核并行


看看官方的说明,关于HALCON-多核性能:


1、算子自动并行化(AOP)


Automatic Operator Parallelization (AOP)


多核和多处理器的计算机显著提升了计算机视觉系统的速度。八年多以来,HALCON提供了通过工业验证的算子并行化,能很好地支持这种速度的提升。当然,并不是全部的视觉操作都能受益于并行化这种方式。因此,HALCON的智能算法可以确定是否需要用并行化方式——会考虑到具体的算法,算法的输入值和硬件条件。


并行HALCON在多核计算机上会自动将数据,比如图像数据分配给多个线程,每一个线程对应一个内核。用户甚至不需要改动已有的HALCON程序来就能使用自动划分功能,从而立即获得显著的速度提升。


2、并行编程


HALCON支持并行编程,如多线程的程序。它不仅仅是线程安全的而且可多次调用。因此多个线程可在同一时刻同时调用HALCON算子。利用这种特性,用户可以将一个机器视觉应用软件分解成多个独立的部分,让它们在不同的处理器上并行运行。


在一个四核的计算机上运行算子,HALCON会自动将图像分为四部分,由四个线程并行处理。


在一个包含两个Quad-Core Intel Xeon E5345,2.33 GHz在内的计算机上使用median_image算子(13×13的模板)对1280×1024的图像进行滤波操作时,根据使用CPU核的数量的不同,加速因子分别为*1/1.96/2.90/3.79/4.51/5.48/6.34/6.93。注意:可以达到的最高加速因子与所用的HALCON算子和图像大小有关。


3、AOP默认是激活的


(1)Halcon一方面提供自动操作员并行化(AOP)和手动并行化的手段。另一方面,对应用程序部分进行编程。自动操作员并行化(AOP)将输入数据(例如图像)分割成多个部分并进行处理数据部分独立且并行。这也称为数据并行化。

默认情况下,AOP是激活的,即这种类型的并行化是自动完成的,在许多情况下您不会至少对于单个操作员而言,必须关心进一步的数据并行化。有关AOP的详细信息,请参见programmers_guide.pdf,第2.1节。


来自官方例程query_system_parameters.hdev

* Parallelization

get_system ('processor_num', ProcessorNum)

get_system ('thread_pool', ThreadPool)

get_system ('thread_num', ThreadNum)

*Automatic Operator Parallelization,默认值是true

get_system ('parallelize_operators', AOP)

*这个修饰符用于把函数定义为可重入函数,默认值是true;所谓可重入函数就是允许被递归调用的函数

get_system ('reentrant', Reentrant)

*故意关掉测试性能

*set_system('parallelize_operators','false')

(2)Halcon还提供了optimize_aop算子,用于优化aop,提高性能。


默认情况下(即不使用optimize_aop算子),Halcon使用AOP的最大可用线程数,最多使用处理器数量。但是,根据传递给运算符的数据大小和参数集,最大线程数上的并行化可能会过度且效率低下。 optimize_aop根据线程号优化AOP,并针对HALCON运算符的并行处理检查给定的硬件。这样,它将检查每个运算符,可以通过在tuple元组,channel通道或domain level域级别(不考虑the partial level部分级别)上的自动并行化来加快操作速度。每个检查的运算符都将执行几次(依次和并行),并带有一组不断变化的输入参数值/图像。后者有助于评估操作员的输入参数特征(例如,输入图像的大小)与其并行处理效率之间的依赖性。根据操作员参数的设置,这可能要花费几个小时。对于正确的优化,至关重要的是不要在计算机上同时运行任何其他计算密集型应用程序,因为这会严重影响硬件检查的时间测量,从而导致错误的结果。


详情参见官方例程optimize_aop.hdev


4、查看支持AOP的算子


自动并行化方法,为了实现运算符的自动并行化,HALCON利用数据并行性,即操作员的输入数据可以彼此独立地进行处理。数据并行性可以在四个位置找到。官方自带的例程get_operator_info.hdev,可以查看;


(1)tuple level      (2)channel level      (3)domain level      (4)internal data level


* Determine the parallelization method of all parallelized operators

get_parallel_method_operators (SplitTuple, SplitChannel, SplitDomain, SplitPartial, None)

AutoParallel := [SplitTuple,SplitChannel,SplitDomain,SplitPartial]

AutoParallel := uniq(sort(AutoParallel))

* 自定义函数展开之后,有get_operator_info算子

* get names of all operators of the library

get_operator_name ('', OperatorNames)

get_operator_info (OperatorNames[Index], 'parallel_method', Information)

5、如果程序员不想使用AOP,而是自己实现并行化,那较为复杂,需要使用多线程技术,把图像进行拆分处理,最后再合并。因此需要更多专业知识,详情参见官方例程simulate_aop.hdev和官方说明书parallel_programming.pdf。


*set_system('parallelize_operators','false')

6、官方的手册


C:\Program Files\MVTec\HALCON-19.11-Progress\doc\pdf\manuals\programmers_guide.pdf


Chapter 2 Parallel Programming and HALCON


C:\Program Files\MVTec\HALCON-19.11-Progress\doc\pdf\reference\reference_hdevelop.pdf


Chapter 25 System --- 25.8 Parallelization

C:\Program Files\MVTec\HALCON-19.11-Progress\doc\pdf\manuals\parallel_programming.pdf


 


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
6月前
|
并行计算 TensorFlow 调度
推荐场景GPU优化的探索与实践:CUDA Graph与多流并行的比较与分析
RTP 系统(即 Rank Service),是一个面向搜索和推荐的 ranking 需求,支持多种模型的在线 inference 服务,是阿里智能引擎团队沉淀多年的技术产品。今年,团队在推荐场景的GPU性能优化上又做了新尝试——在RTP上集成了Multi Stream,改变了TensorFlow的单流机制,让多流的执行并行,作为增加GPU并行度的另一种选择。本文详细介绍与比较了CUDA Graph与多流并行这两个方案,以及团队的实践成果与心得。
|
4月前
|
并行计算 API 数据处理
GPU(图形处理单元)因其强大的并行计算能力而备受关注。与传统的CPU相比,GPU在处理大规模数据密集型任务时具有显著的优势。
GPU(图形处理单元)因其强大的并行计算能力而备受关注。与传统的CPU相比,GPU在处理大规模数据密集型任务时具有显著的优势。
|
4月前
|
机器学习/深度学习 人工智能 分布式计算
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
机器学习中的超参数调优是提升模型性能的关键步骤,包括网格搜索、随机搜索、贝叶斯优化和遗传算法等方法。网格搜索通过穷举所有可能的超参数组合找到最优,但计算成本高;随机搜索则在预设范围内随机采样,降低计算成本;贝叶斯优化使用代理模型智能选择超参数,效率高且适应性强;遗传算法模拟生物进化,全局搜索能力强。此外,还有多目标优化、异步并行优化等高级技术,以及Hyperopt、Optuna等优化库来提升调优效率。实践中,应结合模型类型、数据规模和计算资源选择合适的调优策略。
180 0
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
|
6月前
|
机器学习/深度学习 文字识别 算法
[Halcon&图像] 缺陷检测的一些思路、常规检测算法
[Halcon&图像] 缺陷检测的一些思路、常规检测算法
1987 1
|
6月前
|
机器学习/深度学习 并行计算 PyTorch
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
本文介绍了PyTorch中利用多GPU进行深度学习的三种策略:数据并行、模型并行和两者结合。通过`DataParallel`实现数据拆分、模型不拆分,将数据批次在不同GPU上处理;数据不拆分、模型拆分则将模型组件分配到不同GPU,适用于复杂模型;数据和模型都拆分,适合大型模型,使用`DistributedDataParallel`结合`torch.distributed`进行分布式训练。代码示例展示了如何在实践中应用这些策略。
1819 2
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
|
6月前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
89 0
|
6月前
|
算法
[Halcon&拟合] 边缘拟合算法拓展
[Halcon&拟合] 边缘拟合算法拓展
159 1
|
6月前
|
算法 数据挖掘
[Halcon&图像] 阈值分割算法拓展
[Halcon&图像] 阈值分割算法拓展
134 1
|
6月前
|
人工智能 并行计算 API
极智AI | 谈谈GPU并行推理的几个方式
大家好,我是极智视界,本文主要聊一下 GPU 并行推理的几个方式。
435 0

热门文章

最新文章

下一篇
无影云桌面