2016-10-18 6 views
6

मैं Ubuntu पर मेरी कोड चल रहा हूँ, और मैं अपने कार्यक्रम के बारे में एक समारोह के बारे में बीता हुआ समय प्राप्त करने की आवश्यकता हो। मुझे नैनो सेकेंड या कम से कम माइक्रो सेकेंड की तरह एक बहुत ही सटीक समय चाहिए।कैसे बहुत ही सटीक बीता हुआ समय सी ++

मैं लेकिन chrono.h के बारे में पढ़ा यह प्रणाली समय का उपयोग करता है, और मैं उपयोग CPU समय पसंद करते हैं।

वहाँ ऐसा करते हैं, और उस के विवरण का स्तर (नैनो सेकंड) के लिए एक तरीका है?

+1

http://stackoverflow.com/a/13666742/1870760 "_ अगर आप सीपीयू समय चाहते हैं लेकिन प्रदान करने वाले लाभ भी चाहते हैं, तो आपको घड़ी के प्रकार को लागू करना चाहिए जो मानक में उल्लिखित घड़ी अवधारणा के अनुरूप है और जो प्रदान करता है सीपीयू समय, शायद आंतरिक रूप से std :: घड़ी() ._ " –

+1

का उपयोग करके कार्यान्वित किया गया [हाई-रिज़ॉल्यूशन घड़ी] (http://en.cppreference.com/w/cpp/chrono/high_resolution_clock) के बारे में कैसे? –

+0

यहां कुछ भी है: http://stackoverflow.com/questions/275004/timer-function-to-provide-time-in-nano-seconds-using-c – Hayt

उत्तर

1

घड़ी की प्राप्त करने योग्य सटीक विभिन्न हार्डवेयर/ओएस के गुणों में से एक है जो अभी भी लगभग हर भाषा में लीक है, और ईमानदार होने के लिए, उसी स्थिति में होने के कारण मुझे अपने आप को एक स्वयं का अमूर्त बनाना है जो अच्छा है आपके मामले में पर्याप्त अक्सर एकमात्र विकल्प है।

कहा जा रहा है, मैं उच्च परिशुद्धता समय के लिए एसटीएल से बच जाएंगे। मंच पर निर्भर व्यवहार के माध्यम से

  • उपयोग एक कम से कम आम विभाजक
  • रिसाव हार्डवेयर/ओएस विवरण: चूंकि यह एक पुस्तकालय मानक कोई भी सही कार्यान्वयन के साथ है, यह एक अमूर्त, जिनमें से एक का अर्थ है बनाने के लिए है

दूसरे मामले में आप अनिवार्य रूप से वापस आ गए हैं, यदि आप समान व्यवहार करना चाहते हैं। आप या परिशुद्धता की संभावित हानि एक मानक घड़ी के विचलन बर्दाश्त कर सकते हैं, तो हर तरह से इसका इस्तेमाल करते हैं। घड़ियों कठिन और सूक्ष्म हैं।

यदि आप अपने लक्षित माहौल को जानते हैं तो आप पुराने घड़ियों को उचित घड़ियों का चयन कर सकते हैं (#ifdef PLATFORM_ID...), उदा। clock_gettime(), QPC), और सबसे सटीक अमूर्तता को लागू करें जो आप प्राप्त कर सकते हैं। बेशक आप एसटीएल को उसी विकल्प से सीमित कर रहे हैं, लेकिन प्लेटफॉर्म के सेट को कम करके, आप आम तौर पर एलसीडी-आवश्यकता पर सुधार कर सकते हैं।

यदि आपको इस तर्क के बारे में स्वयं को मनाने के लिए एक और सैद्धांतिक तरीका की आवश्यकता है, तो आप घड़ियों के सेट को अपने अधिकतम परिशुद्धता और वर्तमान समय तक पहुंच के अनुक्रम पर विचार कर सकते हैं।घड़ियों को समान रूप से समान चरणों में आगे बढ़ने के लिए, यदि दो पहुंच अधिकतम घड़ी की अधिकतम परिशुद्धता से तेज होती हैं, लेकिन दूसरी घड़ी की अधिकतम परिशुद्धता से धीमी होती है, तो आप अलग-अलग व्यवहार प्राप्त करने के लिए बाध्य होते हैं। यदि दूसरी तरफ आप सुनिश्चित करते हैं कि कम से कम अधिकतम पहुंच अधिकतम पहुंच की अधिकतम सटीकता है, तो व्यवहार समान है। अब निश्चित रूप से वास्तविक घड़ियों समान रूप से आगे बढ़ रहे नहीं हैं (घड़ी की बहाव), और यूनिट-चरणों में भी नहीं।

4

std::chrono में high_resolution_clock है, हालांकि कृपया ध्यान रखें कि परिशुद्धता प्रोसेसर द्वारा सीमित है।

आप libc से कार्यों निर्देशिका का उपयोग करना चाहते हैं, तो आप gettimeofday उपयोग कर सकते हैं लेकिन इससे पहले के रूप में वहाँ कोई गारंटी नहीं कि यह सही nanosecond हो जाएगा। (यह केवल माइक्रोसेकंड सटीकता)

+1

चूंकि किसी भी समय क्वेरी में कर्नेल कॉल शामिल होता है, इसलिए समय कर्नेल मोड में और बाहर बदलना खो गया है, शायद नैनोसेकंद सटीकता के किसी भी प्रयास के लिए पर्याप्त नैनोसेकंड खो देगा। – doron

+0

+1 high_resolution_clock जाने का रास्ता होना चाहिए। लेकिन यह नैनोसेकंद संकल्प होने की गारंटी नहीं है। यह सिस्टम में उच्चतम रिज़ॉल्यूशन घड़ी होना चाहिए। यदि आप पूरी तरह से सुनिश्चित करना चाहते हैं तो आपको पॉज़िक्स सिस्टम पर – Tropid

1

जबकि वहाँ है एक मानकों से कार्य है कि लौटना चाहिए CPU समय (std::clock) वास्तव में वहाँ यह करने के लिए कोई पोर्टेबल तरीका है।

POSIX सिस्टम (लिनक्स होने के लिए प्रयास कर रहा है जो) पर तो std::clock हालांकि सही काम करना चाहिए। अगर आप कभी भी अपना आवेदन पोर्टेबल बनाना चाहते हैं तो गैर-पॉज़िक्स प्लेटफार्मों पर इसे काम करने की अपेक्षा न करें।

std::clock द्वारा दिए गए मान भी अनुमानित हैं, और परिशुद्धता और संकल्प सिस्टम निर्भर है।

+1

(जो शायद उबंटू पर लागू होता है) पर समय मापने की आपकी ऑपरेटिंग सिस्टम संभावनाओं को देखना होगा (CLOCKS_PER_SEC 1000000 है जिसका अर्थ है कि घड़ी में केवल माइक्रोसेकंड है संकल्प। – doron

संबंधित मुद्दे