उच्च रिज़ॉल्यूशन, इंटेल प्रोसेसर
आप इंटेल हार्डवेयर पर हैं के लिए कम उपरि समय, यहां सीपीयू वास्तविक समय अनुदेश काउंटर पढ़ने के लिए कैसे। यह आपको प्रोसेसर बूट होने के बाद निष्पादित CPU चक्रों की संख्या बताएगा। यह शायद बेहतरीन माप वाला काउंटर है जिसे आप प्रदर्शन माप के लिए प्राप्त कर सकते हैं।
ध्यान दें कि यह CPU चक्रों की संख्या है। लिनक्स पर आप CPU की गति/proc/cpuinfo से प्राप्त कर सकते हैं और सेकंड की संख्या प्राप्त करने के लिए विभाजित कर सकते हैं। इसे एक डबल में परिवर्तित करना काफी आसान है।
जब मैं अपने बॉक्स पर इस चलाने के लिए, मैं
11867927879484732
11867927879692217
it took this long to call printf: 207485
यहाँ Intel developer's guide कि विस्तार के टन देता है।
#include <stdio.h> // stackoverflow bug: pre tag eats the filenames,
#include <stdint.h> // so i had to put spaces in the angle brackets
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);
}
स्रोत
2008-09-22 20:52:18
RDTSC अनुदेश हतोत्साहित किया जाता है, क्योंकि यह गलत परिणाम सीपीयू सुप्त अवस्था में चले दे सकता है, और यह भी एक मल्टीकोर प्रणाली की कोर के बीच संगत परिणामों का उत्पादन नहीं करता। –
उन समस्याएं QueryPerformanceTimer के लिए भी लागू होती हैं - http://www.virtualdub.org/blog/pivot/entry.php?id=106 – yrp
एचपीईटी के साथ Vista पर QueryPerformanceCounter() इन समस्याओं में नहीं है, और न ही यह XP/USEPMTIMER के साथ। एएमडी एक प्रोसेसर ड्राइवर प्रदान करता है जो XP पर QPC() सिंक्रनाइज़ेशन को बेहतर बनाता है। आरडीटीएससी का उपयोग करके आप इन सुधारों में से किसी से भी लाभान्वित होने से रोकते हैं। – bk1e