उच्च संकल्प, इंटेल प्रोसेसर के लिए कम ओवरहेड समय
यदि आप इंटेल हार्डवेयर पर हैं, तो यहां सीपीयू रीयल-टाइम निर्देश काउंटर को पढ़ने का तरीका बताया गया है। यह आपको प्रोसेसर बूट होने के बाद निष्पादित CPU चक्रों की संख्या बताएगा। यह शायद बेहतरीन माप वाला काउंटर है जिसे आप प्रदर्शन माप के लिए प्राप्त कर सकते हैं।
ध्यान दें कि यह CPU चक्रों की संख्या है। लिनक्स पर आप CPU की गति / proc / cpuinfo से प्राप्त कर सकते हैं और सेकंड की संख्या प्राप्त करने के लिए विभाजित कर सकते हैं। इसे एक डबल में परिवर्तित करना काफी आसान है।
जब मैं इसे अपने बॉक्स पर चलाता हूं, तो मुझे मिलता है
11867927879484732
11867927879692217
it took this long to call printf: 207485
यहां इंटेल डेवलपर की मार्गदर्शिका है जो बहुत सारी जानकारी देता है।
#include
#include
inline uint64_t rdtsc() {
uint32_t lo, hi;
__asm__ __volatile__ (
"xorl %%eax, %%eax\n"
"cpuid\n"
"rdtsc\n"
: "=a" (lo), "=d" (hi)
:
: "%ebx", "%ecx");
return (uint64_t)hi << 32 | lo;
}
main()
{
unsigned long long x;
unsigned long long y;
x = rdtsc();
printf("%lld\n",x);
y = rdtsc();
printf("%lld\n",y);
printf("it took this long to call printf: %lld\n",y-x);
}