La instrucción cpuid proporciona información relativa al procesador.
Por ejemplo.
#include <stdio.h>
typedef unsigned int uint;
void print_register_str(reg){
int i;
for(i=0; i<4; i++){
printf("%c", reg >> (i*8) );
}
}
void cpuid(uint *eax, uint *ebx, uint *ecx, uint *edx, uint service){
__asm__ (
"pushl %%ebx \n\t"
"cpuid \n\t"
"movl %%ebx, %1 \n\t"
"popl %%ebx \n\t"
: "=a" (*eax),
"=S" (*ebx),
"=c" (*ecx),
"=d" (*edx)
:"a" (service)
);
}
int main(){
uint eax, ebx, ecx, edx;
printf("VendorString: ");
cpuid(&eax, &ebx, &ecx, &edx, 0);
print_register_str(ebx);
print_register_str(edx);
print_register_str(ecx);
printf("\n");
cpuid(&eax, &ebx, &ecx, &edx, 1);
printf("MMX support: %d\n", (edx >> 23) & 1);
printf("SSE support: %d\n", (edx >> 25) & 1);
printf("SSE2 support: %d\n", (edx >> 26) & 1);
printf("HyperTransport: %d\n", (edx >> 28) & 1);
printf("SSE3 support: %d\n", (ecx) & 1);
return 0;
}
Este programa tiene como resultado para mi cpu.
VendorString: GenuineIntel
MMX support: 1
SSE support: 1
SSE2 support: 1
HyperTransport: 1
SSE3 support: 1
Se puede obtener más información específica, aquí vienen algunos ejemplos más: http://softpixel.com/~cwright/programming/simd/cpuid.php.
0 comentarios:
Publicar un comentario