caching - how to find cpu cache size for a x86 processor -
caching - how to find cpu cache size for a x86 processor -
i want find cpu cache size of l1 or l2 caches using x86 assembly language. heard cpuid , msr registers have scheme specific data. can 1 help me how can sizes please.
here's minimal illustration of how you'd go finding out using cpuid instruction:
#include <stdio.h> #include <limits.h> #define cpuid(id) __asm__( "cpuid" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "a"(id), "b"(0), "c"(0), "d"(0)) #define b(val, base, end) ((val << (__wordsize-end-1)) >> (__wordsize-end+base-1)) int main(int argc, char **argv) { unsigned long eax, ebx, ecx, edx; cpuid(0); printf("identification: \"%.4s%.4s%.4s\"\n", (char *)&ebx, (char *)&edx, (char *)&ecx); printf("cpu information:\n"); cpuid(1); printf(" family %ld model %ld stepping %ld efamily %ld emodel %ld\n", b(eax, 8, 11), b(eax, 4, 7), b(eax, 0, 3), b(eax, 20, 27), b(eax, 16, 19)); printf(" brand %ld cflush sz %ld*8 nproc %ld apicid %ld\n", b(ebx, 0, 7), b(ebx, 8, 15), b(ebx, 16, 23), b(ebx, 24, 31)); cpuid(0x80000006); printf("l1 cache size (per core): %ld kb\n", b(ecx, 16, 31)); return(0); } caching assembly x86
Comments
Post a Comment