[*] Switch over to mapped cpuset ids as opposed to the ((groupIndex + 1ull) * 0x100ull) + logicalProcessorIndex approximation
This commit is contained in:
parent
2163a58892
commit
8b29e73f96
@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
namespace Aurora::HWInfo
|
namespace Aurora::HWInfo
|
||||||
{
|
{
|
||||||
|
extern AUKN_SYM AuUInt32 gWin32CPUSetLookupTable[512];
|
||||||
|
|
||||||
AuList<unsigned long> CpuBitId::ToCpuSets() const
|
AuList<unsigned long> CpuBitId::ToCpuSets() const
|
||||||
{
|
{
|
||||||
AuList<unsigned long> ret;
|
AuList<unsigned long> ret;
|
||||||
@ -16,10 +18,15 @@ namespace Aurora::HWInfo
|
|||||||
AuUInt8 index {};
|
AuUInt8 index {};
|
||||||
while (CpuBitScanForward(index, index))
|
while (CpuBitScanForward(index, index))
|
||||||
{
|
{
|
||||||
|
#if defined(AURORA_RUNTIME_USE_FAST_CPUSETS)
|
||||||
unsigned long logicalProcessorIndex = index % 64;
|
unsigned long logicalProcessorIndex = index % 64;
|
||||||
unsigned long groupIndex = index / 64;
|
unsigned long groupIndex = index / 64;
|
||||||
ret.push_back(((groupIndex + 1ull) * 0x100ull) + logicalProcessorIndex);
|
ret.push_back(((groupIndex + 1ull) * 0x100ull) + logicalProcessorIndex);
|
||||||
index++;
|
index++;
|
||||||
|
#else
|
||||||
|
ret.push_back(gWin32CPUSetLookupTable[index]);
|
||||||
|
index++;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
namespace Aurora::HWInfo
|
namespace Aurora::HWInfo
|
||||||
{
|
{
|
||||||
|
AUKN_SYM AuUInt32 gWin32CPUSetLookupTable[512] {};
|
||||||
|
|
||||||
static bool SetWindows10CpuSetInfoSlow()
|
static bool SetWindows10CpuSetInfoSlow()
|
||||||
{
|
{
|
||||||
SYSTEM_CPU_SET_INFORMATION cpuSetInfo[128];
|
SYSTEM_CPU_SET_INFORMATION cpuSetInfo[128];
|
||||||
@ -98,9 +100,15 @@ namespace Aurora::HWInfo
|
|||||||
AuUInt8 id = AuUInt8(cpuSetInfo[i].CpuSet.LogicalProcessorIndex /*no greater than 64*/ + (cpuSetInfo[i].CpuSet.Group * 64));
|
AuUInt8 id = AuUInt8(cpuSetInfo[i].CpuSet.LogicalProcessorIndex /*no greater than 64*/ + (cpuSetInfo[i].CpuSet.Group * 64));
|
||||||
auto cpuId = CpuBitId(id);
|
auto cpuId = CpuBitId(id);
|
||||||
|
|
||||||
|
#if defined(AURORA_RUNTIME_USE_FAST_CPUSETS)
|
||||||
auto sets = cpuId.ToCpuSets();
|
auto sets = cpuId.ToCpuSets();
|
||||||
SysAssert(sets.size() == 1);
|
SysAssert(sets.size() == 1);
|
||||||
SysAssert(sets[0] == cpuSetInfo[i].CpuSet.Id);
|
SysAssert(sets[0] == cpuSetInfo[i].CpuSet.Id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Future proofing for later NT versions
|
||||||
|
SysAssert(id < AuArraySize(gWin32CPUSetLookupTable));
|
||||||
|
gWin32CPUSetLookupTable[id] = cpuSetInfo[i].CpuSet.Id;
|
||||||
|
|
||||||
idx.server.push_back(AuMakePair(cpuSetInfo[i].CpuSet.EfficiencyClass, cpuId));
|
idx.server.push_back(AuMakePair(cpuSetInfo[i].CpuSet.EfficiencyClass, cpuId));
|
||||||
idx.low.push_back(id);
|
idx.low.push_back(id);
|
||||||
|
Loading…
Reference in New Issue
Block a user