19. december 2005 - 15:26Der er
9 kommentarer og 2 løsninger
cache memory
Jeg skal lave et program som kan finde ud af hvike levels af cache memory jeg har på computeren.... Men hvordan gør jeg egentlig det? måske med nogle links.
Du kan bruge CPUID instruktionen, det kræver at du laver en smule inline assembler. Desværre er det lidt noget bøvl, da AMD og Intel har lidt forskellige måder at returnere data. Derfor skal der en smule forskelligt kode til alt efter hvilken processor, koden aktuelt køres på.
Da jeg har en AMD, kunne jeg lave det følgende eksempel. Det burde være nemt nok at få til at virke på Intel, du skal bare have fat i deres instruktions-dokumentation og hitte ud af hvilken parameter der skal sendes med i EAX, og hvor data bliver returneret.
int main() { unsigned long support = 0; unsigned long l2 = 0; unsigned long l1i = 0; unsigned long l1d = 0; unsigned long regs[4] = {0}; char vendor[13] = {0};
"cpuid" er en instruktion som findes på både AMD og Intel. Når den køres, returnerer den information om processoren i registrene eax, ebx, ecx, edx. Hvad der returneres afhænger af indholdet i eax før den kaldes. Når vi kommer til at hente cache størrelsen ud, bruger AMD og Intel desværre forskellige parametre; for Intel er parameteren 2 og for AMD er den 0x8000005 og -6 hhv. Intel returnerer sikkert også tallene andre steder i registrene, så der skal laves en alternativ version af ovenstående for at tage højde for Intel processorer.
Det der nok er mest interessant er CPUID funktionen: void CPUID(int param, unsigned long *regsout) { unsigned long regs[4]; __asm // Kode heri er assembler kode { // push registre på stakken, da compileren forventer at de forbliver uændrede push eax; push ebx; push ecx; push edx;
"l2","l1i","l1d", er blot variabelnavne. Det der sker i main() er stort set bare, at vi kalder CPUID med de rigtige parametre, som jeg har slået op i AMD's dokumentation. Og dernæst noget datagymnastik for at få vist værdierne på en pæn måde.
hvis ikke det var fordi at WMI i C++ er så besværligt at bruge som det er, så var det jo nok et pænere alternativ
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.