सी में सर्वश्रेष्ठ समय पद्धति?


80

उच्च रिज़ॉल्यूशन और पोर्टेबिलिटी के साथ कोड सेक्शन के लिए समय का सबसे अच्छा तरीका क्या है?

क्या कोई मानक पुस्तकालय है जिसमें एक क्रॉस-प्लेटफॉर्म समाधान होगा?

जवाबों:


137

मुझे लगता है कि यह काम करना चाहिए:


10
यह वास्तव में अच्छा है क्योंकि यह आपको बीता समय के बजाय सीपीयू समय देता है (बीता हुआ समय अन्य प्रक्रियाओं से प्रभावित हो सकता है)। बस ध्यान रखें कि 10 सेकंड का एक आंकड़ा जरूरी नहीं है कि यह 10 सेकंड बीत चुके समय में चलेगा, क्योंकि वहाँ I / O विचार हो सकते हैं। यह केवल CPU को मापता है ।
paxdiablo

1
मैंने इसे सैकड़ों बार इस्तेमाल किया और इस सवाल का सबसे अच्छा / सबसे आसान समाधान है
गेरहार्ड

4
यदि आप कई चीजों को अक्सर टाइम कर रहे हैं, तो आप इसे एक मैक्रो में भी भर सकते हैं: #define टाइमिंग (ए) स्टार्ट = क्लॉक (); ए; diff = clock () - प्रारंभ; msec = diff * 1000 / CLOCKS_PER_SEC; प्रिंटफ ("msecs:% d \ n", msec); और फिर आह्वान करें: टाइमिंग (IntenseFunc1 ())
eqzx 19

3
घड़ी_ट आमतौर पर एक लंबा और CLOCKS_PER_SEC 1000000 है। इस मामले में, 4 सेकंड से अधिक का अंतर आपको अतिप्रवाह और अजीब परिणाम देगा
बेगफेलर

2
@paxdiablo मुझे इसके साथ पूरी तरह से बराबर परिणाम मिलते हैं जैसे गेटटाइमफीड () के साथ, यह निश्चित नहीं है कि आप यहां क्या कह रहे हैं।
user3467349

21

gettimeofday () शायद वही करेगा जो आप चाहते हैं।

यदि आप इंटेल हार्डवेयर पर हैं, तो यहां सीपीयू वास्तविक समय अनुदेश काउंटर को कैसे पढ़ा जाए। यह आपको बताएगा कि प्रोसेसर के बूट होने के बाद से निष्पादित सीपीयू चक्रों की संख्या। यह संभवतः सबसे अच्छा-दाने वाला है, सबसे कम ओवरहेड काउंटर जो आपको प्रदर्शन माप के लिए मिल सकता है।

ध्यान दें कि यह सीपीयू चक्रों की संख्या है। लिनक्स पर आप सीपीयू की गति / proc / cpuinfo से प्राप्त कर सकते हैं और सेकंड की संख्या प्राप्त करने के लिए विभाजित कर सकते हैं। इसे डबल में बदलना काफी आसान है।

जब मैं इसे अपने बॉक्स पर चलाता हूं, तो मुझे मिल जाता है

11867927879484732 है
11867927879692217 है
इसे प्रिंटफ को कॉल करने में बहुत समय लगा: 207485

यहां इंटेल डेवलपर का गाइड है जो टन के बारे में विस्तार से बताता है।


5

gettimeofday सिस्टम क्लॉक के रिज़ॉल्यूशन के भीतर माइक्रोसेकंड के लिए सही समय लौटाएगा। आप SourceForge पर हाई रेस टाइमर परियोजना की जांच भी कर सकते हैं ।



1

यदि आप सीपीयू समय नहीं चाहते हैं, तो मुझे लगता है कि आप जो खोज रहे हैं वह टाइमवॉल संरचना है।

मैं निष्पादन समय की गणना के लिए नीचे का उपयोग करता हूं:


0

उच्च संकल्प सापेक्ष है ... मैं उदाहरणों को देख रहा था और वे ज्यादातर मिलीसेकंड के लिए पूरा करते हैं। हालांकि मेरे लिए माइक्रोसेकंड को मापना महत्वपूर्ण है। मैंने माइक्रोसेकंड के लिए एक प्लेटफ़ॉर्म इंडिपेंडेंट सॉल्यूशन नहीं देखा है और सोचा है कि नीचे दिए गए कोड की तरह कुछ उपयोगी होगा। मैं केवल समय के लिए खिड़कियों पर टाइम कर रहा था और AIX / Linux पर ऐसा ही करते समय एक gettimeofday () कार्यान्वयन जोड़ देगा।

उपयोग:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.