diff --git a/AlgorithmModule/include/Define_Base.h b/AlgorithmModule/include/Define_Base.h index 4531050..23aa481 100644 --- a/AlgorithmModule/include/Define_Base.h +++ b/AlgorithmModule/include/Define_Base.h @@ -13,7 +13,13 @@ // 检测分析线程类数目 #define IMGCHECKANALYSISY_NUM 2 - +// 检测线程绑定的 CPU 核带(核带下沉到库内部,调用方传入的 nCpu_start_Idx / nCpu_num 不再生效) +// 分配规则:第 k 个检测线程绑定 核 = CHECK_CPU_BAND_START + (k % CHECK_CPU_BAND_NUM) +// 当前 24-27 = NUMA node1 的物理核 8-11(逻辑核同物理核映射:c 与 c+16 为超线程兄弟) +// 与 BOE_ZB_BACKPLATE(16-19 / node0)零重叠,两进程并行时互不干扰 +// 注意:CHECK_CPU_BAND_NUM 必须 >= 相机数 * IMGCHECKANALYSISY_NUM,否则取模回绕会导致两个检测线程绑同一核 +#define CHECK_CPU_BAND_START 24 +#define CHECK_CPU_BAND_NUM 8 // 相机ID 的相关定义 enum Camera_IDX diff --git a/AlgorithmModule/src/CameraCheckAnalysisy.cpp b/AlgorithmModule/src/CameraCheckAnalysisy.cpp index 31427c1..d261fac 100644 --- a/AlgorithmModule/src/CameraCheckAnalysisy.cpp +++ b/AlgorithmModule/src/CameraCheckAnalysisy.cpp @@ -684,9 +684,9 @@ int CameraCheckAnalysisy::InitCheckAnalysisy() RunInfoST RunConfig; RunConfig.nThreadIdx = i; { - int range = (m_RunConfig.nCpu_num > 0) ? m_RunConfig.nCpu_num : 1; - int offset = s_cpuOffset.fetch_add(1) % range; - RunConfig.nCpu_start_Idx = m_RunConfig.nCpu_start_Idx + offset; + // 核带下沉到库内部:不再依赖调用方传入的 nCpu_start_Idx / nCpu_num + int offset = s_cpuOffset.fetch_add(1) % CHECK_CPU_BAND_NUM; + RunConfig.nCpu_start_Idx = CHECK_CPU_BAND_START + offset; } RunConfig.nCpu_num = 1; diff --git a/example/deal.cpp b/example/deal.cpp index 8139592..2597765 100644 --- a/example/deal.cpp +++ b/example/deal.cpp @@ -1465,6 +1465,8 @@ int deal::InitCPUIDX() start += READ_IMG_THREAD_NUM; m_CPUInfo[THREAD_CPU_Main_saveImg].set(start, Save_IMG_THREAD_NUM); start += Save_IMG_THREAD_NUM; + // 注意:检测线程的核带已下沉到库内部(AlgorithmModule/include/Define_Base.h 的 + // CHECK_CPU_BAND_START / CHECK_CPU_BAND_NUM = 24 / 8),下面这项仅为兼容赋值,不再影响检测线程绑核。 m_CPUInfo[THREAD_CPU_CheckSo].set(start, 15); return 0; }