Skip to content

Commit 1174197

Browse files
committed
implement additional methods to read nominal frequency
1 parent 41376ef commit 1174197

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

src/cpucounters.cpp

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,9 +1598,17 @@ bool PCM::detectNominalFrequency()
15981598
{
15991599
if (MSR.size())
16001600
{
1601-
uint64 freq = 0;
1602-
MSR[socketRefCore[0]]->read(PLATFORM_INFO_ADDR, &freq);
1603-
const uint64 bus_freq = (
1601+
if (max_cpuid >= 0x16)
1602+
{
1603+
PCM_CPUID_INFO cpuinfo;
1604+
pcm_cpuid(0x16, cpuinfo);
1605+
nominal_frequency = uint64(extract_bits_ui(cpuinfo.reg.eax, 0, 15)) * 1000000ULL;;
1606+
}
1607+
if (!nominal_frequency)
1608+
{
1609+
uint64 freq = 0;
1610+
MSR[socketRefCore[0]]->read(PLATFORM_INFO_ADDR, &freq);
1611+
const uint64 bus_freq = (
16041612
cpu_model == SANDY_BRIDGE
16051613
|| cpu_model == JAKETOWN
16061614
|| cpu_model == IVYTOWN
@@ -1621,11 +1629,17 @@ bool PCM::detectNominalFrequency()
16211629
|| cpu_model == ICX
16221630
) ? (100000000ULL) : (133333333ULL);
16231631

1624-
nominal_frequency = ((freq >> 8) & 255) * bus_freq;
1632+
nominal_frequency = ((freq >> 8) & 255) * bus_freq;
1633+
}
16251634

16261635
if(!nominal_frequency)
16271636
nominal_frequency = get_frequency_from_cpuid();
16281637

1638+
if(!nominal_frequency)
1639+
{
1640+
computeNominalFrequency();
1641+
}
1642+
16291643
if(!nominal_frequency)
16301644
{
16311645
std::cerr << "Error: Can not detect core frequency.\n";

0 commit comments

Comments
 (0)