CPUID - pobieranie taktowania procesora

CPUID - pobieranie taktowania procesora
M1
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

Witam, chciałbym dowiedzieć się czy z CPUID da radę wyciągnąć taktowanie procesora oraz informację o pamięci cache ? Jak na razie to znalazłem informację, że taktowanie można znaleźć w EAX=0000_0016h, ale po pobraniu danych z eax (bity od 0 do 15) pokazuje 0.

Kopiuj
unsigned long cpuid::freq_inf()
{
    unsigned long freq_base;
    unsigned long freq_max;
    unsigned long freq_bus;

    __asm
    {
        mov eax, 00000016h
        cpuid
        mov freq_base, eax
        mov freq_max, ebx
        mov freq_bus, ecx
    }

    qDebug() << "Freq_base : " << freq_base;
    qDebug() << "Freq_max : " << freq_max;
    qDebug() << "Freq_bus : " << freq_bus;

    return freq_base;
}
edytowany 1x, ostatnio: maniek1310
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

M1
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

To chyba zrobię inaczej, po prostu pobiorą z CPUID nr id procesora, i potem zrobię bazę danych w której bd trzymał informację z cpu-world. Tylko nie mogę znaleźć jak pobrać ten id procesora.

Rozchodzi mi się o to : CPUID 610F01 (dla procesora AMD APU A8-5600k)

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 7 godzin
0

Jak na razie to znalazłem informację, że taktowanie można znaleźć w EAX=0000_0016h

Gdzie taką informację znalazłeś?
Dokumentacja Intela mówi tylko o zakresach 0h - 6h i 80000000h - 80000008h.

Częstotliwość procesora można zmierzyć za pomocą instrukcji rdtsc.

z ID nawet jeśli wyciągniesz to nie będzie odzwierciedlała ewentualnego overclockingu.

edytowany 1x, ostatnio: Azarien
RE
a za pomocą rdtsc nie ogarniesz prosto speedstepu i podobnych
Azarien
@Rev: no nie ma funkcji która zwraca bezpośrednio częstotliwość, bo jest to dla procesora kwestia, że tak powiem, transcendentna.
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
0

Zdecydowanie najlepiej będzie po prostu zapytać o to system operacyjny.

M1
Rozchodzi ci się o bazę wmi?
RE
M1
Ogólnie to chciałem stworzyć aplikację, do pobierania informacji o sprzęcie, ale nie wiem czy to ma sens.
M1
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

Zrobiłem tak ale wyskakuje jakaś dziwna liczba (1642544406144)

Kopiuj
 unsigned __int64 i;
    i = __rdtsc();
    qDebug() << i << endl;
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Wiesz chociaż co robi rdtsc?


M1
No tak nie za bardzo :P
Patryk27
No to nie zgaduj, tylko jak już przepisujesz kod, to chociaż zgodnie z poradnikiem.
M1
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

Dobra, już wiem jak aida64 pozyskuje id procesora :) Jest to po prostu zawartość rejestru eax, dla eax = 1. Dla mojego procesora pokazało 6360833 i po zamianie na hex wynosi 0x610F01

M1
Ale kolejnym problemem jest to, że nie które procesory mają takie same CPUID
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 7 godzin
0

Dla EAX=0 wynikowy EAX oznacza maksymalną wartość EAX którą CPUID przyjmuje (z zakresu podstawowego, czyli nie licząc tych na 80000000).

Dokumentacja Intela z września 2014 mówi o EAX=14h.
Dokumentacja AMD z maja 2013 dochodzi do EAX=0Dh.

Nigdzie śladu o funkcji z EAX=16h.

Ale poszukaj o rejestrach MPERF i APERF. To może być to czego szukasz. Choć pewnie wymaga w miarę nowego procka.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.