2.1.2 任务并行化

任务并行化意味着,例如,在同一图像上,不同的任务在不同的线程中执行(见 图 2.3 )。

图 2.3:利用任务并行化最小化响应时间。在同一图像上,并行处理了三个任务: QR码读取、ECC 200 读取和条形码读取。

HDevelop 示例程序 hdevelop/Control/par_start.hdev 可以并行读取条形码和不同类型的数据码。

在创建和训练条形码和数据码模型后,每个读取任务都会在单独的线程中使用 par_start 限定符调用相应的函数:读取条形码的函数、读取 ECC 200 码的函数和读取 QR 码的函数。算子 par_join 会等待所有子线程结束,然后再将各个线程的结果用于进一步处理(如显示结果)。

par_start<ThreadQRCode> : find_qr_codes (Image, QrCodeXlds, QrCodeModel, \
                                         QrCodeHandlesSeq, \
                                         QrCodeStringsSeq)
par_start<ThreadECC200> : find_ecc200_codes (Image, Ecc200Xlds, Ecc200Model, \
                                             Ecc200Handles, Ecc200Strings)
par_start<ThreadBarcode> : find_bar_codes (Image, BarCodeRegions, \
                                           BarCodeModel, BarCodeStrings)
par_join ([ThreadQRCode,ThreadECC200,ThreadBarcode])
dev_display (QrCodeXlds)
dev_display (Ecc200Xlds)
dev_display (BarCodeRegions)

需要注意的是,示例程序不仅展示了如何并行化三个识别任务,还提示了并行化哪类任务是合理的。此外,通过比较并行化函数调用和相应的顺序应用函数调用所需的运行时间,也证明了并行化的加速效果。