Windows C++控制台程序Win11下仅用Efficient-cores,如何启用Performance-cores?
解决Windows 11下12代酷睿处理器P核闲置问题的方案
一、API层面的核心绑定调整
12代酷睿的混合架构(P核+E核)在Windows 11下的处理器分组、核心标识逻辑有变化,需通过API动态识别核心类型并调整线程亲和性:
1. 检测混合架构CPU
先通过IsProcessorFeaturePresent判断当前CPU是否为混合架构:
if (IsProcessorFeaturePresent(PF_GPP_HYBRID_CPU)) { // 处理混合架构逻辑 }
2. 识别性能核(P核)的亲和性掩码
调用GetLogicalProcessorInformationEx遍历所有核心,筛选出标记为PROCESSOR_CORE_FLAG_PERFORMANCE_CORE的核心,获取其分组和亲和性掩码:
#include <windows.h> #include <vector> bool GetPerformanceCoreGroupAffinity(GROUP_AFFINITY* pGroupAffinity) { if (!IsProcessorFeaturePresent(PF_GPP_HYBRID_CPU)) return false; DWORD bufferSize = 0; GetLogicalProcessorInformationEx(RelationProcessorCore, nullptr, &bufferSize); std::vector<BYTE> buffer(bufferSize); if (!GetLogicalProcessorInformationEx(RelationProcessorCore, reinterpret_cast<SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX*>(buffer.data()), &bufferSize)) { return false; } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX* info = reinterpret_cast<SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX*>(buffer.data()); *pGroupAffinity = {0}; while (bufferSize > 0) { if (info->ProcessorCore.CoreFlags & PROCESSOR_CORE_FLAG_PERFORMANCE_CORE) { // 合并同一分组下所有P核的亲和性掩码 pGroupAffinity->Group = info->ProcessorCore.GroupMask[0].Group; pGroupAffinity->Mask |= info->ProcessorCore.GroupMask[0].Mask; } bufferSize -= info->Size; info = reinterpret_cast<SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX*>(reinterpret_cast<BYTE*>(info) + info->Size); } return pGroupAffinity->Mask != 0; }
3. 绑定线程到P核
获取到P核的亲和性掩码后,调用SetThreadGroupAffinity将工作线程绑定到P核:
void BindThreadToPerformanceCores(HANDLE hThread) { GROUP_AFFINITY groupAffinity = {0}; if (GetPerformanceCoreGroupAffinity(&groupAffinity)) { SetThreadGroupAffinity(hThread, &groupAffinity, nullptr); } }
注:需确保程序以管理员权限运行,否则亲和性设置可能失败。
二、系统层面的设置调整
- 手动设置进程相关性:打开任务管理器→详细信息→找到你的进程→右键→设置相关性,手动勾选所有P核(12代i7-12700K的P核通常对应编号靠前的逻辑核心,可通过核心标识区分)。
- 调整进程优先级:将进程优先级设为“高”或“实时”,让系统优先调度P核资源给该程序。
- 电源模式设置:切换到“高性能”电源计划,避免系统因节能策略将任务分配到E核。
三、旧代码适配检查
检查你之前实现的processorGroups相关代码,若存在硬编码分组编号的逻辑,需改为动态检测分组内的核心类型,避免误绑定到E核所在分组。
内容的提问来源于stack exchange,提问作者RED SOFT ADAIR
相关产品推荐
相关产品推荐

