का उपयोग कर एआरएम कॉर्टेक्स ए 8-पर समय को क्रियान्वित मैं एक Exynos 3110 प्रोसेसर (1 गीगा सिंगल कोर एआरएम कॉर्टेक्स ए 8-, उदा नेक्सस एस में प्रयुक्त) का उपयोग कर रहा है और विशेष रूप से कार्यों का निष्पादन समय को मापने के लिए प्रयास करें। मुझे लगता है मैं विधि की कोशिश की नेक्सस एस पर एक Android 4.0.3 चलउपाय हार्डवेयर काउंटर
[1] How to measure program execution time in ARM Cortex-A8 processor?
से मैं कर्नेल मॉड्यूल लोड उपयोगकर्ता मोड में रजिस्टर मूल्यों को पढ़ने की अनुमति देने के लिए है। मैं काउंटर का परीक्षण करने के लिए निम्न प्रोग्राम उपयोग कर रहा हूँ:
static inline unsigned int get_cyclecount (void)
{
unsigned int value;
// Read CCNT Register
asm volatile ("MRC p15, 0, %0, c9, c13, 0\t\n": "=r"(value));
return value;
}
static inline void init_perfcounters (int do_reset, int enable_divider)
{
// in general enable all counters (including cycle counter)
int value = 1;
// peform reset:
if (do_reset)
{
value |= 2; // reset all counters to zero.
value |= 4; // reset cycle counter to zero.
}
if (enable_divider)
value |= 8; // enable "by 64" divider for CCNT.
value |= 16;
// program the performance-counter control-register:
asm volatile ("MCR p15, 0, %0, c9, c12, 0\t\n" :: "r"(value));
// enable all counters:
asm volatile ("MCR p15, 0, %0, c9, c12, 1\t\n" :: "r"(0x8000000f));
// clear overflows:
asm volatile ("MCR p15, 0, %0, c9, c12, 3\t\n" :: "r"(0x8000000f));
}
int main(int argc, char **argv)
{
int i = 0;
unsigned int start = 0;
unsigned int end = 0;
printf("Hello Counter\n");
init_perfcounters(1,0);
for(i=0;i<10;i++)
{
start = get_cyclecount();
sleep(1); // sleep one second
end = get_cyclecount();
printf("%u %u %u\n", start, end, end - start);
}
return 0;
}
लिए [1] काउंटर प्रत्येक घड़ी चक्र के साथ वृद्धि की जाती है अनुसार। मैंने scaling_governor को उपयोगकर्ता स्पेस पर स्विच किया और CPU आवृत्ति को 1GHz पर सेट करने के लिए यह सुनिश्चित करने के लिए सेट किया कि घड़ी की आवृत्ति एंड्रॉइड द्वारा नहीं बदली जा सके।
अगर मैं कार्यक्रम 1 सेकंड की सोता क्रियान्वित कर रहे हैं चलाते हैं, लेकिन काउंटर मूल्यों की उम्मीद 1e9 के बजाय, 200e6 की ~ सीमा में हैं। क्या कोई प्रोसेसर विशिष्ट है जो मैं यहां याद कर रहा हूं? काउंटर की घड़ी दर प्रोसेसर की घड़ी की दर से अलग है?
कूल .. कोड द्वारा पोस्ट की गई * वास्तव * कोड मैं दो साल पहले लिखा है .. बस सोच: आप कहाँ से मिल गया हो? –
हाय निल्स, यह आपका कोड है और मैंने उस समय से विषय का हवाला दिया ;-) क्या आपको कोई विचार है कि मुझे टाइमर मूल्यों में 5 का कारक क्यों मिलता है? धन्यवाद – user1207228
क्या मापा समय बदलता है यदि आप सोने के बजाए एक सेकंड के लिए असली काम करते हैं? –