File tree Expand file tree Collapse file tree 1 file changed +18
-4
lines changed Expand file tree Collapse file tree 1 file changed +18
-4
lines changed Original file line number Diff line number Diff line change @@ -1598,9 +1598,17 @@ bool PCM::detectNominalFrequency()
1598
1598
{
1599
1599
if (MSR.size ())
1600
1600
{
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 = (
1604
1612
cpu_model == SANDY_BRIDGE
1605
1613
|| cpu_model == JAKETOWN
1606
1614
|| cpu_model == IVYTOWN
@@ -1621,11 +1629,17 @@ bool PCM::detectNominalFrequency()
1621
1629
|| cpu_model == ICX
1622
1630
) ? (100000000ULL ) : (133333333ULL );
1623
1631
1624
- nominal_frequency = ((freq >> 8 ) & 255 ) * bus_freq;
1632
+ nominal_frequency = ((freq >> 8 ) & 255 ) * bus_freq;
1633
+ }
1625
1634
1626
1635
if (!nominal_frequency)
1627
1636
nominal_frequency = get_frequency_from_cpuid ();
1628
1637
1638
+ if (!nominal_frequency)
1639
+ {
1640
+ computeNominalFrequency ();
1641
+ }
1642
+
1629
1643
if (!nominal_frequency)
1630
1644
{
1631
1645
std::cerr << " Error: Can not detect core frequency.\n " ;
You can’t perform that action at this time.
0 commit comments