Tweakers,
Op mijn werk heb ik een laptop van Asus, een pentium 3 op 600MHz. Tenminste, dat staat op het scherm bij het booten.
Ik heb reden om aan te nemen dat'ie op 500MHz draait. Hieronder leg ik uit hoe ik dat heb bepaald.
Zit Asus de klanten te naaien? Is het een foutje? Heeft het met powermanagement te maken?
Wie weet hier wat nuttigs over te melden?
Hier het verhaal.
In een Intel pentium processor zit een instructie waarmee je het aantal kloktikken kunt opvragen sinds de processor aan is gezet. Dit is een 64-bits getal. (Leuk: op 2.0GHz kan je daar ruim 292 jaar me tellen!)
op http://www.geocities.com/SiliconValley/Way/6422/optimizations.htm kun je hierover oa het volgende vinden:
Use the RDTSC opcode to find the current count. RDTSC returns the 64-bit value in EDX:EAX (high dword in EDX, low dword in EAX; not a memory address). So do a RDTSC, save the contents of EAX to a variable (throw out EDX unless your code takes years ;-), then run the code in question, then RDTSC again, subtract your old EAX value from the new EAX value, and voila! you have the actual number of clock cycles it took to run that code.
Op mijn werk heb ik een klein programmaatje wat steeds via een digitale IO kaart kijkt naar een aantal ingangssignalen. Als hij een verandering detecteert aan een van de ingangen, slaat hij de verandering EN het tijdstip van de verandering op. Het tijdstip komt van de al genoemde instructie RDTSC af. Dit is dus geen echte tijd, maar een getal in kloktikken.
Na het meten sla ik alle gegevens op schijf op, en kan ik de data gaan analyseren, bijvoorbeeld met Matlab of Excel.
Om de 'tijdstippen' in kloktikken om te rekenen naar tijd in seconden heb ik de klokfrequentie nodig. Als ik bijvoorbeeld heb gemeten dat de 'tijd' tussen 2 signaalveranderingen is gemeten als 20.000 kloktikken, en ik weet dat mijn prcessor op 600MHz loopt, dan is de tijd tussen deze 2 events dus 20.000/600.000.000=33,3us geweest.
En nu komt het: ik heb een geijkt signaal gemeten, van precies 1kHz. Gemiddeld blijken er 500.000 kloktikken tussen alle opgaande flanken te zitten. Dat betekent dus dat mijn processor op 500MHz loopt, en niet op 600 MHz.
Op mijn werk heb ik een laptop van Asus, een pentium 3 op 600MHz. Tenminste, dat staat op het scherm bij het booten.
Ik heb reden om aan te nemen dat'ie op 500MHz draait. Hieronder leg ik uit hoe ik dat heb bepaald.
Zit Asus de klanten te naaien? Is het een foutje? Heeft het met powermanagement te maken?
Wie weet hier wat nuttigs over te melden?
Hier het verhaal.
In een Intel pentium processor zit een instructie waarmee je het aantal kloktikken kunt opvragen sinds de processor aan is gezet. Dit is een 64-bits getal. (Leuk: op 2.0GHz kan je daar ruim 292 jaar me tellen!)
op http://www.geocities.com/SiliconValley/Way/6422/optimizations.htm kun je hierover oa het volgende vinden:
Use the RDTSC opcode to find the current count. RDTSC returns the 64-bit value in EDX:EAX (high dword in EDX, low dword in EAX; not a memory address). So do a RDTSC, save the contents of EAX to a variable (throw out EDX unless your code takes years ;-), then run the code in question, then RDTSC again, subtract your old EAX value from the new EAX value, and voila! you have the actual number of clock cycles it took to run that code.
Op mijn werk heb ik een klein programmaatje wat steeds via een digitale IO kaart kijkt naar een aantal ingangssignalen. Als hij een verandering detecteert aan een van de ingangen, slaat hij de verandering EN het tijdstip van de verandering op. Het tijdstip komt van de al genoemde instructie RDTSC af. Dit is dus geen echte tijd, maar een getal in kloktikken.
Na het meten sla ik alle gegevens op schijf op, en kan ik de data gaan analyseren, bijvoorbeeld met Matlab of Excel.
Om de 'tijdstippen' in kloktikken om te rekenen naar tijd in seconden heb ik de klokfrequentie nodig. Als ik bijvoorbeeld heb gemeten dat de 'tijd' tussen 2 signaalveranderingen is gemeten als 20.000 kloktikken, en ik weet dat mijn prcessor op 600MHz loopt, dan is de tijd tussen deze 2 events dus 20.000/600.000.000=33,3us geweest.
En nu komt het: ik heb een geijkt signaal gemeten, van precies 1kHz. Gemiddeld blijken er 500.000 kloktikken tussen alle opgaande flanken te zitten. Dat betekent dus dat mijn processor op 500MHz loopt, en niet op 600 MHz.