如何将四核的 3 个内核与 Linux 隔离并将它们专门用于 Halcon?

问题描述

如何将四核的 3 个内核与 Linux 隔离并将它们专门用于 Halcon?

这是我迄今为止尝试过的:

  1. 我通过启动选项将 Linux 配置为仅使用四核 cpu 的核心 0 isolcpu=1,2,3
  2. 我启动了我的多线程 C++ 程序,并让一个线程使用几个 HSystem::SetSystem() 配置 Halcon。这是 halcon 主线程。认情况下,“thread_pool”选项设置为 "true"(但我也尝试过 "false")。而且,这很重要,首先,halcon 主线程的这个运行函数pthread_setaffinity(getpid(),sizeof(set),&set); 调用 cpu_set_t set,为此我添加了带有 cpu_SET(index,&set) 的核心 1、2 和 3。立>
  3. 无论如何,现在具有“最大”模式的 QR 矩阵代码应该在核心 1、2 和 3 上启动多个线程。但它不起作用。它仅在具有几乎 90% cpu 负载的核心 1 上运行,而核心 2 和 3 保持在 0% cpu 负载(见 top -H)。在我看来,Halcon 确实错过了使用所有 3 个内核的神奇选项。

解决方法

您是否 100% 确定这应该并行运行? 您可以尝试使用不同的代码类型 (ECC200)。根据加速部分中的 https://www.mvtec.com/products/halcon/documentation/release-notes-1911-0/,我们确信 ECC200 阅读器是由 HALCON 内部并行化的。如果此阅读器在您的系统上并行运行而 QR 码阅读器没有,我会假设 QR 码阅读器根本没有被 HALCON 并行化。