आप सी ++ 11 उपयोग कर रहे हैं आप system_clock::now()
उपयोग कर सकते हैं
// this constructs a duration object using milliseconds
auto elapsed =
std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
// this constructs a duration object using seconds
auto elapsed =
std::chrono::duration_cast<std::chrono::seconds>(end - start);
आप उपयोग नहीं कर सकते सी + +11, फिर बूस्ट से chrono पर एक नज़र डालें।
ऐसे मानक पुस्तकालयों का उपयोग करने के बारे में सबसे अच्छी बात यह है कि उनकी पोर्टेबिलिटी वास्तव में उच्च है (उदाहरण के लिए, वे दोनों लिनक्स और विंडोज में काम करते हैं)। इसलिए यदि आप बाद में अपना आवेदन बंद करने का निर्णय लेते हैं तो आपको बहुत ज्यादा चिंता करने की आवश्यकता नहीं है।
सी-जैसे दृष्टिकोणों के विपरीत ये पुस्तकालय एक आधुनिक सी ++ डिज़ाइन का भी पालन करते हैं।
संपादित करें: उपरोक्त उदाहरण wall-clock time को मापने के लिए उपयोग किया जा सकता है। हालांकि, यह एक कार्यक्रम के निष्पादन समय को मापने का एकमात्र तरीका नहीं है। सबसे पहले, हम उपयोगकर्ता और सिस्टम समय के बीच अलग कर सकते हैं:
- उपयोगकर्ता समय: समय user space में चल रहे इस कार्यक्रम के द्वारा खर्च किए।
- सिस्टम समय: सिस्टम (या कर्नेल) स्थान में चल रहे प्रोग्राम द्वारा बिताए गए समय। उदाहरण के लिए एक प्रोग्राम कर्नेल स्पेस में प्रवेश करता है जब system call निष्पादित करता है।
किसी भी कार्यक्रम के निष्पादन समय के हिस्से के रूप में सिस्टम के समय पर विचार करना आवश्यक है या नहीं। उदाहरण के लिए, यदि उद्देश्य उपयोगकर्ता कोड पर एक कंपाइलर अनुकूलन को मापना है तो सिस्टम सिस्टम को छोड़ना शायद बेहतर है। दूसरी ओर, यदि उपयोगकर्ता यह निर्धारित करना चाहता है कि सिस्टम कॉल एक महत्वपूर्ण ओवरहेड हैं, तो सिस्टम समय को मापना भी आवश्यक है।
इसके अलावा, चूंकि अधिकांश आधुनिक सिस्टम time-shared हैं, विभिन्न प्रोग्राम कई कंप्यूटिंग संसाधनों (उदाहरण के लिए, सीपीयू) के लिए प्रतिस्पर्धा कर सकते हैं। इस तरह के एक मामले में, एक और भेद किया जा सकता है:
- Wall-clock time: दीवार-घड़ी समय कार्यक्रम के निष्पादन उसी तरह से मापा जाता है, के रूप में अगर हम एक बाहरी (दीवार) घड़ी का उपयोग कर रहे थे का उपयोग करके। यह दृष्टिकोण कार्यक्रमों के बीच बातचीत पर विचार नहीं करता है।
- CPU time: इस मामले में हम केवल समय है कि एक कार्यक्रम वास्तव में सीपीयू पर चल रहा है गिनती।यदि कोई प्रोग्राम (पी 1) किसी अन्य (पी 2) के साथ सह-निर्धारित होता है, और हम पी 1 के लिए सीपीयू का समय प्राप्त करना चाहते हैं, तो इस दृष्टिकोण में समय शामिल नहीं है जबकि पी 2 चल रहा है और पी 1 सीपीयू के लिए इंतजार कर रहा है (जैसा कि विपरीत है दीवार घड़ी समय दृष्टिकोण)।
CPU समय को मापने के लिए, बूस्ट एक set of extra clocks में शामिल हैं:
process_real_cpu_clock
, कब्जा दीवार घड़ी CPU समय वर्तमान प्रक्रिया द्वारा खर्च।
process_user_cpu_clock
, वर्तमान प्रक्रिया द्वारा खर्च किए गए उपयोगकर्ता-सीपीयू समय को कैप्चर करता है।
process_system_cpu_clock
, वर्तमान प्रक्रिया द्वारा खर्च किए गए सिस्टम-सीपीयू समय को कैप्चर करता है। एक tuple-like class process_cpu_clock
, जो वास्तविक, उपयोगकर्ता-सीपीयू, और सिस्टम-सीपीयू प्रक्रिया समय को एक साथ कैप्चर करता है।
- ए
thread_clock
थ्रेड स्थिर घड़ी वर्तमान धागे (जब प्लेटफार्म द्वारा समर्थित) द्वारा बिताए गए समय को दे रही है।
दुर्भाग्यवश, सी ++ 11 में ऐसे घड़ियों नहीं हैं। लेकिन बूस्ट एक व्यापक रूप से उपयोग की जाने वाली लाइब्रेरी है और, शायद, इन अतिरिक्त घड़ियों को किसी बिंदु पर सी ++ 1x में शामिल किया जाएगा। इसलिए, यदि आप बूस्ट का उपयोग करते हैं तो आप तैयार होंगे जब नया सी ++ मानक उन्हें जोड़ता है।
अंत में, यदि आप कमांड लाइन से निष्पादित करने के लिए एक प्रोग्राम लेते हैं (जैसा कि आपके प्रोग्राम में कुछ कोड जोड़ने के विपरीत है), तो आप time कमांड पर देख सकते हैं, जैसा कि @ BЈовић सुझाता है। हालांकि, यह दृष्टिकोण आपको अपने प्रोग्राम के अलग-अलग हिस्सों को मापने नहीं देगा (उदाहरण के लिए, फ़ंक्शन निष्पादित करने में लगने वाला समय)।
आप किस ऑपरेटिंग सिस्टम पर अपने कोड चल रहे हैं? –
मुझे एक साथ कई कोड प्रोफाइल करना पसंद है। – Puppy
जब भी आप प्रोग्राम शुरू करते हैं तो बस 'time' कमांड का उपयोग करें। – Jasen