Durante la scrittura di un nuovo codice per Windows, sono incappato su _cpuinfo()
dall'API di Windows. Poiché mi occupo principalmente di un ambiente Linux (GCC), desidero avere accesso a CPUInfo.Come chiamo "cpuid" in Linux?
Ho provato quanto segue:
#include <iostream>
int main()
{
int a, b;
for (a = 0; a < 5; a++)
{
__asm ("mov %1, %%eax; " // a into eax
"cpuid;"
"mov %%eax, %0;" // eax into b
:"=r"(b) // output
:"r"(a) // input
:"%eax","%ebx","%ecx","%edx" // clobbered register
);
std::cout << "The code " << a << " gives " << b << std::endl;
}
return 0;
}
Questa assemblea uso, ma io non voglio di re-inventare la ruota. C'è un altro modo per implementare CPUInfo senza assemblare?
errori di compilazione:
[email protected]:~/Desktop/prog$ g++ -Wall CPUInfo.cpp
CPUInfo.cpp: In function ‘int main()’:
CPUInfo.cpp:10:22: error: expected ‘)’ before ‘;’ token
CPUInfo.cpp:10:23: error: expected primary-expression before ‘)’ token
CPUInfo.cpp:10:23: error: expected ‘;’ before ‘)’ token
CPUInfo.cpp:8:8: warning: unused variable ‘b’ [-Wunused-variable]
CPUInfo.cpp:12:8: error: expected ‘}’ at end of input
Quindi, questo è g ++, credo. E x86? Dovresti dire. Qual è la domanda in ogni caso? Ci hai detto cosa stai facendo e hai mostrato il codice. Ma non c'è dubbio. –
@JerryCoffin Sto usando Linux (come in questa sarà la sezione Linux per determinare la CPU del computer che esegue il codice). Ho già la versione/sezione Windows inchiodata con la funzione _cpuinfo() dall'API Win. Questo è il mio punto. – TheBlueCat
@DavidHeffernan Vedere il mio post aggiornato, ho trascurato di aggiungere gli errori del compilatore. – TheBlueCat