Q
HALCONでパラレル処理(並列処理)を行うにはどうすればよいでしょうか?
A
1. HALCON 9.0バージョンより、デフォルトでパラレル処理が適用されるようになりました。したがって、特に設定を変更することなくそのままパラレル化を適用することができます。
※HALCON 8.0以前のバージョンをお使いの場合には、パラレル化の適用にはコンパイルする際に「parhalconcpp.dll」にリンクを設定する必要がありますのでご注意ください。(通常では「halconcpp.dll」になります。)
2. HALCONのパラレル化には2種類の考え方があります。HALCONが行う自動パラレル化と自分でスレッドを起こす方法です。自動パラレル化については上記1の設定以外には特に行う設定はありません。HALCONが自動的にパラレル処理を適用し、結果をマージして返してくれます。
3. HALCONが行う自動パラレル化には3つのタイプがあります。
Domainレベル → 1枚の画像を分割してそれぞれのCPUで処理します。
Channelレベル → 複数枚の画像をそれぞれのCPUで処理します。
Tupleレベル → 入力変数が複数の場合にそれぞれのCPUで処理します。
それぞれのオペレーターで適用できるレベルが異なります。どのレベルが適用可能かは、各オペレーターのオンラインヘルプで確認できます。 パラレル化のオーバーヘッドがあるため、常に処理が高速化されるわけでは無いことに注意してください。
4. 独自でスレッドを発生させる場合は、まずオペレーター set_system の 'parallelize_operators' を 'false' にし、HALCONの自動パラレル化を無効にします。この設定のみで、あとは自由にHALCONのオペレーターを各スレッドで使用することができます。ただし、表示系の処理(ウインドウや画像・結果表示など)は全てメインスレッドで行う必要があることに注意してください。
※HALCON8.0で自動パラレル化を行う場合には、オペレーター check_par_hw_potential を適用するパソコンで1回だけ実行してください。これによりハードウエアのチェックを行い、パラレル処理を最適化することができます。
※HALCON9.0以降は必要ありません。
関連オペレーター
set_system
check_par_hw_potential