C++ Academy · पाठ

Google Benchmark से micro-benchmarking

Google Benchmark से विश्वसनीय micro-benchmarks लिखें और measurement की समस्याओं से बचें।

पाठ 4, कुल 4 में से15 चरण

Google Benchmark से micro-benchmarking, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

माइक्रो-बेंचमार्क क्यों?

मैक्रो-प्रोफ़ाइलिंग दिखाती है कि समय कहाँ खर्च हो रहा है। माइक्रो-बेंचमार्क अलग-अलग कोड को अलगाव में मापते हैं — एल्गोरिदम या कार्यान्वयन की तुलना के लिए उपयोगी।

Google Benchmark की स्थापना

Google की लगभग केवल-हेडर वाली C++ बेंचमार्क लाइब्रेरी। इसे vcpkg, Conan या apt के ज़रिए इंस्टॉल करें; -lbenchmark से लिंक करें।

#include <benchmark/benchmark.h>

static void BM_StringCopy(benchmark::State& state) {
    std::string s = "Hello, World!";
    for (auto _ : state) {
        std::string copy(s);
    }
}
BENCHMARK(BM_StringCopy);
BENCHMARK_MAIN();

कंपाइल करना और चलाना

अनुकूलन के साथ कंपाइल करें, बेंचमार्क लाइब्रेरी से लिंक करें और चलाएँ।

g++ -O2 -DNDEBUG bench.cpp -lbenchmark -lpthread -o bench
./bench

परिणामों की व्याख्या

लाइब्रेरी प्रति इटरेशन समय, इटरेशन की संख्या और CPU समय प्रिंट करती है। प्रस्तावित बदलावों की तुलना आधाररेखा से करें।

अनुकूलक की चालों से बचना

अनुकूलक अनुपयोगी कोड हटा सकता है। परिणाम को “महत्वपूर्ण” मानने के लिए benchmark::DoNotOptimize का उपयोग करें।

for (auto _ : state) {
    auto result = expensive_function();
    benchmark::DoNotOptimize(result);
}

डेड स्टोर रोकना

benchmark::ClobberMemory कंपाइलर को बताता है कि मेमोरी स्थिति देखी जा चुकी है — इससे स्टोर हटाने से रोका जाता है।

पैरामीटरयुक्त बेंचमार्क

एक ही फ़ंक्शन का अलग-अलग इनपुट आकारों पर परीक्षण करें।

static void BM_Sort(benchmark::State& state) {
    std::vector<int> v(state.range(0));
    std::iota(v.rbegin(), v.rend(), 0);
    for (auto _ : state) {
        auto copy = v;
        std::sort(copy.begin(), copy.end());
    }
}
BENCHMARK(BM_Sort)->RangeMultiplier(2)->Range(8, 1<<14);

बहु-थ्रेडेड बेंचमार्क

Threads संशोधक के साथ स्केलेबिलिटी का परीक्षण करें।

BENCHMARK(BM_ConcurrentMap)->Threads(1)->Threads(4)->Threads(16);

कस्टम काउंटर

बाइट प्रति सेकंड या आइटम प्रति सेकंड जैसे डोमेन-विशिष्ट मेट्रिक ट्रैक करें।

state.SetItemsProcessed(state.iterations() * input.size());
state.SetBytesProcessed(state.iterations() * input.size() * sizeof(int));

सांख्यिकीय परिणाम

माध्य, माध्यिका और मानक विचलन प्राप्त करने के लिए --benchmark_repetitions=10 के साथ चलाएँ। लाइब्रेरी इन्हें अपने-आप रिपोर्ट करती है।

सामान्य कठिनाइयाँ

इन बातों का ध्यान रखें:

  • कंपाइलर “डेड” कोड हटा सकता है → DoNotOptimize का उपयोग करें
  • वार्म-अप के प्रभाव → कई iterations मापें
  • CPU फ़्रीक्वेंसी का स्केल होना → कोर को स्थिर करें और बूस्ट बंद करें
  • अन्य प्रक्रियाओं का चलना → शांत मशीन पर बेंचमार्क करें

संख्याओं को आलोचनात्मक ढंग से पढ़ना

5% सुधार मापन का शोर हो सकता है। कई बार दोहराएँ; केवल सांख्यिकीय रूप से महत्वपूर्ण अंतरों पर भरोसा करें। किसी ज्ञात आधाररेखा से तुलना करें।

विकल्प

अन्य माइक्रो-बेंचमार्क टूल:

  • नोनियस — केवल-हेडर वाला C++ बेंचमार्क
  • हयाई — पुराना, लेकिन हल्का
  • Catch2 में अंतर्निहित बेंचमार्क समर्थन है

त्वरित जाँच

बेंचमार्क लूप के अंदर benchmark::DoNotOptimize(result) का उपयोग क्यों करें?

पुनरावलोकन

सूक्ष्म स्तर पर मापन के लिए Google Benchmark का उपयोग करें। DoNotOptimize और ClobberMemory के साथ कंपाइलर की चालों को रोकें। अलग-अलग इनपुट और समवर्ती निष्पादन में व्यवहार समझने के लिए पैरामीटरयुक्त और बहु-थ्रेडेड बेंचमार्क का उपयोग करें। केवल सांख्यिकीय रूप से महत्वपूर्ण अंतरों पर भरोसा करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “Google Benchmark से micro-benchmarking” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Google Benchmark से micro-benchmarking” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Google Benchmark से micro-benchmarking” में मैं क्या सीखूँगा?

Google Benchmark से विश्वसनीय micro-benchmarks लिखें और measurement की समस्याओं से बचें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“Google Benchmark से micro-benchmarking” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Cache-friendly data layouts
  2. Branch prediction और hot loops
  3. perf, vtune और Sanitizers से profiling
  4. Google Benchmark से micro-benchmarking
← C++ Academy पर वापस जाएँ