gettimeofday () शायद वही करेगा जो आप चाहते हैं।
यदि आप इंटेल हार्डवेयर पर हैं, तो यहां सीपीयू वास्तविक समय अनुदेश काउंटर को कैसे पढ़ा जाए। यह आपको बताएगा कि प्रोसेसर के बूट होने के बाद से निष्पादित सीपीयू चक्रों की संख्या। यह संभवतः सबसे अच्छा-दाने वाला है, सबसे कम ओवरहेड काउंटर जो आपको प्रदर्शन माप के लिए मिल सकता है।
ध्यान दें कि यह सीपीयू चक्रों की संख्या है। लिनक्स पर आप सीपीयू की गति / proc / cpuinfo से प्राप्त कर सकते हैं और सेकंड की संख्या प्राप्त करने के लिए विभाजित कर सकते हैं। इसे डबल में बदलना काफी आसान है।
जब मैं इसे अपने बॉक्स पर चलाता हूं, तो मुझे मिल जाता है
11867927879484732 है
11867927879692217 है
इसे प्रिंटफ को कॉल करने में बहुत समय लगा: 207485
यहां इंटेल डेवलपर का गाइड है जो टन के बारे में विस्तार से बताता है।
#include <stdio.h>
#include <stdint.h>
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);
}