2.1 自动并行化

如果在多处理器或多核硬件上使用 HALCON,它将自动并行处理图像处理算子。"初始化 HALCON" 一节 介绍了如何初始化 HALCON 以使用这一机制。"自动并行化方法" 一节 介绍了 HALCON 算子自动并行化的不同方法。

2.1.1 初始化 HALCON

为了使并行化机制最佳地适应实际硬件,HALCON 需要对硬件进行一次检查。之后,HALCON 程序将自动实现并行化,无需任何进一步操作。即使是现有的 HALCON 程序,也无需更改即可运行和并行化。

通过调用算子 optimize_aop(更多信息请参阅 HALCON 参考手册中的相应条目)来触发初始检查。请注意,该算子只有在多核或多处理器硬件上调用时才能正常工作;如果在单处理器或单核计算机上调用该算子,则会返回错误消息。作为快捷方式,可以调用位于 %HALCONROOT%\bin\%HALCONARCH% 目录下的可执行文件 hcheck_parallel

在调用 optimize_aop 时,HALCON 会检查每一个原则上可以通过自动并行化加速的算子。每个被检查的算子都会在输入参数值(如图像)不断变化的情况下被处理数次,既有顺序处理,也有并行处理。后者有助于评估算子的输入参数特征(如输入图像的大小)与其并行处理效率之间的相关性。请注意,这项检查可能需要几个小时,这取决于您的计算机和优化参数!

提取的信息存储在通用应用程序数据文件夹(Windows 下)或 HALCON 安装目录 $HALCONROOT (Linux 下)中的 .aop_info 文件中。请注意,在某些操作系统中,要成功初始化 HALCON 需要特殊权限,否则算子 optimize_aop 无法存储提取的信息。请注意,为了以  ! 管理员权限执行命令行工具 ,您需要选择 "以管理员身份运行"(即使您已经以管理员身份登录)。

请参阅 %HALCONEXAMPLES%\hdevelop\System\Parallelization 目录中的示例,了解更多关于 optimize_aop 以及其他允许查询和修改并行化信息的算子的信息。

2.1.2 自动并行化方法

为了实现算子的自动并行化,HALCON 利用了数据并行性,即算子的部分输入数据可以相互独立处理的特性。数据并行性可分为四个级别:

  1. 元组级
    如果算子调用的图标输入参数包含元组(即图像、区域或 XLDs 数组),则可以通过在并行线程上分配元组元素(即单个图像、区域或 XLDs)来实现并行化。这种方法要求所有输入参数都包含相同数量的元组元素(或包含单个图标对象或值)。

  2. 通道级
    如果调用的算子输入图像包含多个通道,则可以通过将通道分配到并行线程来实现并行化。这种方法要求所有输入图像对象包含相同数量的通道或单通道图像。

  3. 域级
    支持这一级别的算子可通过划分其域并将其部分分配给并行线程来实现并行化。

  4. 内部数据级
    只有部分算子被并行化。实际的并行化程度取决于算子的实现。因此,采用这种并行化方法的算子在多核系统上的潜在加速能力各不相同。

参考手册中对 HALCON 算子的描述包含一个名为 "执行信息" 的条目,其中规定了在多核或多处理器硬件上使用 HALCON 时的行为。该条目说明了算子是否会被 HALCON 自动并行化,以及并行化的方法(元组、通道、域、内部数据)。

也可以使用 get_operator_info 确定任意算子 opname 的并行化方法:

  get_operator_info('opname', 'parallel_method', Information)