CPUID - generowanie id

CPUID - generowanie id
M1
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:165
0

Witam, miałbym prośbę, a mianowicie piszę program, który pokazuje informację o sprzęcie komputerowym. A mianowicie, w przypadku procesorów AMD sprawa jest ułatwiona, gdyż można to odczytać z CPUID (pobierając ext_family, ext_model i nr socket). Ale w przypadku procesorów INTEL tak już nie da rady. I tu moje pytanie czy w miarę możliwości pomożecie mi uzbierać bazę procesorów INTEL. Wystarczy pobrać program, który link poniżej (jest to program ze strony cpu-world), on generuje informacje i generuje link do strony. Wystarczy że po wygenerowaniu strony wyślecie mi np. na pw link do tej strony. Z góry dzięki. Oczywiście gdy uzbieram wszystko upublicznię plik .inf z danymi.

http://www.cpu-world.com/Download/CPU_identification.html

edytowany 1x, ostatnio: maniek1310
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około godziny
0

w przypadku procesorów AMD sprawa jest ułatwiona, gdyż można to odczytać z CPUID (pobierając ext_family, ext_model i nr socket). Ale w przypadku procesorów INTEL tak już nie da rady

huh? przecież procki Intela też mają instrukcję CPUID.

o jaką informację ci właściwie chodzi?

nie przyszło ci do głowy poszukać na stronie Intela jakiejś listy procesorów wraz ze sposobem ich identyfikacji?

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

Właśnie szukałem ale nie mogłem znaleźć, po prostu chciałbym zrobić, abym mógł na podstawie danych z CPUID określić jaki socket. Ale są procesory które mają taki sam CPUID.

0

W przypadku procesorów Intela także uzyskasz informacje o ext_family i ext_model. Potrzebna będzie do tego wstawka assemblerowa. Może są jakieś biblioteki do tego, ale ja ich nie znam, więc ci nie podpowiem jakie.

W assemblerze ładujesz do rejestru EAX wartość 1 i po wywołaniu CPUID w rejestrze EAX na bitach 27:20 masz ext_family. Natomiast na bitach 19:16 masz ext_model.
Jeśli chodzi o rodzaj socketu to Intel nie dostarcza takich informacji poprzez CPUID(przynajmiej tak było jak ja tym się zajmowałem). Z pewnością jest jakiś manual opisujący jakie sockety do jakich procków.

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

@MMWW no właśnie tak pobieram, tylko tak jak napisałeś, nigdzie nie mogę znaleźć jak rozróżniać sockety za pomocą CPUID.

Mógłbym zrobić listę za pomocą Processor name (BIOS), tylko że na cpu-world nie do każdego procesora jest przypisane jaka jest nazwa wyświetlana w komputerze.

np. http://www.cpu-world.com/cgi-bin/CPUID.pl?CPUID=48942_80143067

edytowany 1x, ostatnio: maniek1310
0

"Ręczne" robienie takiego zestawiania cpu - socket odradzam. Sporo czasu na to poświęcisz. Google twym najlepszym przyjacielem jest. Szukaj manuali na stronie Intela lub w sieci. Jak nie znasz angielskiego dobrze to będziesz miał spore kłopoty.

Jeszcze jedne link - może się przyda:

http://sandpile.org/x86/cpuid.htm

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
0

Powershell: Get-WmiObject -Class Win32_Processor | Select-Object SocketDesignation

WMI bierze tę informację z SMBIOS (która nie musi być w 100% dokładna; u mnie na desktopie pokazuje prawdziwy socket, a na laptopie znajomego jakieś oznaczenie Acera).

edytowany 1x, ostatnio: Rev
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około godziny
1

Potrzebna będzie do tego wstawka assemblerowa

nieee....

Kopiuj
#include <iostream>
#include <intrin.h>
using namespace std;

int main()
{
	int cpuInfo[4];
	__cpuid(cpuInfo, 1);
	
	int eax = cpuInfo[0];

	int stepping = eax & 15;
	int model = (eax >> 4) & 15;
	int family = (eax >> 8) & 15;
	int type = (eax >> 12) & 3;
	int ext_model = (eax >> 16) & 15;
	int ext_family = (eax >> 20) & 255;

	cout << "stepping\t" << stepping << endl;
	cout << "model\t\t" << model << endl;
	cout << "family\t\t" << family << endl;
	cout << "type\t\t" << type << endl;
	cout << "exmodel\t\t" << ext_model << endl;
	cout << "exfamily\t" << ext_family << endl;

	return 0;
}

To dla Visuala. Pod MinGW też jest funkcja __cpuid() w <cpuid.h>, ale przyjmuje inne parametry.

Nie wiem jak pod Linuksem.

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

@MMWW na tej stronie co podałeś to właśnie jest tylko jak odróżnić w przypadku procesorów INTEL'a.

@Rev w moim przypadku pokazuje P0 :D

@Azarien no to właśnie tak pobieram, z cpuid.

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.