Skip to content

Commit e02fb65

Browse files
authored
Merge pull request #822 from intel-innersource/rdementi-2025-09-08
Rdementi 2025 09 08
2 parents 08e5f75 + bda534b commit e02fb65

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

src/cpucounters.cpp

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -382,29 +382,21 @@ int32 PCM::getMaxCustomCoreEvents()
382382
return core_gen_counter_num_max;
383383
}
384384

385-
/*
386-
int PCM::getCPUModelFromCPUID()
387-
{
388-
static int result = -1;
389-
if (result < 0)
390-
{
391-
PCM_CPUID_INFO cpuinfo;
392-
pcm_cpuid(1, cpuinfo);
393-
result = (((cpuinfo.array[0]) & 0xf0) >> 4) | ((cpuinfo.array[0] & 0xf0000) >> 12);
394-
}
395-
return result;
396-
}
397-
*/
398-
399385
int PCM::getCPUFamilyModelFromCPUID()
400386
{
401387
static int result = -1;
402388
if (result < 0)
403389
{
404390
PCM_CPUID_INFO cpuinfo;
405391
pcm_cpuid(1, cpuinfo);
406-
const auto cpu_family_ = (((cpuinfo.array[0]) >> 8) & 0xf) | ((cpuinfo.array[0] & 0xf00000) >> 16);
407-
const auto cpu_model_ = (((cpuinfo.array[0]) & 0xf0) >> 4) | ((cpuinfo.array[0] & 0xf0000) >> 12);
392+
// follow https://www.felixcloutier.com/x86/cpuid#fig-3-6
393+
unsigned int Family_ID = (cpuinfo.array[0] >> 8) & 0xF;
394+
unsigned int Extended_Family_ID = (cpuinfo.array[0] >> 20) & 0xFF;
395+
unsigned int Model_ID = (cpuinfo.array[0] >> 4) & 0xF;
396+
unsigned int Extended_Model_ID = (cpuinfo.array[0] >> 16) & 0xF;
397+
const auto cpu_family_ = (Family_ID != 0x0F) ? Family_ID : (Extended_Family_ID + Family_ID);
398+
const auto cpu_model_ = (Family_ID == 0x06 || Family_ID == 0x0F) ? (Model_ID + (Extended_Model_ID << 4)) : Model_ID;
399+
408400
result = PCM_CPU_FAMILY_MODEL(cpu_family_, cpu_model_);
409401
}
410402
return result;
@@ -432,9 +424,11 @@ bool PCM::detectModel()
432424
max_cpuid = cpuinfo.array[0];
433425

434426
pcm_cpuid(1, cpuinfo);
435-
cpu_family = (((cpuinfo.array[0]) >> 8) & 0xf) | ((cpuinfo.array[0] & 0xf00000) >> 16);
436-
cpu_model_private = (((cpuinfo.array[0]) & 0xf0) >> 4) | ((cpuinfo.array[0] & 0xf0000) >> 12);
437-
cpu_family_model = PCM_CPU_FAMILY_MODEL(cpu_family, cpu_model_private);
427+
428+
DBG(2 , "cpuinfo.array[0]: 0x" , std::hex , cpuinfo.array[0] , std::dec);
429+
cpu_family_model = getCPUFamilyModelFromCPUID();
430+
cpu_family = (cpu_family_model >> 8) & 0xff;
431+
cpu_model_private = cpu_family_model & 0xff;
438432
cpu_stepping = cpuinfo.array[0] & 0x0f;
439433

440434
if (cpuinfo.reg.ecx & (1UL << 31UL)) {

src/memoptest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ int main(int argc, char * argv[])
132132
cout << "Bandwidth: " << (sizeof(T) * nelements * niter) / ((after_ts - before_ts) * 1024 * 1024) << " MByte/sec\n" << std::flush;
133133
}
134134

135-
deleteAndNullifyArray(vector);
135+
pcm::deleteAndNullifyArray(vector);
136136

137137
return 0;
138138
}

0 commit comments

Comments
 (0)