diff --git a/AlgorithmModule/include/Define_Base.h b/AlgorithmModule/include/Define_Base.h index 4531050..0aa55e8 100644 --- a/AlgorithmModule/include/Define_Base.h +++ b/AlgorithmModule/include/Define_Base.h @@ -13,7 +13,12 @@ // 检测分析线程类数目 #define IMGCHECKANALYSISY_NUM 2 - +// 检测线程绑定的 CPU 核带(核带下沉到库内部,调用方传入的 nCpu_start_Idx / nCpu_num 不再生效) +// 分配规则:第 k 个检测线程绑定 核 = CHECK_CPU_BAND_START + (k % CHECK_CPU_BAND_NUM) +// 当前 4 个检测线程落在 15,16,17,18(逻辑核 c 与 c+16 为超线程兄弟,故物理核为 15,0,1,2) +// 注意:CHECK_CPU_BAND_NUM 必须 >= 相机数 * IMGCHECKANALYSISY_NUM,否则取模回绕会导致两个检测线程绑同一核 +#define CHECK_CPU_BAND_START 15 +#define CHECK_CPU_BAND_NUM 8 // 相机ID 的相关定义 enum Camera_IDX diff --git a/AlgorithmModule/src/CameraCheckAnalysisy.cpp b/AlgorithmModule/src/CameraCheckAnalysisy.cpp index 131cebd..2e6a7e6 100644 --- a/AlgorithmModule/src/CameraCheckAnalysisy.cpp +++ b/AlgorithmModule/src/CameraCheckAnalysisy.cpp @@ -683,9 +683,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 abaabc5..7ba1ee9 100644 --- a/example/deal.cpp +++ b/example/deal.cpp @@ -1497,6 +1497,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),下面这项仅为兼容赋值,不再影响检测线程绑核。 m_CPUInfo[THREAD_CPU_CheckSo].set(start, 15); return 0; }