C++ Academy · Ders

Google Benchmark ile Mikro Karşılaştırma

Google Benchmark ile güvenilir mikro karşılaştırmalar yazın ve ölçüm tuzaklarından kaçının

4. ders / 415 adım

Google Benchmark ile Mikro Karşılaştırma, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Neden Mikro Kıyaslama Yapmalı?

Makro düzeyde profil oluşturma, zamanın nerede harcandığını gösterir. Mikro kıyaslamalar, belirli kodları yalıtılmış biçimde ölçer; algoritmaları veya uygulamaları karşılaştırmak için yararlıdır.

Google Benchmark Kurulumu

Google tarafından geliştirilen, neredeyse yalnızca başlık dosyasından oluşan C++ kıyaslama kitaplığıdır. vcpkg, Conan veya apt ile kurun; -lbenchmark ile bağlayın.

#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();

Derleme ve Çalıştırma

Eniyileme ile derleyin, kıyaslama kitaplığına bağlayın ve çalıştırın.

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

Çıktıyı Yorumlama

Kitaplık, yineleme başına süreyi, yineleme sayısını ve CPU süresini yazdırır. Temel ölçümleri önerilen değişikliklerle karşılaştırın.

Eniyileyici Hilelerinden Kaçınma

Eniyileyici, işe yaramayan kodu silebilir. Sonucu "önemli" hâle getirmek için benchmark::DoNotOptimize kullanın.

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

Kullanılmayan Yazma İşlemlerini Önleme

benchmark::ClobberMemory, derleyiciye bellek durumunun gözlemlendiğini bildirir ve yazma işlemlerinin silinmesini önler.

Parametreli Kıyaslamalar

Aynı işlevi farklı girdi boyutlarıyla sınayın.

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);

Çok İş Parçacıklı Kıyaslamalar

Threads değiştiricisiyle ölçeklenebilirliği sınayın.

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

Özel Sayaçlar

Saniyedeki bayt veya saniyedeki öğe gibi alana özgü ölçümleri izleyin.

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

İstatistiksel Çıktı

Ortalama, medyan ve standart sapmayı elde etmek için --benchmark_repetitions=10 ile çalıştırın. Kitaplık bunları otomatik olarak raporlar.

Yaygın Tuzaklar

Şunlara dikkat edin:

  • Derleyicinin "kullanılmayan" kodu silmesi → DoNotOptimize kullanın
  • Isınma etkileri → çok sayıda yineleme ölçün
  • CPU frekans ölçeklendirmesi → çekirdeği sabitleyin ve turbo yükseltmeyi devre dışı bırakın
  • Diğer işlemlerin çalışması → kıyaslamayı sakin bir makinede yapın

Sayıları Eleştirel Değerlendirme

%5'lik bir iyileşme ölçüm gürültüsü olabilir. Birden fazla yineleme çalıştırın; yalnızca istatistiksel olarak anlamlı farklara inanın. Bilinen bir temel ölçümle karşılaştırın.

Alternatifler

Diğer mikro kıyaslama araçları:

  • Nonius — yalnızca başlık dosyasından oluşan C++ kıyaslaması
  • Hayai — daha eski ama hafif
  • Catch2, yerleşik kıyaslama desteğine sahiptir

Hızlı Kontrol

Kıyaslama döngüsü içinde benchmark::DoNotOptimize(result) neden kullanılır?

Özet

Ayrıntılı ölçümler için Google Benchmark kullanın. DoNotOptimize ve ClobberMemory ile derleyici hilelerini önleyin. Girdiler ve eşzamanlılık farklılıklarındaki davranışı incelemek için parametreli ve çok iş parçacıklı kıyaslamalar kullanın. Yalnızca istatistiksel olarak anlamlı farklara inanın.

Başlamak ücretsiz

Yapay zeka eğitmeniyle C++ öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“Google Benchmark ile Mikro Karşılaştırma” dersi ücretsiz mi?

Evet — “Google Benchmark ile Mikro Karşılaştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Google Benchmark ile Mikro Karşılaştırma” dersinde ne öğreneceğim?

Google Benchmark ile güvenilir mikro karşılaştırmalar yazın ve ölçüm tuzaklarından kaçının C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Google Benchmark ile Mikro Karşılaştırma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Önbellek Dostu Veri Düzenleri
  2. Dallanma Tahmini ve Sıcak Döngüler
  3. perf, vtune ve Sanitizer'larla Profil Oluşturma
  4. Google Benchmark ile Mikro Karşılaştırma
← C++ Academy Sayfasına Dön