कोड के प्रदर्शन को मापना
chrono से बेंचमार्क करें
कोड के प्रदर्शन को मापना, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
बेंचमार्क क्यों करें
कोड को चलने में लगने वाला समय मापने से बाधा-बिंदु खोजने और अनुकूलनों की पुष्टि करने में सहायता मिलती है। <chrono> के साथ आपको पोर्टेबल, प्रकार-सुरक्षित समय-मापन मिलता है।
- अनुकूलन करने से पहले मापें।
- विश्वसनीय अंतरालों के लिए स्थिर घड़ी का उपयोग करें।
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
auto end = steady_clock::now();
std::cout << "Timed a block: " << ((end - start).count() >= 0) << '\n';
return 0;
}मूल रूप-रचना
प्रदर्शन-मापन की रूप-रचना हमेशा एक जैसी होती है: काम शुरू करने से पहले now() सुरक्षित करें, काम चलाएँ, उसके बाद now() सुरक्षित करें और दोनों को घटाएँ।
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 100000; ++i) sum += i;
auto end = steady_clock::now();
std::cout << "Sum: " << sum << ", elapsed >= 0: " << ((end - start).count() >= 0) << '\n';
return 0;
}इकाई चुनना
काम के अनुरूप इकाई चुनें। तेज़ लूप के लिए microseconds या nanoseconds और बड़े कार्यों के लिए milliseconds का उपयोग करें।
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 500000; ++i) sum += i;
auto end = steady_clock::now();
auto us = duration_cast<microseconds>(end - start);
std::cout << "Result: " << sum << ", us non-negative: " << (us.count() >= 0) << '\n';
return 0;
}दशमलव-अंक समय-मापन
भिन्नों सहित मनुष्यों के लिए पढ़ने योग्य सेकंड के लिए duration<double> का उपयोग करें, ताकि एक सेकंड से कम की सूक्ष्मता बनी रहे।
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 200000; ++i) sum += i % 7;
auto end = steady_clock::now();
duration<double> secs = end - start;
std::cout << "Computed " << sum << ", seconds >= 0: " << (secs.count() >= 0) << '\n';
return 0;
}पुनः उपयोग योग्य टाइमर
रूप-रचना को एक छोटे सहायक में लपेटें, ताकि आप किसी भी कॉल करने योग्य कोड का साफ़-सुथरे ढंग से समय माप सकें और दोहराव से बच सकें।
#include <iostream>
#include <chrono>
long long timeWork() {
using namespace std::chrono;
auto s = steady_clock::now();
long acc = 0;
for (int i = 0; i < 100000; ++i) acc += i;
auto e = steady_clock::now();
return duration_cast<microseconds>(e - s).count();
}
int main() {
std::cout << "Microseconds non-negative: " << (timeWork() >= 0) << '\n';
return 0;
}अप्रयुक्त कोड हटने से बचना
कंपाइलर ऐसे काम को हटा सकते हैं जिसका परिणाम उपयोग नहीं किया जाता, जिससे बेंचमार्क खराब हो जाते हैं। हमेशा परिणाम का उपयोग करें, जैसे उसे प्रिंट करके या किसी दिखाई देने वाले चर में जोड़कर।
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto s = steady_clock::now();
volatile long sink = 0;
for (int i = 0; i < 100000; ++i) sink += i;
auto e = steady_clock::now();
std::cout << "Sink used: " << (sink > 0) << ", elapsed >= 0: " << ((e - s).count() >= 0) << '\n';
return 0;
}प्रारंभिक अभ्यास रन
कैश और विलंबित प्रारंभिकीकरण के कारण पहला रन धीमा हो सकता है। अधिक स्थिर संख्याएँ पाने के लिए मापन से पहले प्रारंभिक अभ्यास करें।
#include <iostream>
#include <chrono>
long work() {
long a = 0;
for (int i = 0; i < 50000; ++i) a += i;
return a;
}
int main() {
using namespace std::chrono;
work();
auto s = steady_clock::now();
long r = work();
auto e = steady_clock::now();
std::cout << r << " measured, ok: " << ((e - s).count() >= 0) << '\n';
return 0;
}कई रनों का औसत
एक अकेला मापन शोरयुक्त होता है। काम को कई बार चलाएँ, बीती अवधियों का योग करें और स्थिर औसत के लिए उसे रनों की संख्या से भाग दें।
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
long long total = 0;
const int runs = 5;
for (int r = 0; r < runs; ++r) {
auto s = steady_clock::now();
long acc = 0;
for (int i = 0; i < 100000; ++i) acc += i;
auto e = steady_clock::now();
total += duration_cast<microseconds>(e - s).count();
}
std::cout << "Average us non-negative: " << ((total / runs) >= 0) << '\n';
return 0;
}दो दृष्टिकोणों की तुलना
कार्यान्वयनों की तुलना करते समय बेंचमार्क परीक्षण बहुत उपयोगी होता है। प्रत्येक कार्यान्वयन का समय एक ही तरीके से मापिए और प्राप्त अवधियों की तुलना कीजिए।
#include <iostream>
#include <chrono>
#include <vector>
int main() {
using namespace std::chrono;
std::vector<int> v;
auto s1 = steady_clock::now();
for (int i = 0; i < 10000; ++i) v.push_back(i);
auto e1 = steady_clock::now();
v.clear();
v.reserve(10000);
auto s2 = steady_clock::now();
for (int i = 0; i < 10000; ++i) v.push_back(i);
auto e2 = steady_clock::now();
std::cout << "Both timed: " << (((e1 - s1).count() >= 0) && ((e2 - s2).count() >= 0)) << '\n';
return 0;
}विभेदन का ध्यान रखें
यदि मापा गया कार्य घड़ी की एक टिक से कम समय का है, तो आपको शून्य दिखाई दे सकता है। घड़ी के समय-विभेदन से अधिक अवधि प्राप्त करने के लिए कार्य को पर्याप्त बार दोहराइए।
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto s = steady_clock::now();
int x = 1 + 1;
auto e = steady_clock::now();
auto ns = duration_cast<nanoseconds>(e - s).count();
std::cout << "x=" << x << ", tiny work may read low: " << (ns >= 0) << '\n';
return 0;
}परिणामों की रिपोर्ट करना
अंतिम अवधि को पढ़ने योग्य इकाई में बदलकर प्रदर्शित कीजिए। उपयोग किया गया परिणाम दिखाई देता रहे, ताकि अनुकूलक उस कार्य को हटा न सके।
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto s = steady_clock::now();
long acc = 0;
for (int i = 0; i < 300000; ++i) acc += (i * 3) % 11;
auto e = steady_clock::now();
auto ms = duration_cast<milliseconds>(e - s).count();
std::cout << "acc=" << acc << ", ms >= 0: " << (ms >= 0) << '\n';
return 0;
}त्वरित जाँच
बेंचमार्क परीक्षण की कठिनाइयों के बारे में अपनी समझ जाँचिए।
पुनरावृत्ति
आपने सीखा कि <chrono> की सहायता से कोड का बेंचमार्क परीक्षण कैसे किया जाता है:
- पहले और बाद में
steady_clock::now()प्राप्त करके उन्हें घटाइए duration_castकी सहायता से उपयुक्त इकाई चुनिए- प्रारंभिक अभ्यास कीजिए, कई बार के परिणामों का औसत निकालिए और अप्रयुक्त-कोड हटाने से बचने के लिए परिणामों का उपयोग कीजिए
- बहुत छोटे कार्यभारों में घड़ी के समय-विभेदन का ध्यान रखिए
अगला भाग C++20 के कैलेंडर और समय-क्षेत्र प्रकारों का परिचय देगा।
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “कोड के प्रदर्शन को मापना” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कोड के प्रदर्शन को मापना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कोड के प्रदर्शन को मापना” में मैं क्या सीखूँगा?
chrono से बेंचमार्क करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“कोड के प्रदर्शन को मापना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- अवधियाँ और घड़ियाँ
- समय-बिंदु
- कोड के प्रदर्शन को मापना
- कैलेंडर और समय क्षेत्र